[ 
https://issues.apache.org/jira/browse/HIVE-27195?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17745576#comment-17745576
 ] 

Stamatis Zampetakis commented on HIVE-27195:
--------------------------------------------

Thanks for your hard work Riju! 

I went over the results in the spreadsheet and I have a few questions.

Q1. Is it normal that when the table or database is missing the behavior of 
DROP TABLE is the same (NOOP) with and without the IF EXISTS clause? 
The [Hive 
wiki|https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl#LanguageManualDDL-DropTable]
 mentions the following:

"In Hive 0.7.0 or later, DROP returns an error if the table doesn't exist, 
unless IF EXISTS is specified or the configuration variable 
hive.exec.drop.ignorenonexistent is set to true."

Q2. I noticed that for non-temporary tables there is a "GRANT DROP ON TABLE" 
statement in the sample test case? Why is this needed? Left also a related 
comment in the PR.

Q3. I observed that DROP TABLE *IF EXISTS* will throw an authentication error 
even when the operations is NOOP (i.e., the database/table does not exist). I 
am wondering what happens with respect to authorization if we do CREATE TABLE 
*IF NOT EXISTS* and the table is already there. Do we perform the authorization 
anyways or we simply return as NOOP? Maybe it's worth keeping the behavior of 
the two operations consistent. Anyways, I am not an authorization expert so 
will defer the decision about the expected output to [~rmani] or [~hemanth619]. 

> Add database authorization for drop table command
> -------------------------------------------------
>
>                 Key: HIVE-27195
>                 URL: https://issues.apache.org/jira/browse/HIVE-27195
>             Project: Hive
>          Issue Type: Bug
>            Reporter: Riju Trivedi
>            Assignee: Riju Trivedi
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 0.5h
>  Remaining Estimate: 0h
>
> Include authorization of the database object during the "drop table" command. 
> Similar to "Create table", DB permissions should be verified in the case of 
> "drop table" too. Add the database object along with the table object to the 
> list of output objects sent for verifying privileges. This change would 
> ensure that in case of a non-existent table or temporary table (skipped from 
> authorization after HIVE-20051), the authorizer will verify privileges for 
> the database object.
> This would also prevent DROP TABLE IF EXISTS command failure for temporary or 
> non-existing tables with `RangerHiveAuthorizer`. In case of 
> temporary/non-existing table, empty input and output HivePrivilege Objects 
> are sent to Ranger authorizer and after 
> https://issues.apache.org/jira/browse/RANGER-3407 authorization request is 
> built from command in case of empty objects. Hence, the drop table if Exists 
> command fails with  HiveAccessControlException.
> Steps to Repro:
> {code:java}
> use test; CREATE TEMPORARY TABLE temp_table (id int);
> drop table if exists test.temp_table;
> Error: Error while compiling statement: FAILED: HiveAccessControlException 
> Permission denied: user [rtrivedi] does not have [DROP] privilege on 
> [test/temp_table] (state=42000,code=40000) {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to