You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ng...@apache.org on 2022/03/04 17:01:28 UTC

[hive] branch master updated: HIVE-25988: CreateTableEvent should have database object as one of the hive privilege object(Saihemanth Gantasala via Naveen Gangam)

This is an automated email from the ASF dual-hosted git repository.

ngangam pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new f3cc454  HIVE-25988: CreateTableEvent should have database object as one of the hive privilege object(Saihemanth Gantasala via Naveen Gangam)
f3cc454 is described below

commit f3cc454d2ff648be3236bde82199cdc830781a53
Author: saihemanth <sa...@cloudera.com>
AuthorDate: Sat Feb 26 00:15:11 2022 +0530

    HIVE-25988: CreateTableEvent should have database object as one of the hive privilege object(Saihemanth Gantasala via Naveen Gangam)
---
 .../plugin/metastore/events/CreateTableEvent.java         | 15 ++++++++++++++-
 .../java/org/apache/hadoop/hive/metastore/HMSHandler.java |  2 +-
 .../hadoop/hive/metastore/events/PreCreateTableEvent.java | 11 ++++++++++-
 3 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/CreateTableEvent.java b/ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/CreateTableEvent.java
index 748846e..1f060b5 100644
--- a/ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/CreateTableEvent.java
+++ b/ql/src/java/org/apache/hadoop/hive/ql/security/authorization/plugin/metastore/events/CreateTableEvent.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.hive.ql.security.authorization.plugin.metastore.events
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.hadoop.hive.metastore.api.Table;
+import org.apache.hadoop.hive.metastore.api.Database;
 import org.apache.hadoop.hive.metastore.events.PreCreateTableEvent;
 import org.apache.hadoop.hive.metastore.events.PreEventContext;
 import org.apache.hadoop.hive.ql.security.authorization.plugin.HiveOperationType;
@@ -56,7 +57,17 @@ public class CreateTableEvent extends HiveMetaStoreAuthorizableEvent {
     return ret;
   }
 
-  private List<HivePrivilegeObject> getInputHObjs() { return Collections.emptyList(); }
+  private List<HivePrivilegeObject> getInputHObjs() {
+    List<HivePrivilegeObject> ret   = new ArrayList<>();
+    PreCreateTableEvent       event = (PreCreateTableEvent) preEventContext;
+    Table                     table = event.getTable();
+    String                    uri   = getSdLocation(table.getSd());
+
+    if (StringUtils.isNotEmpty(uri)) {
+      ret.add(new HivePrivilegeObject(HivePrivilegeObjectType.DFS_URI, null, uri));
+    }
+    return ret;
+  }
 
   private List<HivePrivilegeObject> getOutputHObjs() {
     LOG.debug("==> CreateTableEvent.getOutputHObjs()");
@@ -64,8 +75,10 @@ public class CreateTableEvent extends HiveMetaStoreAuthorizableEvent {
     List<HivePrivilegeObject> ret   = new ArrayList<>();
     PreCreateTableEvent       event = (PreCreateTableEvent) preEventContext;
     Table                     table = event.getTable();
+    Database                  database = event.getDatabase();
     String                    uri   = getSdLocation(table.getSd());
 
+    ret.add(getHivePrivilegeObject(database));
     ret.add(getHivePrivilegeObject(table));
 
     if (StringUtils.isNotEmpty(uri)) {
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java
index b2bd19a..965ab77 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HMSHandler.java
@@ -2351,13 +2351,13 @@ public class HMSHandler extends FacebookBase implements IHMSHandler {
     boolean success = false, madeDir = false;
     boolean isReplicated = false;
     try {
-      firePreEvent(new PreCreateTableEvent(tbl, this));
 
       ms.openTransaction();
 
       db = ms.getDatabase(tbl.getCatName(), tbl.getDbName());
       isReplicated = isDbReplicationTarget(db);
 
+      firePreEvent(new PreCreateTableEvent(tbl, db, this));
       // get_table checks whether database exists, it should be moved here
       if (is_table_exists(ms, tbl.getCatName(), tbl.getDbName(), tbl.getTableName())) {
         throw new AlreadyExistsException("Table " + getCatalogQualifiedTableName(tbl)
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/events/PreCreateTableEvent.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/events/PreCreateTableEvent.java
index bd3aa3d..e62a8b0 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/events/PreCreateTableEvent.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/events/PreCreateTableEvent.java
@@ -21,6 +21,7 @@ package org.apache.hadoop.hive.metastore.events;
 import org.apache.hadoop.classification.InterfaceAudience;
 import org.apache.hadoop.classification.InterfaceStability;
 import org.apache.hadoop.hive.metastore.IHMSHandler;
+import org.apache.hadoop.hive.metastore.api.Database;
 import org.apache.hadoop.hive.metastore.api.Table;
 
 @InterfaceAudience.Public
@@ -29,9 +30,12 @@ public class PreCreateTableEvent extends PreEventContext {
 
   private final Table table;
 
-  public PreCreateTableEvent(Table table, IHMSHandler handler) {
+  private final Database db;
+
+  public PreCreateTableEvent(Table table, Database db, IHMSHandler handler) {
     super(PreEventType.CREATE_TABLE, handler);
     this.table = table;
+    this.db = db;
   }
 
   /**
@@ -40,4 +44,9 @@ public class PreCreateTableEvent extends PreEventContext {
   public Table getTable() {
     return table;
   }
+
+  /**
+   * @return the database
+   */
+  public Database getDatabase() { return db; }
 }