是新朋友吗?记得点击下面名片,关注我哦

1、Sentry简介
1.1、sentry简介
Apache Sentry是一个Hadoop开源组件,它提供了细粒度级、基于角色的授权以及多租户的管理模式 。Sentry当前可以和Hive/Hcatalog、Aapache Solr 和Cloudera impala集成,为这些组件提供权限管理服务基于角色的管理(role-based access control)通过创建角色,将每个组件的权限授予给此角色,然后在用户(组)中添加此角色,用户便具备此角色访问组件的权限使用sentry对hive进行权限管理时,这里的组件可以是整个server,也可以是单个db,或者单张table
1.2、要求
使用beenline 连接hive,进行权限管理,hive cli不支持Sentry 管理。
1.3、Sentry权限分配模式
角色------>用户组-------->用户
备注:权限赋予角色,角色分配给用户组,之后该用户组所有用户都具有该角色权限

2、安装sentry服务
登陆CM,点击下拉按钮:

点击添加服务

选中sentry,点击继续

配置好sentry sever 和gateway,点击继续
在node2 服务器(cdh 元数据库mysql服务器)上需要提前创建好Sentry 元数据库
mysql -uroot -pexample@2022create user cdh@'%' identified by 'example@2022';create database Sentry default character set utf8;grant all on Sentry.* to 'cdh'@'%';flush privileges;

如上图,配置好元数据库信息,点击继续


等待命令运行完毕,点击继续

点击完成

3、hive启用sentry
3.0 Hive启用Sentry服务
3.0.1、取消HiveServer2 启用模拟

取消勾选,点击保存更改
3.0.2、Hive启用Sentry服务

【注意】:如果不执行2.0.1步骤,会报如下错误:
已为 Hive Server2 角色“HiveServer2 (master)”启用
Hive Impersonation。应禁用 Hive Impersonation 以
启用使用 Sentry 的 Hive 授权。
3.1、HDFS配置
3.1.1、开启“启用访问控制列表”

3.1.2、开启“检查HDFS权限”

3.1.3、开启“启用 Sentry 同步”

【备注】:如果不按照本文顺序可能会报一些依赖关系的错误。如下:如果提示 "启用 HDFS/Sentry 同步时,必须正好有一个依赖 Sentry 的 Hive 服务,但是存在 0 个依赖性 Hive 服务" 表示 hive 组件需要启用 "Sentry" 权限控制,即 在 hive 组件,选 "Sentry 服务"=Sentry ( 默认为 none )
如果提示 "已为 Hive Server2 角色“HiveServer2 (cdh-master-v01)”启用 Hive Impersonation。应禁用 Hive Impersonation 以启用使用 Sentry 的 Hive 授权。" 则配置 hive.server2.enable.doAs=false 并且 勾选 "Hive Metastore Server Group 1"
3.2、Hive配置
3.2.1、启用数据库中的存储通知

3.2.2、高级配置代码段添加配置项
sentry.hive.testing.mode=true


在“sentry-site.xml 的 Hive 服务高级配置代码段(安全阀)”添加一个配置
名称:sentry.hive.testing.mode
值:true


3.3、impala配置
sentry开启

3.4、集中处理CM过期配置

处理过期配置

4、验证
4.1、设置超管角色、超管用户组
在beeline中登录hive
beeline -u jdbc:hive2://YOUR_HIVE_HOST:10000/default -n hive实例:beeline -u jdbc:hive2://master:10000/default -n hive【备注】:开启kerberos认证后,会报错
备注:初始化状态所有用户都没有权限,第一步要给系统用户组hive赋予所有权限,
这里连接beeline 要用系统用户hive
执行:
授权(权限控制链路):角色-->用户组-->用户#创建系统角色create role admin_role;#赋予所有权限给该系统角色grant all on server server1 to role admin_role;#将角色赋予给用户组hivegrant role admin_role to group hive;
备注:
server1 为用于Sentry授权的服务器名称,默认为server1

这样就可以通过hive用户管理sentry权限
4.2、赋权用户超管角色
在hive用户组下创建新用户example 进行测试(所有节点都要添加example用户)
#新建用户useradd example#设置密码passwd example#将用户添加到hive组中gpasswd -a example hive
以example用户登录测试权限 ,正常访问库表信息
#使用用户example登录beelinebeeline -u jdbc:hive2://YOUR_HIVE_HOST:10000/default example exampleshow roles;备注:可以看到该用户有角色 admin_role ---hive用户组的系统角色use xxx;select * from xxx limit 10;
4.3、新建角色测试查询权限
#创建一个新的用户组,只给查询权限,并添加一个测试用户
#建立一个新组,并设置组ID加入系统groupadd -g 888 hive_test_select--此时在/etc/passwd文件中产生一个组ID(GID)是344的项目。useradd hive_testpasswd hive_testgpasswd -a monica hive_test_select
##赋予权限
create role select_test;grant select on database test to role select_test;grant role select_test to group hive_test_select
##测试权限
#使用用户example登录beelinebeeline -u jdbc:hive2://YOUR_HIVE_HOST:10000 hive_test hive_testshow roles;备注:可以看到该用户有角色 admin_role ---hive用户组的系统角色use test;select * from xxx limit 10;drop table test.xxxx;备注:用户hive_test 所在的组hive_test_select只有角色select_test权限。只有查询权限没有删除权限,执行上面语句会提示没有权限
兴趣是最好的老师,唯有热爱不可辜负!
Have fun!
少侠,请留步,欢迎点赞关注转发






