RANGER-202: support authorization at namespace level
Project: http://git-wip-us.apache.org/repos/asf/incubator-ranger/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ranger/commit/89c524da Tree: http://git-wip-us.apache.org/repos/asf/incubator-ranger/tree/89c524da Diff: http://git-wip-us.apache.org/repos/asf/incubator-ranger/diff/89c524da Branch: refs/heads/ranger-0.5 Commit: 89c524da9ea7b3360ffb460007df1570ca31d1b8 Parents: 3683ac0 Author: Madhan Neethiraj <[email protected]> Authored: Thu Jun 4 10:48:58 2015 -0700 Committer: Madhan Neethiraj <[email protected]> Committed: Thu Jun 4 10:48:58 2015 -0700 ---------------------------------------------------------------------- .../hbase/RangerAuthorizationCoprocessor.java | 25 +++++++++++++------- 1 file changed, 17 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ranger/blob/89c524da/hbase-agent/src/main/java/org/apache/ranger/authorization/hbase/RangerAuthorizationCoprocessor.java ---------------------------------------------------------------------- diff --git a/hbase-agent/src/main/java/org/apache/ranger/authorization/hbase/RangerAuthorizationCoprocessor.java b/hbase-agent/src/main/java/org/apache/ranger/authorization/hbase/RangerAuthorizationCoprocessor.java index fd93332..abf8a33 100644 --- a/hbase-agent/src/main/java/org/apache/ranger/authorization/hbase/RangerAuthorizationCoprocessor.java +++ b/hbase-agent/src/main/java/org/apache/ranger/authorization/hbase/RangerAuthorizationCoprocessor.java @@ -116,6 +116,7 @@ public class RangerAuthorizationCoprocessor extends RangerAuthorizationCoprocess private static final String GROUP_PREFIX = "@"; private static final String WILDCARD = "*"; + private static final String NAMESPACE_SEPARATOR = ":"; private static final TimeZone gmtTimeZone = TimeZone.getTimeZone("GMT+0"); @@ -1147,6 +1148,7 @@ public class RangerAuthorizationCoprocessor extends RangerAuthorizationCoprocess UserPermission userPerm = up == null ? null : ProtobufUtil.toUserPermission(up); Permission.Action[] actions = userPerm == null ? null : userPerm.getActions(); String userName = userPerm == null ? null : Bytes.toString(userPerm.getUser()); + String nameSpace = null; String tableName = null; String colFamily = null; String qualifier = null; @@ -1175,19 +1177,22 @@ public class RangerAuthorizationCoprocessor extends RangerAuthorizationCoprocess break; case Namespace: - default: - LOG.warn("grant(): ignoring type '" + perm.getType().name() + "'"); + nameSpace = userPerm.getNamespace(); break; } - if(StringUtil.isEmpty(tableName) && StringUtil.isEmpty(colFamily) && StringUtil.isEmpty(qualifier)) { - throw new Exception("grant(): table/columnFamily/columnQualifier not specified"); + if(StringUtil.isEmpty(nameSpace) && StringUtil.isEmpty(tableName) && StringUtil.isEmpty(colFamily) && StringUtil.isEmpty(qualifier)) { + throw new Exception("grant(): namespace/table/columnFamily/columnQualifier not specified"); } tableName = StringUtil.isEmpty(tableName) ? WILDCARD : tableName; colFamily = StringUtil.isEmpty(colFamily) ? WILDCARD : colFamily; qualifier = StringUtil.isEmpty(qualifier) ? WILDCARD : qualifier; + if(! StringUtil.isEmpty(nameSpace)) { + tableName = nameSpace + NAMESPACE_SEPARATOR + tableName; + } + User activeUser = getActiveUser(); String grantor = activeUser != null ? activeUser.getShortName() : null; @@ -1244,6 +1249,7 @@ public class RangerAuthorizationCoprocessor extends RangerAuthorizationCoprocess UserPermission userPerm = up == null ? null : ProtobufUtil.toUserPermission(up); String userName = userPerm == null ? null : Bytes.toString(userPerm.getUser()); + String nameSpace = null; String tableName = null; String colFamily = null; String qualifier = null; @@ -1268,12 +1274,11 @@ public class RangerAuthorizationCoprocessor extends RangerAuthorizationCoprocess break; case Namespace: - default: - LOG.warn("revoke(): ignoring type '" + perm.getType().name() + "'"); + nameSpace = userPerm.getNamespace(); break; } - - if(StringUtil.isEmpty(tableName) && StringUtil.isEmpty(colFamily) && StringUtil.isEmpty(qualifier)) { + + if(StringUtil.isEmpty(nameSpace) && StringUtil.isEmpty(tableName) && StringUtil.isEmpty(colFamily) && StringUtil.isEmpty(qualifier)) { throw new Exception("revoke(): table/columnFamily/columnQualifier not specified"); } @@ -1281,6 +1286,10 @@ public class RangerAuthorizationCoprocessor extends RangerAuthorizationCoprocess colFamily = StringUtil.isEmpty(colFamily) ? WILDCARD : colFamily; qualifier = StringUtil.isEmpty(qualifier) ? WILDCARD : qualifier; + if(! StringUtil.isEmpty(nameSpace)) { + tableName = nameSpace + NAMESPACE_SEPARATOR + tableName; + } + User activeUser = getActiveUser(); String grantor = activeUser != null ? activeUser.getShortName() : null;
