HDFS, the Hive metastore and the hive client are all running as "hduser".
On Thu, Aug 25, 2011 at 8:22 PM, yongqiang he <heyongqiang...@gmail.com> wrote: > what is your unix name on that machine? can u do a whoami? > > On Thu, Aug 25, 2011 at 5:15 PM, Alex Holmes <grep.a...@gmail.com> wrote: >> Here's the hive-site.xml file (I use the same file for both the client >> and remote metastore). We're using mysql as the metastore DB. >> >> >> <?xml version="1.0"?> >> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> >> <configuration> >> <property> >> <name>hive.security.authorization.enabled</name> >> <value>true</value> >> </property> >> <property> >> <name>hive.metastore.local</name> >> <value>false</value> >> </property> >> <property> >> <name>hive.metastore.uris</name> >> <value>thrift://localhost:9083</value> >> </property> >> <property> >> <name>javax.jdo.option.ConnectionURL</name> >> <value>jdbc:mysql://localhost/hive?createDatabaseIfNotExist=true</value> >> </property> >> <property> >> <name>javax.jdo.option.ConnectionDriverName</name> >> <value>com.mysql.jdbc.Driver</value> >> </property> >> <property> >> <name>javax.jdo.option.ConnectionUserName</name> >> <value>hive</value> >> </property> >> <property> >> <name>javax.jdo.option.ConnectionPassword</name> >> <value>secret</value> >> </property> >> </configuration> >> >> >> >> On Wed, Aug 24, 2011 at 6:06 PM, yongqiang he <heyongqiang...@gmail.com> >> wrote: >>> this is what i have tried with a remote metastore: >>> >>> > set hive.security.authorization.enabled=false; >>> hive> >>> > >>> > >>> > drop table src2; >>> OK >>> Time taken: 1.002 seconds >>> hive> create table src2 (key int, value string); >>> OK >>> Time taken: 0.03 seconds >>> hive> >>> > >>> > >>> > set hive.security.authorization.enabled=true; >>> hive> grant select on table src2 to user heyongqiang; >>> OK >>> Time taken: 0.113 seconds >>> hive> select * from src2; >>> OK >>> Time taken: 0.188 seconds >>> hive> show grant user heyongqiang on table src2; >>> OK >>> >>> database default >>> table src2 >>> principalName heyongqiang >>> principalType USER >>> privilege Select >>> grantTime Wed Aug 24 15:03:51 PDT 2011 >>> grantor heyongqiang >>> >>> can u do a show grant? >>> >>> (But with remote metastore, i think hive should not return empty list >>> instead of null for list_privileges etc.) >>> >>> >>> >>> On Wed, Aug 24, 2011 at 2:34 PM, Alex Holmes <grep.a...@gmail.com> wrote: >>>> Authorization works for me with the local metastore. The remote >>>> metastore works with authorization turned off, but as soon as I turn >>>> it on and issue any commands I get these exceptions on the hive >>>> client. >>>> >>>> Could you also try the remote metastore please? I'm pretty sure that >>>> authorization does not work with it at all. >>>> >>>> Thanks, >>>> Alex >>>> >>>> On Wed, Aug 24, 2011 at 5:20 PM, yongqiang he <heyongqiang...@gmail.com> >>>> wrote: >>>>> I am using local metastore, and can not reproduce the problem. >>>>> >>>>> what message did you get when running local metastore? >>>>> >>>>> On Wed, Aug 24, 2011 at 1:58 PM, Alex Holmes <grep.a...@gmail.com> wrote: >>>>>> Thanks for opening a ticket. >>>>>> >>>>>> Table-level grants aren't working for me either (HIVE-2405 suggests >>>>>> that the bug is only related to global grants). >>>>>> >>>>>> hive> set hive.security.authorization.enabled=false; >>>>>> hive> CREATE TABLE pokes (foo INT, bar STRING); >>>>>> OK >>>>>> Time taken: 1.245 seconds >>>>>> hive> LOAD DATA LOCAL INPATH 'hive1.in' OVERWRITE INTO TABLE pokes; >>>>>> FAILED: Error in semantic analysis: Line 1:23 Invalid path 'hive1.in': >>>>>> No files matching path file:/app/hadoop/hive-0.7.1/conf/hive1.in >>>>>> hive> LOAD DATA LOCAL INPATH '/app/hadoop/hive1.in' OVERWRITE INTO TABLE >>>>>> pokes; >>>>>> Copying data from file:/app/hadoop/hive1.in >>>>>> Copying file: file:/app/hadoop/hive1.in >>>>>> Loading data to table default.pokes >>>>>> Moved to trash: hdfs://localhost:54310/user/hive/warehouse/pokes >>>>>> OK >>>>>> Time taken: 0.33 seconds >>>>>> hive> select * from pokes; >>>>>> OK >>>>>> 1 a >>>>>> 2 b >>>>>> 3 c >>>>>> Time taken: 0.095 seconds >>>>>> hive> grant select on table pokes to user hduser; >>>>>> OK >>>>>> Time taken: 0.251 seconds >>>>>> hive> set hive.security.authorization.enabled=true; >>>>>> hive> select * from pokes; >>>>>> FAILED: Hive Internal Error: >>>>>> org.apache.hadoop.hive.ql.metadata.HiveException(org.apache.thrift.TApplicationException: >>>>>> get_privilege_set failed: unknown result) >>>>>> org.apache.hadoop.hive.ql.metadata.HiveException: >>>>>> org.apache.thrift.TApplicationException: get_privilege_set failed: >>>>>> unknown result >>>>>> at >>>>>> org.apache.hadoop.hive.ql.metadata.Hive.get_privilege_set(Hive.java:1617) >>>>>> at >>>>>> org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProvider.authorizeUserPriv(DefaultHiveAuthorizationProvider.java:201) >>>>>> at >>>>>> org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProvider.authorizeUserAndDBPriv(DefaultHiveAuthorizationProvider.java:226) >>>>>> ... >>>>>> >>>>>> mysql> select * from TBL_PRIVS; >>>>>> +--------------+-------------+--------------+---------+--------------+----------------+----------------+----------+--------+ >>>>>> | TBL_GRANT_ID | CREATE_TIME | GRANT_OPTION | GRANTOR | GRANTOR_TYPE | >>>>>> PRINCIPAL_NAME | PRINCIPAL_TYPE | TBL_PRIV | TBL_ID | >>>>>> +--------------+-------------+--------------+---------+--------------+----------------+----------------+----------+--------+ >>>>>> | 1 | 1314219701 | 0 | hduser | USER | >>>>>> hduser | USER | Select | 1 | >>>>>> +--------------+-------------+--------------+---------+--------------+----------------+----------------+----------+--------+ >>>>>> >>>>>> Also, I noticed in HIVE-2405 that you get a meaningful error message: >>>>>> >>>>>> Authorization failed:No privilege 'Create' found for outputs { >>>>>> database:default}. Use show grant to get more details. >>>>>> >>>>>> Whereas I just get an exception (as you can see above). Were you also >>>>>> running with the remote metastore? I get these meaningful messages >>>>>> with the local metastore (and authorization on), but with the remote >>>>>> metastore with authorization turned on, I always get exceptions. >>>>>> >>>>>> Many thanks, >>>>>> Alex >>>>>> >>>>>> On Wed, Aug 24, 2011 at 3:38 PM, yongqiang he <heyongqiang...@gmail.com> >>>>>> wrote: >>>>>>> This is a bug. Will open a jira to fix this. and will backport it to >>>>>>> 0.7.1. >>>>>>> https://issues.apache.org/jira/browse/HIVE-2405 >>>>>>> >>>>>>> thanks for reporting this one! >>>>>>> >>>>>>> On Wed, Aug 24, 2011 at 6:25 AM, Alex Holmes <grep.a...@gmail.com> >>>>>>> wrote: >>>>>>>> I created the mysql database (with the simple create database command) >>>>>>>> and the remote metastore seemed to creat the mysql tables. Here's >>>>>>>> some grant information and what I see in the database: >>>>>>>> >>>>>>>> [hduser@aholmes-desktop conf]$ hive >>>>>>>> hive> grant all to user hduser; >>>>>>>> OK >>>>>>>> Time taken: 0.334 seconds >>>>>>>> hive> show grant user hduser; >>>>>>>> OK >>>>>>>> >>>>>>>> principalName hduser >>>>>>>> principalType USER >>>>>>>> privilege All >>>>>>>> grantTime 1314191500 >>>>>>>> grantor hduser >>>>>>>> Time taken: 0.046 seconds >>>>>>>> hive> CREATE TABLE pokes (foo INT, bar STRING); >>>>>>>> FAILED: Hive Internal Error: >>>>>>>> org.apache.hadoop.hive.ql.metadata.HiveException(org.apache.thrift.TApplicationException: >>>>>>>> get_privilege_set failed: unknown result) >>>>>>>> org.apache.hadoop.hive.ql.metadata.HiveException: >>>>>>>> org.apache.thrift.TApplicationException: get_privilege_set failed: >>>>>>>> unknown result >>>>>>>> at >>>>>>>> org.apache.hadoop.hive.ql.metadata.Hive.get_privilege_set(Hive.java:1617) >>>>>>>> at >>>>>>>> org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProvider.authorizeUserPriv(DefaultHiveAuthorizationProvider.java:201) >>>>>>>> at >>>>>>>> org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProvider.authorizeUserAndDBPriv(DefaultHiveAuthorizationProvider.java:226) >>>>>>>> at >>>>>>>> org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProvider.authorize(DefaultHiveAuthorizationProvider.java:89) >>>>>>>> ... >>>>>>>> >>>>>>>> mysql> use hive; >>>>>>>> Database changed >>>>>>>> mysql> select * from GLOBAL_PRIVS; >>>>>>>> +---------------+-------------+--------------+---------+--------------+----------------+----------------+-----------+ >>>>>>>> | USER_GRANT_ID | CREATE_TIME | GRANT_OPTION | GRANTOR | GRANTOR_TYPE >>>>>>>> | PRINCIPAL_NAME | PRINCIPAL_TYPE | USER_PRIV | >>>>>>>> +---------------+-------------+--------------+---------+--------------+----------------+----------------+-----------+ >>>>>>>> | 1 | 1314191500 | 0 | hduser | USER >>>>>>>> | hduser | USER | All | >>>>>>>> +---------------+-------------+--------------+---------+--------------+----------------+----------------+-----------+ >>>>>>>> 1 row in set (0.00 sec) >>>>>>>> >>>>>>>> >>>>>>>> Thanks for your help, >>>>>>>> Alex >>>>>>>> >>>>>>>> On Tue, Aug 23, 2011 at 1:27 PM, yongqiang he >>>>>>>> <heyongqiang...@gmail.com> wrote: >>>>>>>>> Have you created the metastore mysql tables for authorization? Can u >>>>>>>>> do a show grant? >>>>>>>>> >>>>>>>>> thanks >>>>>>>>> yongqiang >>>>>>>>> On Tue, Aug 16, 2011 at 2:55 PM, Alex Holmes <grep.a...@gmail.com> >>>>>>>>> wrote: >>>>>>>>>> Hi all, >>>>>>>>>> >>>>>>>>>> I've been struggling with getting Hive authorization to work for a >>>>>>>>>> few >>>>>>>>>> hours, and I really hope someone can help me. I installed Hive 0.7.1 >>>>>>>>>> on top of Hadoop 0.20.203. I'm using mysql for the metastore, and >>>>>>>>>> configured Hive to enable authorization: >>>>>>>>>> >>>>>>>>>> <property> >>>>>>>>>> <name>hive.security.authorization.enabled</name> >>>>>>>>>> <value>true</value> >>>>>>>>>> <description>enable or disable the hive client >>>>>>>>>> authorization</description> >>>>>>>>>> </property> >>>>>>>>>> >>>>>>>>>> I kept all the other Hive security configs with their default >>>>>>>>>> settings. >>>>>>>>>> >>>>>>>>>> I'm running in pseudo-distributed mode on a single node. HDFS, the >>>>>>>>>> Hive >>>>>>>>>> metastore and the Hive CLI are all running as the same user (the HDFS >>>>>>>>>> superuser). Here are the sequence of steps that are causing me >>>>>>>>>> issues. >>>>>>>>>> Without authorization everything works perfectly (creating, loading, >>>>>>>>>> selecting). >>>>>>>>>> I've also tried creating and loading the table without >>>>>>>>>> authorization, granting >>>>>>>>>> the select privilege at various levels (global, table, database), >>>>>>>>>> turning on >>>>>>>>>> auth and performing the select, resulting in the same exception. >>>>>>>>>> >>>>>>>>>> Any help with this would be greatly appreciated! >>>>>>>>>> >>>>>>>>>> Thanks, >>>>>>>>>> Alex >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> >>>>>>>>>> [hduser@aholmes-desktop ~]$ hive >>>>>>>>>> Hive history >>>>>>>>>> file=/tmp/hduser/hive_job_log_hduser_201108162158_1976573160.txt >>>>>>>>>> hive> set hive.security.authorization.enabled=false; >>>>>>>>>> hive> grant all to user hduser; >>>>>>>>>> OK >>>>>>>>>> Time taken: 0.233 seconds >>>>>>>>>> hive> set hive.security.authorization.enabled=true; >>>>>>>>>> hive> CREATE TABLE pokes3 (foo INT, bar STRING); >>>>>>>>>> FAILED: Hive Internal Error: >>>>>>>>>> org.apache.hadoop.hive.ql.metadata.HiveException(org.apache.thrift.TApplicationException: >>>>>>>>>> get_privilege_set failed: unknown result) >>>>>>>>>> org.apache.hadoop.hive.ql.metadata.HiveException: >>>>>>>>>> org.apache.thrift.TApplicationException: get_privilege_set failed: >>>>>>>>>> unknown result >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.hive.ql.metadata.Hive.get_privilege_set(Hive.java:1617) >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProvider.authorizeUserPriv(DefaultHiveAuthorizationProvider.java:201) >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProvider.authorizeUserAndDBPriv(DefaultHiveAuthorizationProvider.java:226) >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.hive.ql.security.authorization.DefaultHiveAuthorizationProvider.authorize(DefaultHiveAuthorizationProvider.java:89) >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.hive.ql.Driver.doAuthorization(Driver.java:433) >>>>>>>>>> at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:393) >>>>>>>>>> at org.apache.hadoop.hive.ql.Driver.run(Driver.java:736) >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:164) >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:241) >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:456) >>>>>>>>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) >>>>>>>>>> at >>>>>>>>>> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) >>>>>>>>>> at >>>>>>>>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) >>>>>>>>>> at java.lang.reflect.Method.invoke(Method.java:597) >>>>>>>>>> at org.apache.hadoop.util.RunJar.main(RunJar.java:156) >>>>>>>>>> Caused by: org.apache.thrift.TApplicationException: get_privilege_set >>>>>>>>>> failed: unknown result >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$Client.recv_get_privilege_set(ThriftHiveMetastore.java:2414) >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.hive.metastore.api.ThriftHiveMetastore$Client.get_privilege_set(ThriftHiveMetastore.java:2379) >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.hive.metastore.HiveMetaStoreClient.get_privilege_set(HiveMetaStoreClient.java:1042) >>>>>>>>>> at >>>>>>>>>> org.apache.hadoop.hive.ql.metadata.Hive.get_privilege_set(Hive.java:1615) >>>>>>>>>> ... 14 more >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> >