[ https://issues.apache.org/jira/browse/HIVE-2817?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13624911#comment-13624911 ]
Chen Chun commented on HIVE-2817: --------------------------------- {code} // I think the following code in DDLSemanticAnalyzer.analyzeDropTable cause the problem // if we set hive.exec.drop.ignorenonexistent=true, then throwException=false and so the inputs and outputs are empty // And it will not do authorization check after semantic analyze. try { Table tab = db.getTable(db.getCurrentDatabase(), tableName, throwException); if (tab != null) { inputs.add(new ReadEntity(tab)); outputs.add(new WriteEntity(tab)); } } catch (HiveException e) { throw new SemanticException(ErrorMsg.INVALID_TABLE.getMsg(tableName)); } {code} A easy way to fix the problem is to set hive.exec.drop.ignorenonexistent=false. When I test the sql "drop table default.src_authorization_8" with ant, the log "</PERFLOG method=doAuthorization start=1365321309304 end=1365321309304 duration=0>" duration=0 leave a clue of what I said. {code} 2013-04-07 00:55:09,279 DEBUG parse.VariableSubstitution (VariableSubstitution.java:substitute(67)) - Substitution is on: drop table default.src_authorization_8 2013-04-07 00:55:09,280 INFO parse.ParseDriver (ParseDriver.java:parse(179)) - Parsing command: drop table default.src_authorization_8 2013-04-07 00:55:09,282 INFO parse.ParseDriver (ParseDriver.java:parse(197)) - Parse Completed 2013-04-07 00:55:09,282 INFO metastore.HiveMetaStore (HiveMetaStore.java:logInfo(452)) - 0: get_table : db=default tbl=default.src_authorization_8 2013-04-07 00:55:09,286 INFO HiveMetaStore.audit (HiveMetaStore.java:logAuditEvent(238)) - ugi=chenchun ip=unknown-ip-addr cmd=get_table : db=default tbl=default.s rc_authorization_8 2013-04-07 00:55:09,302 ERROR metastore.RetryingHMSHandler (RetryingHMSHandler.java:invoke(132)) - NoSuchObjectException(message:default.default.src_authorization_8 table not f ound) at org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.get_table(HiveMetaStore.java:1369) at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.hadoop.hive.metastore.RetryingHMSHandler.invoke(RetryingHMSHandler.java:105) at $Proxy8.get_table(Unknown Source) at org.apache.hadoop.hive.metastore.HiveMetaStoreClient.getTable(HiveMetaStoreClient.java:838) at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.hadoop.hive.metastore.RetryingMetaStoreClient.invoke(RetryingMetaStoreClient.java:74) at $Proxy9.getTable(Unknown Source) at org.apache.hadoop.hive.ql.metadata.Hive.getTable(Hive.java:948) at org.apache.hadoop.hive.ql.parse.DDLSemanticAnalyzer.getTable(DDLSemanticAnalyzer.java:3032) at org.apache.hadoop.hive.ql.parse.DDLSemanticAnalyzer.getTable(DDLSemanticAnalyzer.java:3026) at org.apache.hadoop.hive.ql.parse.DDLSemanticAnalyzer.analyzeDropTable(DDLSemanticAnalyzer.java:737) at org.apache.hadoop.hive.ql.parse.DDLSemanticAnalyzer.analyzeInternal(DDLSemanticAnalyzer.java:228) at org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer.analyze(BaseSemanticAnalyzer.java:259) at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:433) at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:337) at org.apache.hadoop.hive.ql.Driver.run(Driver.java:902) at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:259) at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:216) at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:413) at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:348) at org.apache.hadoop.hive.ql.QTestUtil.executeClient(QTestUtil.java:797) at org.apache.hadoop.hive.cli.TestCliDriver.runTest(TestCliDriver.java:124) at org.apache.hadoop.hive.cli.TestCliDriver.testCliDriver_authorization_8(TestCliDriver.java:108) 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 junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:520) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1060) at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:911) 2013-04-07 00:55:09,303 INFO ql.Driver (Driver.java:compile(442)) - Semantic Analysis Completed 2013-04-07 00:55:09,303 INFO ql.Driver (Driver.java:getSchema(259)) - Returning Hive schema: Schema(fieldSchemas:null, properties:null) 2013-04-07 00:55:09,304 INFO ql.Driver (PerfLogger.java:PerfLogBegin(100)) - <PERFLOG method=doAuthorization> 2013-04-07 00:55:09,304 INFO ql.Driver (PerfLogger.java:PerfLogEnd(127)) - </PERFLOG method=doAuthorization start=1365321309304 end=1365321309304 duration=0> {code} > Drop any table even without privilege > ------------------------------------- > > Key: HIVE-2817 > URL: https://issues.apache.org/jira/browse/HIVE-2817 > Project: Hive > Issue Type: Bug > Affects Versions: 0.7.1 > Reporter: Benyi Wang > > You can drop any table if you use fully qualified name 'database.table' even > you don't have any previlige. > {code} > hive> set hive.security.authorization.enabled=true; > hive> revoke all on default from user test_user; > hive> drop table abc; > hive> drop table abc; > Authorization failed:No privilege 'Drop' found for outputs { > database:default, table:abc}. Use show grant to get more details. > hive> drop table default.abc; > OK > Time taken: 0.13 seconds > {code} > The table and the file in {{/usr/hive/warehouse}} or external file will be > deleted. If you don't have hadoop access permission on > {{/usr/hive/warehouse}} or external files, you will see a hadoop access error > {code} > 12/02/23 15:35:35 ERROR hive.log: > org.apache.hadoop.security.AccessControlException: > org.apache.hadoop.security.AccessControlException: Permission denied: > user=test_user, access=WRITE, inode="/user/myetl":myetl:etl:drwxr-xr-x > at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) > at > sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) > {code} -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira