本文主要粗略叙述基于 ClouderaManager 在CDH 5.8 中为 Impala 和 Hive 配置 Sentry 的过程。
在Sentry中,权限都只能授予给角色,角色被指定属于一个或多个组,当角色被挂载到用户组的时候,该组内的用户才具有相应的权限。权限->角色->用户组->用户显示了一条权限如何能最后被一个用户所拥有,从权限到角色,再到用户组都是通过grant/revoke的SQL语句来授予的。可以设定一个Sentry管理员所属的组,所有属于管理员组的用户都具有管理员的能力。
1.禁用HiveServer2 impersonationin:
Hive服务--->配置---->范围--->HiveServer2--->类别--->主要---->取消HiveServer2启用模拟,如下图:
2.添加hive用户为允许的系统用户(Allowed System Users)可以提交Yarn jobs:
YARN服务--->配置--->范围--->NodeManager--->类别--->安全--->允许的系统用户(Allowed System Users),若没有hive用户,则添加hive用户,然后重启Yarn服务(所有Yarn的NodeManage节点都要做如此操作)如下图:
3.在Hive服务中启动Sentry服务:
Hive服务--->配置---->范围--->Hive(服务范围)--->类别--->主要---->SentryService--->选择Sentry
重启Hive服务。
4.如3分别在impala/hue服务中启动Sentry服务。
5.把hive/impala/hue添加到Sentry服务的管理员组:
Sentry服务--->配置---->范围--->Sentry(服务范围)--->类别--->主要---->管理员组(AdminGroups)--->添加hive/impala/hue。 如图:
6.开启hive服务的testing模式:
Hive服务--->配置---->范围--->Hive(服务范围)--->类别--->主要---->高级-->sentry-site.xml的hive服务高级配置代码段,如图:
注:若不开启testing mode,在启动Sentry服务的时候可能会报错:
FAILED: InvalidConfigurationExceptionhive.server2.authentication can't be none in non-testing mode
注:Sentry服务启动后,由于Hive CLI在Sentry中不支持所以建议禁止使用Hive查询,应该使用Beeline来执行Hive查询。配置Sentry的SQL授权语句也必须在Beeline客户端中进行。有关Sentry的SQL授权语句请参考Hive SQL Syntax for Use with Sentry.
% bin/beeline
Beeline version 1.1.0-cdh5.8.3 by Apache Hive
beeline> !connect jdbc:hive2://ln-master:10000 hive hive (使用Sentry服务管理员组中的用户登入,否则没有权限执行下面的SQL语句)
0: jdbc:hive2://ln-master:10000>show roles;
创建admin角色并授予权限:
CREATE ROLE admin_role;
GRANT ALL ON SERVER server1 TO ROLE admin_role;
创建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;
把角色赋予组:
GRANT ROLE admin_role TO GROUP `admin`;
GRANT ROLE analyst_role TO GROUP `analyst`;
网友评论