diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessControlLists.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessControlLists.java index b0f33bdb461..663d0c51934 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessControlLists.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessControlLists.java @@ -644,8 +644,7 @@ public class AccessControlLists { * * Writes a set of permission [user: table permission] */ - public static byte[] writePermissionsAsBytes(ListMultimap perms, - Configuration conf) { + public static byte[] writePermissionsAsBytes(ListMultimap perms) { return ProtobufUtil.prependPBMagic(AccessControlUtil.toUserTablePermissions(perms).toByteArray()); } diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java index 1fbf01d4592..3ac92b8ed95 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/AccessController.java @@ -247,7 +247,7 @@ public class AccessController implements MasterCoprocessor, RegionCoprocessor, tables.entrySet()) { byte[] entry = t.getKey(); ListMultimap perms = t.getValue(); - byte[] serialized = AccessControlLists.writePermissionsAsBytes(perms, conf); + byte[] serialized = AccessControlLists.writePermissionsAsBytes(perms); getAuthManager().getZKPermissionWatcher().writeToZookeeper(entry, serialized); } initialized = true; @@ -284,7 +284,7 @@ public class AccessController implements MasterCoprocessor, RegionCoprocessor, currentEntry = entry; ListMultimap perms = AccessControlLists.getPermissions(conf, entry, t); - byte[] serialized = AccessControlLists.writePermissionsAsBytes(perms, conf); + byte[] serialized = AccessControlLists.writePermissionsAsBytes(perms); zkw.writeToZookeeper(entry, serialized); } } catch(IOException ex) { @@ -2456,7 +2456,7 @@ public class AccessController implements MasterCoprocessor, RegionCoprocessor, throws IOException { requirePermission(ctx, "replicateLogEntries", Action.WRITE); } - + @Override public void preClearCompactionQueues(ObserverContext ctx) throws IOException { diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/TableAuthManager.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/TableAuthManager.java index 76feff4c0b6..fdfd5c81253 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/TableAuthManager.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/security/access/TableAuthManager.java @@ -656,81 +656,6 @@ public class TableAuthManager implements Closeable { tableCache.remove(table); } - /** - * Overwrites the existing permission set for a given user for a table, and - * triggers an update for zookeeper synchronization. - * @param username - * @param table - * @param perms - */ - public void setTableUserPermissions(String username, TableName table, - List perms) { - PermissionCache tablePerms = getTablePermissions(table); - tablePerms.replaceUser(username, perms); - writeTableToZooKeeper(table, tablePerms); - } - - /** - * Overwrites the existing permission set for a group and triggers an update - * for zookeeper synchronization. - * @param group - * @param table - * @param perms - */ - public void setTableGroupPermissions(String group, TableName table, - List perms) { - PermissionCache tablePerms = getTablePermissions(table); - tablePerms.replaceGroup(group, perms); - writeTableToZooKeeper(table, tablePerms); - } - - /** - * Overwrites the existing permission set for a given user for a table, and - * triggers an update for zookeeper synchronization. - * @param username - * @param namespace - * @param perms - */ - public void setNamespaceUserPermissions(String username, String namespace, - List perms) { - PermissionCache tablePerms = getNamespacePermissions(namespace); - tablePerms.replaceUser(username, perms); - writeNamespaceToZooKeeper(namespace, tablePerms); - } - - /** - * Overwrites the existing permission set for a group and triggers an update - * for zookeeper synchronization. - * @param group - * @param namespace - * @param perms - */ - public void setNamespaceGroupPermissions(String group, String namespace, - List perms) { - PermissionCache tablePerms = getNamespacePermissions(namespace); - tablePerms.replaceGroup(group, perms); - writeNamespaceToZooKeeper(namespace, tablePerms); - } - - public void writeTableToZooKeeper(TableName table, - PermissionCache tablePerms) { - byte[] serialized = new byte[0]; - if (tablePerms != null) { - serialized = AccessControlLists.writePermissionsAsBytes(tablePerms.getAllPermissions(), conf); - } - zkperms.writeToZookeeper(table.getName(), serialized); - } - - public void writeNamespaceToZooKeeper(String namespace, - PermissionCache tablePerms) { - byte[] serialized = new byte[0]; - if (tablePerms != null) { - serialized = AccessControlLists.writePermissionsAsBytes(tablePerms.getAllPermissions(), conf); - } - zkperms.writeToZookeeper(Bytes.toBytes(AccessControlLists.toNamespaceEntry(namespace)), - serialized); - } - public long getMTime() { return mtime.get(); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestTablePermissions.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestTablePermissions.java index 7243690e5bb..cabd984ea40 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestTablePermissions.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestTablePermissions.java @@ -293,7 +293,7 @@ public class TestTablePermissions { public void testSerialization() throws Exception { Configuration conf = UTIL.getConfiguration(); ListMultimap permissions = createPermissions(); - byte[] permsData = AccessControlLists.writePermissionsAsBytes(permissions, conf); + byte[] permsData = AccessControlLists.writePermissionsAsBytes(permissions); ListMultimap copy = AccessControlLists.readPermissions(permsData, conf); diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.java index c8ab86307e8..84cdea2f77b 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/security/access/TestZKPermissionWatcher.java @@ -21,6 +21,7 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; import org.apache.hadoop.conf.Configuration; @@ -33,6 +34,8 @@ import org.apache.hadoop.hbase.security.User; import org.apache.hadoop.hbase.testclassification.LargeTests; import org.apache.hadoop.hbase.testclassification.SecurityTests; import org.apache.hadoop.hbase.zookeeper.ZKWatcher; +import org.apache.hbase.thirdparty.com.google.common.collect.ArrayListMultimap; +import org.apache.hbase.thirdparty.com.google.common.collect.ListMultimap; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.ClassRule; @@ -92,6 +95,26 @@ public class TestZKPermissionWatcher { UTIL.shutdownMiniCluster(); } + private void setTableACL( + User user, TableAuthManager srcAuthManager, TableAuthManager destAuthManager, + TablePermission.Action... actions) throws Exception{ + // update ACL: george RW + ListMultimap perms = ArrayListMultimap.create(); + perms.replaceValues(user.getShortName(), + Collections.singletonList(new TablePermission(TEST_TABLE, null, actions))); + byte[] serialized = AccessControlLists.writePermissionsAsBytes(perms); + final long mtime = destAuthManager.getMTime(); + srcAuthManager.getZKPermissionWatcher().writeToZookeeper(TEST_TABLE.getName(), serialized); + // Wait for the update to propagate + UTIL.waitFor(10000, 100, new Predicate() { + @Override + public boolean evaluate() throws Exception { + return destAuthManager.getMTime() > mtime; + } + }); + Thread.sleep(1000); + } + @Test public void testPermissionsWatcher() throws Exception { Configuration conf = UTIL.getConfiguration(); @@ -116,20 +139,9 @@ public class TestZKPermissionWatcher { assertFalse(AUTH_B.authorizeUser(hubert, TEST_TABLE, null, TablePermission.Action.WRITE)); - // update ACL: george RW - List acl = new ArrayList<>(1); - acl.add(new TablePermission(TEST_TABLE, null, TablePermission.Action.READ, - TablePermission.Action.WRITE)); - final long mtimeB = AUTH_B.getMTime(); - AUTH_A.setTableUserPermissions(george.getShortName(), TEST_TABLE, acl); - // Wait for the update to propagate - UTIL.waitFor(10000, 100, new Predicate() { - @Override - public boolean evaluate() throws Exception { - return AUTH_B.getMTime() > mtimeB; - } - }); - Thread.sleep(1000); + // update ACL: george, RW + setTableACL(george, AUTH_A, AUTH_B, + TablePermission.Action.READ, TablePermission.Action.WRITE); // check it assertTrue(AUTH_A.authorizeUser(george, TEST_TABLE, null, @@ -149,19 +161,8 @@ public class TestZKPermissionWatcher { assertFalse(AUTH_B.authorizeUser(hubert, TEST_TABLE, null, TablePermission.Action.WRITE)); - // update ACL: hubert R - acl = new ArrayList<>(1); - acl.add(new TablePermission(TEST_TABLE, null, TablePermission.Action.READ)); - final long mtimeA = AUTH_A.getMTime(); - AUTH_B.setTableUserPermissions("hubert", TEST_TABLE, acl); - // Wait for the update to propagate - UTIL.waitFor(10000, 100, new Predicate() { - @Override - public boolean evaluate() throws Exception { - return AUTH_A.getMTime() > mtimeA; - } - }); - Thread.sleep(1000); + // update ACL: hubert, Read + setTableACL(hubert, AUTH_B, AUTH_A, TablePermission.Action.READ); // check it assertTrue(AUTH_A.authorizeUser(george, TEST_TABLE, null,