You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by ga...@apache.org on 2015/03/23 22:34:11 UTC

svn commit: r1668746 - in /hive/branches/hbase-metastore: itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/ metastore/src/java/org/apache/hadoop/hive/metastore/hbase/

Author: gates
Date: Mon Mar 23 21:34:11 2015
New Revision: 1668746

URL: http://svn.apache.org/r1668746
Log:
HIVE-10018 Activating SQLStandardAuth results in NPE [hbase-metastore branch] (Alan Gates)

Modified:
    hive/branches/hbase-metastore/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/IMockUtils.java
    hive/branches/hbase-metastore/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/TestHBaseMetastoreSql.java
    hive/branches/hbase-metastore/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseStore.java

Modified: hive/branches/hbase-metastore/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/IMockUtils.java
URL: http://svn.apache.org/viewvc/hive/branches/hbase-metastore/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/IMockUtils.java?rev=1668746&r1=1668745&r2=1668746&view=diff
==============================================================================
--- hive/branches/hbase-metastore/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/IMockUtils.java (original)
+++ hive/branches/hbase-metastore/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/IMockUtils.java Mon Mar 23 21:34:11 2015
@@ -25,6 +25,8 @@ import org.apache.hadoop.hbase.client.HT
 import org.apache.hadoop.hive.cli.CliSessionState;
 import org.apache.hadoop.hive.conf.HiveConf;
 import org.apache.hadoop.hive.ql.Driver;
+import org.apache.hadoop.hive.ql.security.SessionStateConfigUserAuthenticator;
+import org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactoryForTest;
 import org.apache.hadoop.hive.ql.session.SessionState;
 import org.mockito.Mock;
 import org.mockito.Mockito;
@@ -107,6 +109,14 @@ public class IMockUtils {
         "org.apache.hadoop.hive.metastore.hbase.HBaseStore");
     conf.setBoolVar(HiveConf.ConfVars.METASTORE_FASTPATH, true);
     conf.setBoolVar(HiveConf.ConfVars.HIVE_SUPPORT_CONCURRENCY, false);
+    // Setup so we can test SQL standard auth
+    conf.setBoolVar(HiveConf.ConfVars.HIVE_TEST_AUTHORIZATION_SQLSTD_HS2_MODE, true);
+    conf.setVar(HiveConf.ConfVars.HIVE_AUTHORIZATION_MANAGER,
+        SQLStdHiveAuthorizerFactoryForTest.class.getName());
+    conf.setVar(HiveConf.ConfVars.HIVE_AUTHENTICATOR_MANAGER,
+        SessionStateConfigUserAuthenticator.class.getName());
+    conf.setBoolVar(HiveConf.ConfVars.HIVE_AUTHORIZATION_ENABLED, true);
+    conf.setVar(HiveConf.ConfVars.USERS_IN_ADMIN_ROLE, System.getProperty("user.name"));
     HBaseReadWrite.setTestConnection(hconn);
 
     SessionState.start(new CliSessionState(conf));

Modified: hive/branches/hbase-metastore/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/TestHBaseMetastoreSql.java
URL: http://svn.apache.org/viewvc/hive/branches/hbase-metastore/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/TestHBaseMetastoreSql.java?rev=1668746&r1=1668745&r2=1668746&view=diff
==============================================================================
--- hive/branches/hbase-metastore/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/TestHBaseMetastoreSql.java (original)
+++ hive/branches/hbase-metastore/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/hbase/TestHBaseMetastoreSql.java Mon Mar 23 21:34:11 2015
@@ -73,7 +73,10 @@ public class TestHBaseMetastoreSql exten
   public void database() throws Exception {
     CommandProcessorResponse rsp = driver.run("create database db");
     Assert.assertEquals(0, rsp.getResponseCode());
-    rsp = driver.run("alter database db set owner user me");
+    rsp = driver.run("set role admin");
+    Assert.assertEquals(0, rsp.getResponseCode());
+    // security doesn't let me change the properties
+    rsp = driver.run("alter database db set dbproperties ('key' = 'value')");
     Assert.assertEquals(0, rsp.getResponseCode());
     rsp = driver.run("drop database db");
     Assert.assertEquals(0, rsp.getResponseCode());
@@ -124,5 +127,58 @@ public class TestHBaseMetastoreSql exten
     Assert.assertEquals(0, rsp.getResponseCode());
   }
 
+  @Test
+  public void role() throws Exception {
+    CommandProcessorResponse rsp = driver.run("set role admin");
+    Assert.assertEquals(0, rsp.getResponseCode());
+    rsp = driver.run("create role role1");
+    Assert.assertEquals(0, rsp.getResponseCode());
+    rsp = driver.run("grant role1 to user fred with admin option");
+    Assert.assertEquals(0, rsp.getResponseCode());
+    rsp = driver.run("create role role2");
+    Assert.assertEquals(0, rsp.getResponseCode());
+    rsp = driver.run("grant role1 to role role2");
+    Assert.assertEquals(0, rsp.getResponseCode());
+    rsp = driver.run("show principals role1");
+    Assert.assertEquals(0, rsp.getResponseCode());
+    rsp = driver.run("show role grant role role1");
+    Assert.assertEquals(0, rsp.getResponseCode());
+    rsp = driver.run("show role grant user " + System.getProperty("user.name"));
+    Assert.assertEquals(0, rsp.getResponseCode());
+    rsp = driver.run("show roles");
+    Assert.assertEquals(0, rsp.getResponseCode());
+    rsp = driver.run("revoke admin option for role1 from user fred");
+    Assert.assertEquals(0, rsp.getResponseCode());
+    rsp = driver.run("revoke role1 from user fred");
+    Assert.assertEquals(0, rsp.getResponseCode());
+    rsp = driver.run("revoke role1 from role role2");
+    Assert.assertEquals(0, rsp.getResponseCode());
+    rsp = driver.run("show current roles");
+    Assert.assertEquals(0, rsp.getResponseCode());
+
+    rsp = driver.run("drop role role2");
+    Assert.assertEquals(0, rsp.getResponseCode());
+    rsp = driver.run("drop role role1");
+    Assert.assertEquals(0, rsp.getResponseCode());
+  }
+
+  @Test
+  public void grant() throws Exception {
+    CommandProcessorResponse rsp = driver.run("set role admin");
+    Assert.assertEquals(0, rsp.getResponseCode());
+    rsp = driver.run("create role role3");
+    Assert.assertEquals(0, rsp.getResponseCode());
+    driver.run("create table granttbl (c int)");
+    Assert.assertEquals(0, rsp.getResponseCode());
+    driver.run("grant select on granttbl to " + System.getProperty("user.name"));
+    Assert.assertEquals(0, rsp.getResponseCode());
+    driver.run("grant select on granttbl to role3 with grant option");
+    Assert.assertEquals(0, rsp.getResponseCode());
+    driver.run("revoke select on granttbl from " + System.getProperty("user.name"));
+    Assert.assertEquals(0, rsp.getResponseCode());
+    driver.run("revoke grant option for select on granttbl from role3");
+    Assert.assertEquals(0, rsp.getResponseCode());
+  }
+
 
 }

Modified: hive/branches/hbase-metastore/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseStore.java
URL: http://svn.apache.org/viewvc/hive/branches/hbase-metastore/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseStore.java?rev=1668746&r1=1668745&r2=1668746&view=diff
==============================================================================
--- hive/branches/hbase-metastore/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseStore.java (original)
+++ hive/branches/hbase-metastore/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseStore.java Mon Mar 23 21:34:11 2015
@@ -617,17 +617,22 @@ public class HBaseStore implements RawSt
       PrincipalPrivilegeSet pps = new PrincipalPrivilegeSet();
       PrincipalPrivilegeSet global = getHBase().getGlobalPrivs();
       if (global == null) return null;
-      List<PrivilegeGrantInfo> pgi = global.getUserPrivileges().get(userName);
-      if (pgi != null) {
-        pps.putToUserPrivileges(userName, pgi);
+      List<PrivilegeGrantInfo> pgi;
+      if (global.getUserPrivileges() != null) {
+        pgi = global.getUserPrivileges().get(userName);
+        if (pgi != null) {
+          pps.putToUserPrivileges(userName, pgi);
+        }
       }
 
-      List<String> roles = getHBase().getUserRoles(userName);
-      if (roles != null) {
-        for (String role : roles) {
-          pgi = global.getRolePrivileges().get(role);
-          if (pgi != null) {
-            pps.putToRolePrivileges(role, pgi);
+      if (global.getRolePrivileges() != null) {
+        List<String> roles = getHBase().getUserRoles(userName);
+        if (roles != null) {
+          for (String role : roles) {
+            pgi = global.getRolePrivileges().get(role);
+            if (pgi != null) {
+              pps.putToRolePrivileges(role, pgi);
+            }
           }
         }
       }
@@ -645,18 +650,25 @@ public class HBaseStore implements RawSt
     try {
       PrincipalPrivilegeSet pps = new PrincipalPrivilegeSet();
       Database db = getHBase().getDb(dbName);
-      // Find the user privileges for this db
-      List<PrivilegeGrantInfo> pgi = db.getPrivileges().getUserPrivileges().get(userName);
-      if (pgi != null) {
-        pps.putToUserPrivileges(userName, pgi);
-      }
-
-      List<String> roles = getHBase().getUserRoles(userName);
-      if (roles != null) {
-        for (String role : roles) {
-          pgi = db.getPrivileges().getRolePrivileges().get(role);
+      if (db.getPrivileges() != null) {
+        List<PrivilegeGrantInfo> pgi;
+        // Find the user privileges for this db
+        if (db.getPrivileges().getUserPrivileges() != null) {
+          pgi = db.getPrivileges().getUserPrivileges().get(userName);
           if (pgi != null) {
-            pps.putToRolePrivileges(role, pgi);
+            pps.putToUserPrivileges(userName, pgi);
+          }
+        }
+
+        if (db.getPrivileges().getRolePrivileges() != null) {
+          List<String> roles = getHBase().getUserRoles(userName);
+          if (roles != null) {
+            for (String role : roles) {
+              pgi = db.getPrivileges().getRolePrivileges().get(role);
+              if (pgi != null) {
+                pps.putToRolePrivileges(role, pgi);
+              }
+            }
           }
         }
       }
@@ -674,18 +686,24 @@ public class HBaseStore implements RawSt
     try {
       PrincipalPrivilegeSet pps = new PrincipalPrivilegeSet();
       Table table = getHBase().getTable(dbName, tableName);
-      // Find the user privileges for this db
-      List<PrivilegeGrantInfo> pgi = table.getPrivileges().getUserPrivileges().get(userName);
-      if (pgi != null) {
-        pps.putToUserPrivileges(userName, pgi);
-      }
-
-      List<String> roles = getHBase().getUserRoles(userName);
-      if (roles != null) {
-        for (String role : roles) {
-          pgi = table.getPrivileges().getRolePrivileges().get(role);
+      List<PrivilegeGrantInfo> pgi;
+      if (table.getPrivileges() != null) {
+        if (table.getPrivileges().getUserPrivileges() != null) {
+          pgi = table.getPrivileges().getUserPrivileges().get(userName);
           if (pgi != null) {
-            pps.putToRolePrivileges(role, pgi);
+            pps.putToUserPrivileges(userName, pgi);
+          }
+        }
+
+        if (table.getPrivileges().getRolePrivileges() != null) {
+          List<String> roles = getHBase().getUserRoles(userName);
+          if (roles != null) {
+            for (String role : roles) {
+              pgi = table.getPrivileges().getRolePrivileges().get(role);
+              if (pgi != null) {
+                pps.putToRolePrivileges(role, pgi);
+              }
+            }
           }
         }
       }
@@ -1068,12 +1086,14 @@ public class HBaseStore implements RawSt
       List<RolePrincipalGrant> rpgs = new ArrayList<RolePrincipalGrant>(roles.size());
       for (Role role : roles) {
         HbaseMetastoreProto.RoleGrantInfoList grants = getHBase().getRolePrincipals(role.getRoleName());
-        for (HbaseMetastoreProto.RoleGrantInfo grant : grants.getGrantInfoList()) {
-          if (grant.getPrincipalType().equals(principalType) &&
-              grant.getPrincipalName().equals(principalName)) {
-            rpgs.add(new RolePrincipalGrant(role.getRoleName(), principalName, principalType,
-                grant.getGrantOption(), (int)grant.getAddTime(), grant.getGrantor(),
-                HBaseUtils.convertPrincipalTypes(grant.getGrantorType())));
+        if (grants != null) {
+          for (HbaseMetastoreProto.RoleGrantInfo grant : grants.getGrantInfoList()) {
+            if (grant.getPrincipalType() == HBaseUtils.convertPrincipalTypes(principalType) &&
+                grant.getPrincipalName().equals(principalName)) {
+              rpgs.add(new RolePrincipalGrant(role.getRoleName(), principalName, principalType,
+                  grant.getGrantOption(), (int) grant.getAddTime(), grant.getGrantor(),
+                  HBaseUtils.convertPrincipalTypes(grant.getGrantorType())));
+            }
           }
         }
       }