Hi,
I am working with Sentry + Hive Server. I want to disable the insert
permission of user jim who can only select from a table. I implemented
my own class that extends
org.apache.sentry.binding.hive.v2.metastore.MetastoreAuthzBindingV2. I
understand I should response Hive Events: READ_TABLE, ALTER_TABLE of API
org.apache.sentry.binding.hive.v2.metastore.MetastoreAuthzBindingV2.onEv
ent(). So an
MetaException/NoSuchObjectException/InvalidOperationException (I tried
all of them) is thrown for ALTER_TABLE. However, when I check the table,
the data is actually inserted.
The client receives this exception. Why the data is inserted? I want to
know what's wrong in my program? Is it a bug?
Thank you!
Qin An.
------------------------
Here is the message on the client side:
INFO: Will try to open client transport with JDBC Uri:
jdbc:hive2://localhost:10006/default
Invoking server with user jim and SQL: insert into test_tuk values(1004,
'Tom', 'Lee', 35)
Before executeQuery..
e is java.sql.SQLException: org.apache.spark.sql.AnalysisException:
org.apache.hadoop.hive.ql.metadata.HiveException: Unable to alter table.
User jim's group is not authorized.;
java.sql.SQLException: org.apache.spark.sql.AnalysisException:
org.apache.hadoop.hive.ql.metadata.HiveException: Unable to alter table.
User jim's group is not authorized.;
at
org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:296)
at
org.apache.hive.jdbc.HiveStatement.executeQuery(HiveStatement.java:392)
at
com.vitria.spark2.TestAuthClient.invoke(TestAuthClient.java:111)
at com.vitria.spark2.TestAuthClient.run(TestAuthClient.java:83)
at java.lang.Thread.run(Unknown Source)
Here is the messages from Spark log:
2017-12-06 15:30:36,713 INFO [com.vitria.spark.StdOutErrLog]
(HiveServer2-Handler-Pool: Thread-633;) ####
VtAuthenticationImpl:Authenticate user jim password 123456
2017-12-06 15:30:36,792 INFO [org.xnio] (HiveServer2-Handler-Pool:
Thread-633;) XNIO version 3.3.1.Final
2017-12-06 15:30:36,801 INFO [org.xnio.nio] (HiveServer2-Handler-Pool:
Thread-633;) XNIO NIO Implementation Version 3.3.1.Final
2017-12-06 15:30:36,835 INFO [org.jboss.remoting]
(HiveServer2-Handler-Pool: Thread-633;) JBoss Remoting version
4.0.9.Final
2017-12-06 15:30:37,003 INFO [org.jboss.ejb.client.remoting] (Remoting
"config-based-naming-client-endpoint" task-5;) EJBCLIENT000017: Received
server version 2 and marshalling strategies [river]
2017-12-06 15:30:37,013 INFO [org.jboss.ejb.client.remoting]
(HiveServer2-Handler-Pool: Thread-633;) EJBCLIENT000013: Successful
version handshake completed for receiver context
EJBReceiverContext{clientContext=org.jboss.ejb.client.EJBClientContext@5
47351f8, receiver=Remoting connection EJB receiver [connection=Remoting
connection <176d2451>,channel=jboss.ejb,nodename=pek-wkst68446]} on
channel Channel ID 99975e51 (outbound) of Remoting connection 0d681767
to /10.101.5.54:8080
2017-12-06 15:30:37,287 INFO [org.jboss.ejb.client]
(HiveServer2-Handler-Pool: Thread-633;) JBoss EJB Client version
2.1.1.Final
2017-12-06 15:30:37,394 INFO [org.jboss.ejb.client.remoting] (Remoting
"config-based-naming-client-endpoint" task-9;) EJBCLIENT000016: Channel
Channel ID 99975e51 (outbound) of Remoting connection 0d681767 to
/10.101.5.54:8080 can no longer process messages
2017-12-06 15:30:37,791 INFO
[org.apache.spark.sql.execution.SparkSqlParser]
(HiveServer2-Handler-Pool: Thread-633;) Parsing command: use default
2017-12-06 15:30:37,866 INFO [DataNucleus.Query]
(HiveServer2-Handler-Pool: Thread-633;) Reading in results for query
"org.datanucleus.store.rdbms.query.SQLQuery@0" since the connection used
is closing
2017-12-06 15:30:37,869 INFO
[com.vitria.spark.auth.VtMetastoreAuthzBinding]
(HiveServer2-Handler-Pool: Thread-633;) ######
VtMetastoreAuthzBinding:onEvent: Thread Thread[HiveServer2-Handler-Pool:
Thread-633,5,main] userName = aqin event type = READ_DATABASE
2017-12-06 15:30:37,869 INFO
[com.vitria.spark.auth.VtMetastoreAuthzBinding]
(HiveServer2-Handler-Pool: Thread-633;) ###### authorize local user:
aqin
2017-12-06 15:30:37,943 INFO
[org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation]
(pool-24-thread-1;) Running query 'insert into test_tuk values(1008,
'Tom', 'Lee', 35)' with 48ca7164-5c4a-4a78-af23-9f44c2b910d7
2017-12-06 15:30:37,944 INFO
[org.apache.spark.sql.execution.SparkSqlParser] (pool-24-thread-1;)
Parsing command: insert into test_tuk values(1008, 'Tom', 'Lee', 35)
2017-12-06 15:30:38,106 INFO [DataNucleus.Query] (pool-24-thread-1;)
Reading in results for query
"org.datanucleus.store.rdbms.query.SQLQuery@0" since the connection used
is closing
2017-12-06 15:30:38,242 INFO
[com.vitria.spark.auth.VtMetastoreAuthzBinding] (pool-24-thread-1;)
###### VtMetastoreAuthzBinding:onEvent: Thread
Thread[pool-24-thread-1,5,main] userName = jim event type = READ_TABLE
2017-12-06 15:30:38,243 INFO [com.vitria.spark.auth.DriverAuth]
(pool-24-thread-1;) #### DriverAuth::authorize: jmxUrl_ =
service:jmx:rmi://0.0.0.0:53741/jndi/rmi://PEK-WKST68446:53742/jmxrmi
username = jim
2017-12-06 15:30:40,609 INFO
[org.apache.spark.sql.catalyst.parser.CatalystSqlParser]
(pool-24-thread-1;) Parsing command: int
2017-12-06 15:30:40,621 INFO
[org.apache.spark.sql.catalyst.parser.CatalystSqlParser]
(pool-24-thread-1;) Parsing command: varchar(255)
2017-12-06 15:30:40,622 INFO
[org.apache.spark.sql.catalyst.parser.CatalystSqlParser]
(pool-24-thread-1;) Parsing command: varchar(255)
2017-12-06 15:30:40,622 INFO
[org.apache.spark.sql.catalyst.parser.CatalystSqlParser]
(pool-24-thread-1;) Parsing command: int
2017-12-06 15:30:40,981 INFO
[org.apache.spark.sql.catalyst.expressions.codegen.CodeGenerator]
(pool-24-thread-1;) Code generated in 7.467433 ms
2017-12-06 15:30:41,881 INFO [org.apache.spark.SparkContext]
(pool-24-thread-1;) Starting job: run at <unknown>:0
2017-12-06 15:30:41,899 INFO [org.apache.spark.SparkContext]
(dag-scheduler-event-loop;) Created broadcast 2 from broadcast at
DAGScheduler.scala:996
2017-12-06 15:30:41,902 INFO [org.apache.spark.executor.Executor]
(Executor task launch worker for task 2;) Running task 0.0 in stage 2.0
(TID 2)
2017-12-06 15:30:42,422 INFO
[org.apache.spark.mapred.SparkHadoopMapRedUtil] (Executor task launch
worker for task 2;) attempt_20171206153041_0002_m_000000_0: Committed
2017-12-06 15:30:42,425 INFO [org.apache.spark.executor.Executor]
(Executor task launch worker for task 2;) Finished task 0.0 in stage 2.0
(TID 2). 1224 bytes result sent to driver
2017-12-06 15:30:42,548 INFO
[com.vitria.spark.auth.VtMetastoreAuthzBinding] (pool-24-thread-1;)
###### VtMetastoreAuthzBinding:onEvent: Thread
Thread[pool-24-thread-1,5,main] userName = jim event type = READ_TABLE
2017-12-06 15:30:42,548 INFO [com.vitria.spark.auth.DriverAuth]
(pool-24-thread-1;) #### DriverAuth::authorize: jmxUrl_ =
service:jmx:rmi://0.0.0.0:53741/jndi/rmi://PEK-WKST68446:53742/jmxrmi
username = jim
2017-12-06 15:30:42,623 INFO
[com.vitria.spark.auth.VtMetastoreAuthzBinding] (pool-24-thread-1;)
###### VtMetastoreAuthzBinding:onEvent: Thread
Thread[pool-24-thread-1,5,main] userName = jim event type = READ_TABLE
2017-12-06 15:30:42,623 INFO [com.vitria.spark.auth.DriverAuth]
(pool-24-thread-1;) #### DriverAuth::authorize: jmxUrl_ =
service:jmx:rmi://0.0.0.0:53741/jndi/rmi://PEK-WKST68446:53742/jmxrmi
username = jim
2017-12-06 15:30:42,658 INFO [hive.ql.metadata.Hive]
(pool-24-thread-1;) Renaming src:
hdfs://10.101.3.128:9090/user/anqin/test_tuk/.hive-staging_hive_2017-12-
06_15-30-40_998_8671993461936031021-1/-ext-10000/part-00000, dest:
hdfs://10.101.3.128:9090/user/anqin/test_tuk/part-00000_copy_8,
Status:true
2017-12-06 15:30:42,675 ERROR [com.vitria.spark.StdOutErrLog]
(pool-24-thread-1;) chmod: changing permissions of
'hdfs://10.101.3.128:9090/user/anqin/test_tuk/part-00000_copy_8':
Permission denied. user=jim is not the owner of inode=part-00000_copy_8
2017-12-06 15:30:42,758 INFO
[com.vitria.spark.auth.VtMetastoreAuthzBinding] (pool-24-thread-1;)
###### VtMetastoreAuthzBinding:onEvent: Thread
Thread[pool-24-thread-1,5,main] userName = jim event type =
ALTER_TABLE
2017-12-06 15:30:42,759 INFO [com.vitria.spark.auth.DriverAuth]
(pool-24-thread-1;) #### DriverAuth::authorize: jmxUrl_ =
service:jmx:rmi://0.0.0.0:53741/jndi/rmi://PEK-WKST68446:53742/jmxrmi
username = jim
2017-12-06 15:30:42,796 ERROR
[com.vitria.spark.auth.VtMetastoreAuthzBinding] (pool-24-thread-1;)
Failed to authorize user jim to table test_tuk
2017-12-06 15:30:42,895 ERROR
[org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation]
(pool-24-thread-1;) Error executing query, currentState RUNNING,
org.apache.spark.sql.AnalysisException:
org.apache.hadoop.hive.ql.metadata.HiveException: Unable to alter table.
User jim's group is not authorized. InvalidOperationException;
at
org.apache.spark.sql.hive.HiveExternalCatalog.withClient(HiveExternalCat
alog.scala:106)
at
org.apache.spark.sql.hive.HiveExternalCatalog.loadTable(HiveExternalCata
log.scala:766)
at
org.apache.spark.sql.hive.execution.InsertIntoHiveTable.sideEffectResult
$lzycompute(InsertIntoHiveTable.scala:374)
at
org.apache.spark.sql.hive.execution.InsertIntoHiveTable.sideEffectResult
(InsertIntoHiveTable.scala:221)
at
org.apache.spark.sql.hive.execution.InsertIntoHiveTable.doExecute(Insert
IntoHiveTable.scala:407)
at
org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkP
lan.scala:114)
at
org.apache.spark.sql.execution.SparkPlan$$anonfun$execute$1.apply(SparkP
lan.scala:114)
at
org.apache.spark.sql.execution.SparkPlan$$anonfun$executeQuery$1.apply(S
parkPlan.scala:135)
at
org.apache.spark.rdd.RDDOperationScope$.withScope(RDDOperationScope.scal
a:151)
at
org.apache.spark.sql.execution.SparkPlan.executeQuery(SparkPlan.scala:13
2)
at
org.apache.spark.sql.execution.SparkPlan.execute(SparkPlan.scala:113)
at
org.apache.spark.sql.execution.QueryExecution.toRdd$lzycompute(QueryExec
ution.scala:92)
at
org.apache.spark.sql.execution.QueryExecution.toRdd(QueryExecution.scala
:92)
at org.apache.spark.sql.Dataset.<init>(Dataset.scala:185)
at org.apache.spark.sql.Dataset$.ofRows(Dataset.scala:64)
at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:592)
at org.apache.spark.sql.SQLContext.sql(SQLContext.scala:699)
at
org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation.or
g$apache$spark$sql$hive$thriftserver$SparkExecuteStatementOperation$$exe
cute(SparkExecuteStatementOperation.scala:231)
at
org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$a
non$1$$anon$2.run(SparkExecuteStatementOperation.scala:174)
at
org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$a
non$1$$anon$2.run(SparkExecuteStatementOperation.scala:171)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Unknown Source)
at
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformatio
n.java:1698)
at
org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$a
non$1.run(SparkExecuteStatementOperation.scala:184)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown
Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Unable to
alter table. User jim's group is not authorized.
InvalidOperationException
at org.apache.hadoop.hive.ql.metadata.Hive.alterTable(Hive.java:498)
at org.apache.hadoop.hive.ql.metadata.Hive.alterTable(Hive.java:484)
at org.apache.hadoop.hive.ql.metadata.Hive.loadTable(Hive.java:1668)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.apache.spark.sql.hive.client.Shim_v0_14.loadTable(HiveShim.scala:728
)
at
org.apache.spark.sql.hive.client.HiveClientImpl$$anonfun$loadTable$1.app
ly$mcV$sp(HiveClientImpl.scala:676)
at
org.apache.spark.sql.hive.client.HiveClientImpl$$anonfun$loadTable$1.app
ly(HiveClientImpl.scala:676)
at
org.apache.spark.sql.hive.client.HiveClientImpl$$anonfun$loadTable$1.app
ly(HiveClientImpl.scala:676)
at
org.apache.spark.sql.hive.client.HiveClientImpl$$anonfun$withHiveState$1
.apply(HiveClientImpl.scala:279)
at
org.apache.spark.sql.hive.client.HiveClientImpl.liftedTree1$1(HiveClient
Impl.scala:226)
at
org.apache.spark.sql.hive.client.HiveClientImpl.retryLocked(HiveClientIm
pl.scala:225)
at
org.apache.spark.sql.hive.client.HiveClientImpl.withHiveState(HiveClient
Impl.scala:268)
at
org.apache.spark.sql.hive.client.HiveClientImpl.loadTable(HiveClientImpl
.scala:675)
at
org.apache.spark.sql.hive.HiveExternalCatalog$$anonfun$loadTable$1.apply
$mcV$sp(HiveExternalCatalog.scala:768)
at
org.apache.spark.sql.hive.HiveExternalCatalog$$anonfun$loadTable$1.apply
(HiveExternalCatalog.scala:766)
at
org.apache.spark.sql.hive.HiveExternalCatalog$$anonfun$loadTable$1.apply
(HiveExternalCatalog.scala:766)
at
org.apache.spark.sql.hive.HiveExternalCatalog.withClient(HiveExternalCat
alog.scala:97)
... 28 more
Caused by: MetaException(message:User jim's group is not authorized.
InvalidOperationException)
at
org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.firePreEvent(H
iveMetaStore.java:1996)
at
org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.alter_table_co
re(HiveMetaStore.java:3407)
at
org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.alter_table_wi
th_cascade(HiveMetaStore.java:3380)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.apache.hadoop.hive.metastore.RetryingHMSHandler.invoke(RetryingHMSHa
ndler.java:107)
at com.sun.proxy.$Proxy12.alter_table_with_cascade(Unknown Source)
at
org.apache.hadoop.hive.metastore.HiveMetaStoreClient.alter_table(HiveMet
aStoreClient.java:340)
at
org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient.alter_tabl
e(SessionHiveMetaStoreClient.java:251)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at
org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.invoke(Retrying
MetaStoreClient.java:156)
at com.sun.proxy.$Proxy13.alter_table(Unknown Source)
at org.apache.hadoop.hive.ql.metadata.Hive.alterTable(Hive.java:496)
... 47 more
2017-12-06 15:30:42,902 ERROR
[org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation]
(pool-24-thread-1;) Error running hive query:
org.apache.hive.service.cli.HiveSQLException:
org.apache.spark.sql.AnalysisException:
org.apache.hadoop.hive.ql.metadata.HiveException: Unable to alter table.
User jim's group is not authorized. InvalidOperationException;
at
org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation.or
g$apache$spark$sql$hive$thriftserver$SparkExecuteStatementOperation$$exe
cute(SparkExecuteStatementOperation.scala:266)
at
org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$a
non$1$$anon$2.run(SparkExecuteStatementOperation.scala:174)
at
org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$a
non$1$$anon$2.run(SparkExecuteStatementOperation.scala:171)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Unknown Source)
at
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformatio
n.java:1698)
at
org.apache.spark.sql.hive.thriftserver.SparkExecuteStatementOperation$$a
non$1.run(SparkExecuteStatementOperation.scala:184)
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown
Source)
at java.util.concurrent.FutureTask.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)