[jira] [Commented] (HIVE-27195) Add database authorization for drop table command
[ https://issues.apache.org/jira/browse/HIVE-27195?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17749786#comment-17749786 ] Stamatis Zampetakis commented on HIVE-27195: Thanks for merging this [~ngangam]. In the future, please remember to give credits to contributors and reviewers in the commit message since we are mostly gathering stats from there for inviting new committer/PMC members. > 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 > Fix For: 4.0.0-beta-1 > > 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=4) {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)
[jira] [Commented] (HIVE-27195) Add database authorization for drop table command
[ https://issues.apache.org/jira/browse/HIVE-27195?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17746119#comment-17746119 ] Riju Trivedi commented on HIVE-27195: - Thank you Stamatis for reviewing. # These tests have default `hive.exec.drop.ignorenonexistent` to True hence the behavior of DROP TABLE is the NOOP. I have added one more test with `hive.exec.drop.ignorenonexistent` to False where DROP TABLE WITHOUT IF EXISTS returns an error. # Agreed, Updated tests to remove grant on tables. # CREATE TABLE *IF NOT EXISTS* also throws an authentication error in case table is already there. > 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=4) {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)
[jira] [Commented] (HIVE-27195) Add database authorization for drop table command
[ 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=4) {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)
[jira] [Commented] (HIVE-27195) Add database authorization for drop table command
[ https://issues.apache.org/jira/browse/HIVE-27195?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17745509#comment-17745509 ] Riju Trivedi commented on HIVE-27195: - Thank you [~zabetak] for reviewing and consolidating test scenarios. I have updated the test results to the [sheet|https://docs.google.com/spreadsheets/d/1CJ1U0LOCpK7TfxY5RSSM4Wmbmt7GiKt5VQrWt1x2tfs/edit?pli=1#gid=0] and uploaded tests to the PR. > 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=4) {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)
[jira] [Commented] (HIVE-27195) Add database authorization for drop table command
[ https://issues.apache.org/jira/browse/HIVE-27195?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17744625#comment-17744625 ] Stamatis Zampetakis commented on HIVE-27195: [~rtrivedi12] Thanks for adding more test cases to the PR. Based on what edge cases we have seen so far internally, I think we may need a few more scenarios to consider. I created a google [spreadsheet https://docs.google.com/spreadsheets/d/1CJ1U0LOCpK7TfxY5RSSM4Wmbmt7GiKt5VQrWt1x2tfs/edit?usp=sharing] in an attempt to enumerate all the scenarios that we would like to test based on the following boolean questions: * Does the user perform the DROP TABLE statement from the current database? * Does the user have the DROP privilege on the database where the table belongs? * Does the table (which is being dropped) exist? * Is the table temporary or regular? * Does the DROP statement contain the IF EXISTS clause? This totals to 2^5 = 32 test cases (+2 for testing also what happens when database does not exist) that we would like to have. It would be great if we can create these test cases as part of this PR and fill-in the respective spreadsheet. Some of them may exist already so feel free to skip them if that's the case. > 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=4) {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)