一、前提
基于前篇文章《Apache Ranger 统一授权管理框架(二)集成CDH6.3.1编译安装》,已完成Apache Ranger
编译和ranger-admin
安装。
二、ranger-hive-plugin
安装
在HiveServer2
节点安装ranger-hive plugin
下文
ranger-hive-plugin
即表示ranger-2.1.0-hive-plugin
1、安装ranger-hive-plugin
tar -zxvf ranger-2.1.0-hive-plugin.tar.gz
2、修改install.properties
文件
cd /opt/ranger-2.1.0-hive-plugin
vi install.properties
# 配置ranger admin的地址
POLICY_MGR_URL = http://S1:6080# 配置hive的仓库名
REPOSITORY_NAME=hivedev# 配置hive组件的HIVE_HOME
COMPONENT_INSTALL_DIR_NAME=/opt/cloudera/parcels/CDH/lib/hive# 配置hive的审计日志
# 关闭审计日志:XAAUDIT.SOLR.ENABLE=false
XAAUDIT.SOLR.ENABLE=true
XAAUDIT.SOLR.URL=http://S0:6083/solr/ranger_audits
XAAUDIT.SOLR.USER=NONE
XAAUDIT.SOLR.PASSWORD=NONE
XAAUDIT.SOLR.ZOOKEEPER=S0:2181,S1:2181,S2:2181,S3:2181/ranger_audits
XAAUDIT.SOLR.FILE_SPOOL_DIR=/var/log/hadoop/hive/audit/solr/spool# 配置ranger-hive-plugin的所属用户、用户组
CUSTOM_USER=hive
CUSTOM_GROUP=hadoop
3、使hive-plugin生效
cd /opt/ranger-2.1.0-hive-plugin
./enable-hive-plugin.sh
验证
- 在/opt/cloudera/parcels/CDH/lib/hive/conf目录下生成五个文件
- 在/opt/cloudera/parcels/CDH/lib/hive/lib目录下生成两个JAR文件软连接和一个目录软连接
4、新建xasecure-audit.xml
在Hive
的conf
目录新建xasecure-audit.xml
文件
cd /opt/cloudera/parcels/CDH/lib/hive/conf
vi xasecure-audit.xml
添加以下内容:
<property> <name>xasecure.audit.jpa.javax.persistence.jdbc.url</name><value>jdbc:mysql://S0/ranger</value>
</property>
<property><name>xasecure.audit.jpa.javax.persistence.jdbc.user</name><value>rangerlogger</value>
</property>
<property> <name>xasecure.audit.jpa.javax.persistence.jdbc.password</name><value>rangerlogger</value>
</property>
三、重启HiveServer2
服务
CHD集群和通过界面操作方式进行重启
四、Ranger Admin
配置
Ranger的默认端口是6080
,如果需要修改,请修改install.properties
配置文件。
访问http://s1:6080/
,默认用户名/密码:admin
登录 Ranger
管理界面,点击 HADOOP SQL +
配置hive
组件服务,下图的service name
要与ranger-hive-plugin
的install.properties
配置的REPOSITORY_NAME
值要一致。
五、简单验证
利用beeline -u jdbc:hive2://S0:10000
出现以下异常:
WARN jdbc.HiveConnection: Failed to connect to S0:10000
Error: Could not open client transport with JDBC Uri: jdbc:hive2://S0:10000: Failed to open new session: java.lang.IllegalArgumentException:
Cannot modify hive.query.redaction.rules at runtime.
It is not in list of params that are allowed to be modified at runtime (state=08S01,code=0)
解决方案
修改/opt/cloudera/parcels/CDH/lib/hive/conf/
目录下的hive
环境变量文件hive-env.sh
,注释删除export HIVE_OPTS配置
1、不指定username
测试beeline -u jdbc:hive2://S0:10000
出现:Error: Error while compiling statement: FAILED: HiveAccessControlException Permission denied: user [anonymous] does not have [USE] privilege on [*] (state=42000,code=40000)
2、指定username
测试beeline -u jdbc:hive2://S0:10000 -n test
其中test
为上文hivedev
中配置的用户
六、权限配置示例
1、在Ranger Admin
中的Scurity Zone
创建测试用户hive_test
测试hive_test
beeline -u jdbc:hive2://S0:10000 -n hive_test
2、在hivedev
中新建Policy
测试use
、show
、create
权限
删除掉原hivedev Policies
对hive_test
用户配置Service Admin
权限,如下图权限
测试hive_test
beeline -u jdbc:hive2://S0:10000 -n hive_test
此时hive_test
用户,具有use
和show
权限
修改all - database
新增create
权限
测试create
权限,发现创建数据库
可执行成功。
create database if not exists hive_test;
测试创建表,发现执行失败,测试create
权限只针对上文配置的database:*
,并无建表权限
。
CREATE TABLE t_ppp_hive (id int,pice decimal(2, 1))
STORED AS PARQUET;
3、新增table
的select
和update
权限
update
权限控制insert
相关操作
执行建表语句
CREATE TABLE t_ppp_hive (id int,pice decimal(2, 1))
STORED AS PARQUET;
执行数据插入
insert into t_ppp_hive values (1,2.2);
测试查询,发现不具有数据列的查询权限
select * from t_ppp_hive;
4、新增table
中数据列
的select
权限
测试查询,发现可以正常查询
select * from t_ppp_hive;
4、hive列脱敏配置
测试查询,发现可以正常查询,对hive_test->t_ppp_hive->id
,对id
列进行脱敏变换。
select * from t_ppp_hive;
列屏蔽允许Ranger为用户配置列的mask策略。mask支持以下8种策略:
- Redact策略 - 用x屏蔽所有字母字符,用n屏蔽所有数字字符。
- Partial mask: show last 4 策略 - 仅显示最后四个字符,其他用x代替。
- Partial mask: show first 4 策略- 仅显示前四个字符,其他用x代替。
- Hash策略- 用值的哈希值替换原值。
- Nullify策略 - 用NULL值替换原值。
- Unmasked (retain original value)策略 - 原样显示。
- Date: show only year策略 – 仅显示日期字符串的年份部分,并将月份和日期默认为01/01。
- Custom策略 – 可使用任何有效Hive UDF(返回与被屏蔽的列中的数据类型相同的数据类型)来自定义策略。
5、hive行过滤配置
字段过滤红框值为: 列名 + “要过滤的内容”
测试查询,发现可以正常查询,只查询id=="1"
的行。
select * from t_ppp_hive;
一般格式为:
- 等于:列名=“要过滤的内容”
- 不等于:列名<>“要过滤的内容”