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

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


The following commit(s) were added to refs/heads/master by this push:
     new bcfb4c6  RANGER-2390:Ranger should add service admin privilege support 
for hive service objects - LLAP command sets
bcfb4c6 is described below

commit bcfb4c6b3eceecd819aa0ccbbcb3a1685de447b3
Author: rmani <[email protected]>
AuthorDate: Thu Apr 11 13:26:13 2019 -0700

    RANGER-2390:Ranger should add service admin privilege support for hive 
service objects - LLAP command sets
    
    Signed-off-by: rmani <[email protected]>
---
 .../hive/authorizer/RangerHiveAuditHandler.java    | 26 +++++++++++----
 .../hive/authorizer/RangerHiveAuthorizer.java      | 32 ++++++++++++++++++
 .../services/hive/HIVERangerAuthorizerTest.java    | 39 ++++++++++++++++++++++
 .../services/hive/RangerHiveOperationType.java     | 10 +++---
 hive-agent/src/test/resources/hive-policies.json   |  2 ++
 5 files changed, 97 insertions(+), 12 deletions(-)

diff --git 
a/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuditHandler.java
 
b/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuditHandler.java
index 8fd48f8..bf4d6c1 100644
--- 
a/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuditHandler.java
+++ 
b/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuditHandler.java
@@ -23,6 +23,9 @@ import java.util.*;
 
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.commons.lang.StringUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import 
org.apache.hadoop.hive.ql.security.authorization.plugin.HiveOperationType;
 import org.apache.ranger.audit.model.AuthzAuditEvent;
 import org.apache.ranger.plugin.audit.RangerDefaultAuditHandler;
 import org.apache.ranger.plugin.model.RangerPolicy;
@@ -34,6 +37,8 @@ import com.google.common.collect.Lists;
 
 public class RangerHiveAuditHandler extends RangerDefaultAuditHandler {
 
+       private static final Log LOG = 
LogFactory.getLog(RangerDefaultAuditHandler.class);
+
        public static final String  ACCESS_TYPE_ROWFILTER = "ROW_FILTER";
        Collection<AuthzAuditEvent> auditEvents  = null;
        boolean                     deniedExists = false;
@@ -71,14 +76,17 @@ public class RangerHiveAuditHandler extends 
RangerDefaultAuditHandler {
                        }
 
                        if (hiveAccessType == HiveAccessType.SERVICEADMIN) {
+                               String hiveOperationType = request.getAction();
                                String commandStr = request.getRequestData();
-                               String queryId    = 
getServiceAdminQueryId(commandStr);
-                               if (!StringUtils.isEmpty(queryId)) {
-                                       auditEvent.setRequestData(queryId);
-                               }
-                               commandStr = getServiceAdminCmd(commandStr);
-                               if (StringUtils.isEmpty(commandStr)) {
-                                       commandStr = hiveAccessType.name();
+                               if 
(HiveOperationType.KILL_QUERY.name().equalsIgnoreCase(hiveOperationType)) {
+                                       String queryId = 
getServiceAdminQueryId(commandStr);
+                                       if (!StringUtils.isEmpty(queryId)) {
+                                               
auditEvent.setRequestData(queryId);
+                                       }
+                                       commandStr = 
getServiceAdminCmd(commandStr);
+                                       if (StringUtils.isEmpty(commandStr)) {
+                                               commandStr = 
hiveAccessType.name();
+                                       }
                                }
                                auditEvent.setAccessType(commandStr);
                        }
@@ -201,6 +209,10 @@ public class RangerHiveAuditHandler extends 
RangerDefaultAuditHandler {
 
                auditEvent.setResourcePath(dfsCommand);
 
+               if(LOG.isDebugEnabled()){
+                       LOG.debug("Logging DFS event " + auditEvent.toString());
+               }
+
                addAuthzAuditEvent(auditEvent);
     }
 
diff --git 
a/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuthorizer.java
 
b/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuthorizer.java
index 88ecf5f..1566aa0 100644
--- 
a/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuthorizer.java
+++ 
b/hive-agent/src/main/java/org/apache/ranger/authorization/hive/authorizer/RangerHiveAuthorizer.java
@@ -1013,6 +1013,7 @@ public class RangerHiveAuthorizer extends 
RangerHiveAuthorizerBase {
                                case ALTERTABLE_UNARCHIVE:
                                case ALTERTABLE_UPDATEPARTSTATS:
                                case ALTERTABLE_UPDATETABLESTATS:
+                               case ALTERTABLE_UPDATECOLUMNS:
                                case ALTERTBLPART_SKEWED_LOCATION:
                                case ALTERVIEW_AS:
                                case ALTERVIEW_PROPERTIES:
@@ -1116,6 +1117,21 @@ public class RangerHiveAuthorizer extends 
RangerHiveAuthorizerBase {
                                break;
 
                                case KILL_QUERY:
+                               case CREATE_RESOURCEPLAN:
+                               case SHOW_RESOURCEPLAN:
+                               case ALTER_RESOURCEPLAN:
+                               case DROP_RESOURCEPLAN:
+                               case CREATE_TRIGGER:
+                               case ALTER_TRIGGER:
+                               case DROP_TRIGGER:
+                               case CREATE_POOL:
+                               case ALTER_POOL:
+                               case DROP_POOL:
+                               case CREATE_MAPPING:
+                               case ALTER_MAPPING:
+                               case DROP_MAPPING:
+                               case LLAP_CACHE_PURGE:
+                               case LLAP_CLUSTER_INFO:
                                        accessType = 
HiveAccessType.SERVICEADMIN;
                                break;
 
@@ -1189,6 +1205,7 @@ public class RangerHiveAuthorizer extends 
RangerHiveAuthorizerBase {
                        case ALTERTABLE_BUCKETNUM:
                        case ALTERTABLE_UPDATETABLESTATS:
                        case ALTERTABLE_UPDATEPARTSTATS:
+                       case ALTERTABLE_UPDATECOLUMNS:
                        case ALTERTABLE_PROTECTMODE:
                        case ALTERTABLE_FILEFORMAT:
                        case ALTERTABLE_LOCATION:
@@ -1287,6 +1304,21 @@ public class RangerHiveAuthorizer extends 
RangerHiveAuthorizerBase {
                        case REPLLOAD:
                        case REPLSTATUS:
                        case KILL_QUERY:
+                       case LLAP_CACHE_PURGE:
+                       case LLAP_CLUSTER_INFO:
+                       case CREATE_RESOURCEPLAN:
+                       case SHOW_RESOURCEPLAN:
+                       case ALTER_RESOURCEPLAN:
+                       case DROP_RESOURCEPLAN:
+                       case CREATE_TRIGGER:
+                       case ALTER_TRIGGER:
+                       case DROP_TRIGGER:
+                       case CREATE_POOL:
+                       case ALTER_POOL:
+                       case DROP_POOL:
+                       case CREATE_MAPPING:
+                       case ALTER_MAPPING:
+                       case DROP_MAPPING:
                                break;
                }
 
diff --git 
a/hive-agent/src/test/java/org/apache/ranger/services/hive/HIVERangerAuthorizerTest.java
 
b/hive-agent/src/test/java/org/apache/ranger/services/hive/HIVERangerAuthorizerTest.java
index e7bed94..6238174 100644
--- 
a/hive-agent/src/test/java/org/apache/ranger/services/hive/HIVERangerAuthorizerTest.java
+++ 
b/hive-agent/src/test/java/org/apache/ranger/services/hive/HIVERangerAuthorizerTest.java
@@ -93,6 +93,7 @@ public class HIVERangerAuthorizerTest {
         conf.set(HiveConf.ConfVars.HIVE_SERVER2_THRIFT_PORT.varname, "" + 
port);
         conf.set(HiveConf.ConfVars.METASTORE_SCHEMA_VERIFICATION.toString(), 
"false");
         conf.set(HiveConf.ConfVars.HIVE_SERVER2_WEBUI_PORT.varname, "0");
+        conf.set(HiveConf.ConfVars.HIVE_EXECUTION_ENGINE.varname,"mr");
 
         hiveServer = new HiveServer2();
         hiveServer.init(conf);
@@ -617,6 +618,7 @@ public class HIVERangerAuthorizerTest {
         ResultSet resultSet = statement.executeQuery("SELECT * FROM words 
where count == '100'");
         if (resultSet.next()) {
                Assert.assertNotEquals("Mr.", resultSet.getString(1));
+            
Assert.assertEquals("1a24b7688c199c24d87b5984d152b37d1d528911ec852d9cdf98c3ef29b916ea",
 resultSet.getString(1));
                Assert.assertEquals(100, resultSet.getInt(2));
         } else {
                Assert.fail("No ResultSet found");
@@ -1032,4 +1034,41 @@ public class HIVERangerAuthorizerTest {
         statement.close();
         connection.close();
     }
+
+    @Test
+    public void testWorkLoadManagementCommands() throws Exception {
+
+        String url = "jdbc:hive2://localhost:" + port + "/rangerauthz";
+        Connection connection = DriverManager.getConnection(url, 
"da_test_user", "da_test_user");
+
+        Statement statement = connection.createStatement();
+        try {
+            statement.execute("show resource plans");
+        } catch (SQLException ex) {
+            Assert.fail("access should have been granted to da_test_user");
+        }
+        statement.close();
+        connection.close();
+
+        connection = DriverManager.getConnection(url, "da_test_user", 
"da_test_user");
+        statement = connection.createStatement();
+        try {
+            statement.execute("create resource plan myplan1");
+        } catch (SQLException ex) {
+            Assert.fail("access should have been granted to da_test_user");
+        }
+        statement.close();
+        connection.close();
+
+        connection = DriverManager.getConnection(url, "bob", "bob");
+        statement = connection.createStatement();
+        try {
+            statement.execute("create resource plan myplan1");
+            Assert.fail("Failure expected on an unauthorized call");
+        } catch (SQLException ex) {
+            //Excepted
+        }
+        statement.close();
+        connection.close();
+    }
 }
diff --git 
a/hive-agent/src/test/java/org/apache/ranger/services/hive/RangerHiveOperationType.java
 
b/hive-agent/src/test/java/org/apache/ranger/services/hive/RangerHiveOperationType.java
index e0142c9..cccab0f 100644
--- 
a/hive-agent/src/test/java/org/apache/ranger/services/hive/RangerHiveOperationType.java
+++ 
b/hive-agent/src/test/java/org/apache/ranger/services/hive/RangerHiveOperationType.java
@@ -69,16 +69,16 @@ public enum RangerHiveOperationType {
     ALTERTABLE_UPDATETABLESTATS,
     ALTERTABLE_UPDATECOLUMNS,
     ALTERTABLE_EXCHANGEPARTITION,
-    ALTER_RESOURCEPLAN,
-    ALTER_MATERIALIZED_VIEW_REWRITE,
-    ALTER_MAPPING,
-    ALTER_TRIGGER,
-    ALTER_POOL,
     ALTERTABLE_OWNER,
     ALTERTBLPART_SKEWED_LOCATION,
     ALTERVIEW_AS,
     ALTERVIEW_PROPERTIES,
     ALTERVIEW_RENAME,
+    ALTER_RESOURCEPLAN,
+    ALTER_MATERIALIZED_VIEW_REWRITE,
+    ALTER_MAPPING,
+    ALTER_TRIGGER,
+    ALTER_POOL,
     DROPVIEW_PROPERTIES,
     MSCK,
     DROPFUNCTION,
diff --git a/hive-agent/src/test/resources/hive-policies.json 
b/hive-agent/src/test/resources/hive-policies.json
index 473381c..d82f032 100644
--- a/hive-agent/src/test/resources/hive-policies.json
+++ b/hive-agent/src/test/resources/hive-policies.json
@@ -1165,6 +1165,8 @@
           "alter",
           "index",
           "lock",
+          "read",
+          "write",
           "repladmin",
           "serviceadmin"
         ]

Reply via email to