基于cloudera-manager6.2部署sentry
系统:centos 6.8
因为我是本地电脑开的几个虚拟机,为了减少内存,我把监控服务停了,报黄都可以忽略,服务器上都是正常绿色的。
首先开启kerberos
kerberos安装看https://blog.csdn.net/qq_35315256/article/details/103678473
根据提示一步一步进行,需要首先创建cloudera-scm/admin主体
1、添加sentry服务,根据提示一步一步添加完成
重要:
如果在非安全群集中启用了YARN Resource Manager HA,则在启用Kerberos之前,必须清除ZooKeeper中的StateStore znode,如下所示:
转到Cloudera Manager管理控制台主页,单击YARN服务右侧的,然后选择停止。
当您看到“ 完成”状态时,该服务已停止。
转到YARN服务,然后选择“ 操作” >“ 格式化状态存储”。
命令完成后,单击“ 关闭”。
2、修改配置
我就有以下基本的服务,没有配置任何ha,也没有zk,只是为了配置sentry
先配置hdfs
hive外部表需要在hdfs创建如下图目录,权限需要修改为hive:hive,hive的外部数据全部存到这,位置可以随便写
然后是hive
然后是yarn
这里还需要设置一下最小提交用户的id,默认是1000,修改一下限制为0
参数是:min.user.id
最后是sentry
最后重启服务
到此位置,hive认证鉴权配置完成,开始验证
3、命令行配置hive权限
先介绍几个kerberos的基本命令
kdestroy # 注销登录
kinit admin/admin # 登陆
klist # 查看当前登陆用户
kadmin.local 登陆本地数据库
list_principals # 查看存在的主体
addprinc test/test # 增加主体
3.1、增加sentry主体,是hive管理员
addprinc hive/hive # 作为管理员,必须是这个,我这里没有写域名是因为我默认的就加了,在kerberos配置过
beeline客户端连接
beeline -u "jdbc:hive2://node1:10000/;principal=hive/node1@HADOOP.COM"
是这样的,linux用户要和主体用户对应,例如,linux用户/用户组 对应 主体admin/admin,如果配置hue,需要也和hue用户对应.
3.1.1、给hive/hive超级管理员权限
create role admin;
grant all on server server1 to role admin;
grant role admin to group hive;
3.2、连接成功开始表演
show roles # 查看角色
3.2.0、创建主体
addprinc reader/reader
addprinc writer/writer
3.2.1、创建角色
create role reader;
create role writer;
3.2.2、为role赋予privilege
grant select on database testdb to role reader;
grant insert on database testdb to role writer;
3.2.3、把role授予用户组
grant role reader to group reader;
grant role writer to group writer;
3.2.4、测试
kdestroy # 注销之前用户,当然也可以直接kinit
kinit reader/reader
klist # 查看一下是不是reader用户
# 然后beeline登陆
beeline -u "jdbc:hive2://node1:10000/;principal=hive/node1@HADOOP.COM"
# 然后测试就好了
3.2.5、sentry可以控制库、表、甚至表的列。
还有简单配置的方法就是在hue中配置,网上有很多教程,可以查看一下
Sentry不支持Hive cli列权限管理,建议禁用Hive cli。也不支持SparkSql列权限管理
4、测试,本人实测
4.1、删除角色
drop role role_name; # 删除角色
4.2、把stu表的name列权限授予角色writer
grant select(name) on table test.stu to role writer;
# 这里的表前面也写上库,要不然默认是default库
# 查询的时候,写上有权限的列
4.3、查看writer角色在数据库test中的权限
show grant role writer on database test;
4.4、查看writer角色在表stu中的权限
show grant role writer on table test.stu;
4.5、把role赋予用户reader
GRANT ROLE reader TO USER reader;
Error: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Sentry does not allow privileges to be granted/revoked to/from: USER (state=08S01,code=1)
我的是cdh6.2 可能已经不支持授予给user了
4.6、把role赋予用户组reader
GRANT ROLE reader TO group reader;
4.7、查看用户、用户组下的权限
SHOW ROLE GRANT USER reader;
SHOW ROLE GRANT group reader;
4.8、查询某个role下的权限
SHOW GRANT ROLE writer;
4.9.1、回收某个角色对数据库的select权限
REVOKE SELECT ON DATABASE db_name FROM ROLE role_name;
4.9.2、回收writer角色对stu这张表id这个列的select权限
revoke select(id) on test.stu from role writer;
4.9.3、回收writer组下的writer角色
revoke role writer FROM group writer;
# 语法
REVOKE ROLE role_name [, role_name] FROM GROUP (groupName) [,GROUP (groupName)
5、常见问题
1、
Requested user deng_yb is not whitelisted and has id 501,whichis below the minimum allowed 1000
那是因为Yarn限制了用户id小于1000的用户提交作业;
2、hdfs提交mr任务
Diagnostics: Application application_1528344974377_0009 initialization failed (exitCode=255) with output: main : command provided 0
main : run as user is hdfs
main : requested yarn user is hdfs
Requested user hdfs is banned