apache hive + sentry测试

来源:互联网 发布:淘宝2017虚假交易处罚 编辑:程序博客网 时间:2024/05/21 22:58

环境:
1. ubuntu 16.04STL
2. hadoop-2.6.0-cdh5.13.0
3. hive-1.1.0-cdh5.13.0
4. sentry-1.5.1-cdh5.13.0
——————————————————————————————
各版本下载地址:(http://archive-primary.cloudera.com/cdh5/cdh/5/)

本文主要参考:
测试Hive集成Sentry-阿里云
Apache Sentry手动安装、使用手册
Apache Sentry安装及简单使用

启动所有相关服务

  1. 启动mysql 服务
  2. 启动hadoop
  3. 启动sentry
  4. 启动hiveserver2
service mysql startstart-all.shsentry --command service --conffile /usr/local/sentry/conf/sentry-site.xmlhiveserver2

创建测试用例

  1. 创建测试用例events.csv
10.1.2.3,US,android,createNote10.200.88.99,FR,windows,updateNote10.1.2.3,US,android,updateNote10.200.88.77,FR,ios,createNote10.1.4.5,US,windows,updateTag
  1. 上传到hadoop
bin/hdfs dfs -put /path/events.csv /testbin/hdfs -ls /testbin/hdfs -chmod 777 /test/envets.csv

注释:
bin/hdfs dfs -put /path/events.csv /test 中path是本地存放events.csv的路径;
bin/hdfs -ls /test 检查是否上传成功;
bin/hdfs -chmod 777 /test/envets.csv 更改文件打访问权限。

创建测试数据库

以下操作在hive中进行

1.创建数据库和表

create database test;create table test.events (    ip STRING, country STRING, client STRING, action STRING  ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';create database filter;create view filter.events as select country, client, action from test.events;create view filter.events_usonly as select * from filter.events where country = 'US';

注释:
1. 在进行数据库操作时有时会报错:set operation sql_select_limit=default
原因是数据库驱动版本过低,将驱动换位最新的即可。MySQL :: Download Connector/J
需要替换的驱动有两处,一个在hive/lib下,一个在sentry/lib下。
2. 此时会提示SSL服务相关的警告,忽略即可,或查看数据库是否关闭了SSL服务。MySQL 5.7.16 SSL 实践指南
这里写图片描述
3. 如果hive创建数据库报错:
这里写图片描述 可以先把hive中sentry配置部分注释掉再创建用于测试的表。
我这报错如下:以DEBUG模式启动hive报错:
这里写图片描述
执行create database a; 报错:
这里写图片描述
这里写图片描述
有哪位兄弟知道怎么改,留言帮忙解决问题。
常言道忽略次要矛盾,抓住主要矛盾,所以先把这个问题留下,创建好测试用例进行授权测试,该问题日后再说。
查看详细日志:hive -hiveconf hive.root.logger=DEBUG,console

2.将测试集写到数据库表中

load data local inpath '/tmp/events.csv' overwrite into table test.events;

这里写图片描述

创建角色

以下操作在beeline中进行

1.用beeline连接hiveserver2

beeline -u "jdbc:hive2://localhost:1000/" -n hive -p hive -d org.apache.hive.jdbc.HiveDriver

注释:
因为我使用的伪分布式配置,所以hive服务地址为localhost:1000,hive为site.xml配置中的“超级用户“。

2.创建角色

create role admin_role;GRANT ALL ON SERVER localhost TO ROLE admin_role;GRANT ALL ON DATABASE test TO ROLE admin_role;GRANT ALL ON DATABASE filter TO ROLE admin_role;GRANT ROLE admin_role TO GROUP admin;GRANT ROLE admin_role TO GROUP hive;create role test_role;GRANT ALL ON DATABASE filter TO ROLE test_role;use test;GRANT SELECT(ip) on TABLE test.events TO ROLE test_role;GRANT ROLE test_role TO GROUP test;

注释:
1. admin_role:具有管理员权限,可以读写所有数据库,并授权给 admin 和 hive 组(对应操作系统上的组)
2. test_role:只能读写 filtered 数据库,和对test数据库中events表ip列的操作,并授权给 test 组。
3. 为admin_role授权的SERVER localhost为sentry-xite.xml中sentry.hive.server属性的值:
<property>
<name>sentry.hive.server</name>
<value>server1</value>
</property>

  1. 创建角色中出错:
    hive端报错:
    这里写图片描述
    这里写图片描述
    sentry端报错:
    这里写图片描述
    问题原因:hadoop的用户及用户组为系统的用户据用户组,因为系统不存在hive用户,所以报没用该用户,找不到该用户的组等问题。ApacheSentry第一弹:Server启动、连接Hue、分组详解
    解决方案:在ubuntu系统中创建用户hive,admin,test创建用户组hive,admin,test并对应加入。如何添加或删除ubuntu用户和组
  2. GRANT ALL ON SERVER localhost TO ROLE admin_role; 这一句话不知道有没有生效,我的admin用户依然没show roles; 的权限,为了测试其它授权功能,我将test和filter的权限赋给了admin_role,检测角色对数据库的访问授权控制,结果是成功的。hive用户依然是超级用户,拥有所有权限。

权限测试

admin_role:拥有server的权限,包含用户组hive和admin;
test_role: 拥有数据库filter的所有权限和test数据库中events表ip列的select访问权限,包含用户组test;
我们分别进行测试。
操作命令可参考:hive集成sentry的sql使用语法
1. admin
显示当前用户角色:show current roles;
这里写图片描述
可以对test数据库中的events表操作
这里写图片描述
2. test
显示当前用户角色show current roles;
因为test_role不具备对test数据库中events表的权限,所以select * from events 失败,但具有对events表中ip列的权限,可以访问成功:
这里写图片描述
这里写图片描述

两角色主要区别在对test访问授权上,可见有效果。两个用户均可对filter数据库做操作,不做演示。

3.显示角色信息
以hive用户通过beeline登陆
显示所有角色:show roles;
这里写图片描述

显示所有角色的授权情况:
show grant role admin_role;
这里写图片描述

show grant role test_role;
这里写图片描述

注释:
在test执行select操作时会报错说数据库权限是770,test无权访问该文件。
解决方案:提升文件的权限:
hadoop fs -chown -R hive:hive /user/hive/warehouse
hadoop fs -chmod -R 770 /user/hive/warehouse
之后即可万事大吉!

原创粉丝点击