介绍
sentry的权限可以通过在HiveServer2 SQL CLI中使用grant和revoke语句来配置, Hive CLI不支持用来配置sentry权限。当sentry开启的时候,你必须使用Beeline来执行Hive查询,Hive CLI不支持。
语句
创建role
CREATE ROLE语句创建可以授权的角色。 可以将权限授予角色,然后将角色分配给用户。 已分配了角色的用户将只能够行使该角色的权限。只有具有管理权限的用户才能创建/删除角色。 默认情况下,hive,impala和hue用户在Sentry中具有管理员权限。
CREATE ROLE [role_name];
删除role
DROP ROLE语句可用于从数据库中删除角色。 一旦删除,之前分配给它的所有用户的角色将被撤销。 已经执行的查询不会受到影响。 但是,由于Hive在执行每个查询之前检查用户权限,所以已启用角色的活动用户会话将受到影响。
DROP ROLE [role_name];
授权role
GRANT ROLE语句可用于向组授予角色。 只有Sentry管理员用户可以向组授予角色。
GRANT ROLE role_name [, role_name] GROUP <groupName> [,GROUP <groupName>]
删除role授权
REVOKE ROLE语句可用于从组中撤销角色。 只有Sentry管理员用户可以从组中撤消角色。
REVOKE ROLE role_name [, role_name] FROM GROUP <groupName> [,GROUP <groupName>]
角色授权
为了向角色授予对象的特权,用户必须是Sentry管理员用户。
GRANT
<PRIVILEGE> [, <PRIVILEGE> ]
ON <OBJECT> <object_name>
TO ROLE <roleName> [,ROLE <roleName>]
删除角色授权
由于只有授权的管理员用户才能创建角色,因此只有Sentry管理员用户可以撤销组中的权限。
REVOKE
<PRIVILEGE> [, <PRIVILEGE> ]
ON <OBJECT> <object_name>
FROM ROLE <roleName> [,ROLE <roleName>]
授权下放
您可以将授予和撤消权限委派给其他角色。 例如,授予WITH GRANT OPTION权限的角色可以向/从其他角色获得GRANT / REVOKE相同的权限。 因此,如果角色对数据库和WITH GRANT OPTION设置了ALL权限,则授予该角色的用户只能对该数据库或数据库的子表执行GRANT / REVOKE语句。
GRANT
<PRIVILEGE>
ON <OBJECT> <object_name>
TO ROLE <roleName>
WITH GRANT OPTION
授权回收
只有具有特定权限或其父权限的GRANT选项的角色才能从其他角色撤销该权限。 执行以下语句后,将撤销具有和不具有grant选项的所有特权。
REVOKE
<PRIVILEGE>
ON <OBJECT> <object_name>
FROM ROLE <roleName>
切换role
SET ROLE语句可用于指定要为当前会话启用的角色。 用户只能启用已授予它们的角色。 未列出并且尚未启用的任何角色对当前会话均被禁用。 如果未启用角色,则用户将具有由其所属的任何角色授予的特权。
#开启某一个role
SET ROLE <roleName>;
#开启所有role
SET ROLE ALL;
#没有role
SET ROLE NONE;
show语句
#显示所有roles
SHOW ROLES;
#显示当前roles
SHOW CURRENT ROLES;
#列出group的所有role
SHOW ROLE GRANT GROUP <groupName>;
#列出已授权角色的特权
SHOW GRANT ROLE <roleName>;
例子
policy file
[groups]
# Assigns each Hadoop group to its set of roles
manager = analyst_role, junior_analyst_role
analyst = analyst_role
jranalyst = junior_analyst_role
customers_admin = customers_admin_role
admin = admin_role
[roles] # The uris below define a define a landing skid which
# the user can use to import or export data from the system.
# Since the server runs as the user "hive" files in that directory
# must either have the group hive and read/write set or
# be world read/write.
analyst_role = server=server1->db=analyst1, \
server=server1->db=jranalyst1->table=*->action=select
server=server1->uri=hdfs://ha-nn-uri/landing/analyst1
junior_analyst_role = server=server1->db=jranalyst1, \
server=server1->uri=hdfs://ha-nn-uri/landing/jranalyst1
# Implies everything on server1.
admin_role = server=server1
ps:sentry即支持后端DB存储访配置策略,也支持配置文件的形式设置测试,上面的策略文件就是以配置文件的形式设置访问策略。
analyst_role授权
CREATE ROLE analyst_role;
GRANT ALL ON DATABASE analyst1 TO ROLE analyst_role;
GRANT SELECT ON DATABASE jranalyst1 TO ROLE analyst_role;
GRANT ALL ON URI 'hdfs://ha-nn-uri/landing/analyst1' \
TO ROLE analyst_role;
junior_analyst_role授权
CREATE ROLE junior_analyst_role;
GRANT ALL ON DATABASE jranalyst1 TO ROLE junior_analyst_role;
GRANT ALL ON URI 'hdfs://ha-nn-uri/landing/jranalyst1' \
TO ROLE junior_analyst_role;
admin_role授权
CREATE ROLE admin_role
GRANT ALL ON SERVER server TO ROLE admin_role;
group授予角色
GRANT ROLE admin_role TO GROUP admin;
GRANT ROLE analyst_role TO GROUP analyst;
GRANT ROLE jranalyst_role TO GROUP jranalyst;