前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用Sentry为包含特殊字符的用户组授权

如何使用Sentry为包含特殊字符的用户组授权

作者头像
Fayson
发布2018-09-29 10:36:12
2.1K0
发布2018-09-29 10:36:12
举报
文章被收录于专栏:Hadoop实操Hadoop实操

1 文档编写目的

Apache Sentry是由Cloudera贡献给Hadoop开源社区的组件,它提供了细粒度级、基于角色的授权以及多租户的管理模式。Sentry当前可以和Hive/Hcatalog、Apache Solr 、Apache Kafka以及Cloudera Impala等集成。

通过引进Sentry,Hadoop目前可在以下方面满足企业和政府用户的RBAC(Role-Based Access Control)需求:

  • 安全授权:Sentry可以控制数据访问,并对已通过验证的用户提供数据访问特权。
  • 细粒度访问控制:Sentry支持细粒度的Hadoop数据和元数据访问控制。Sentry在服务器、数据库、表和视图范围提供了不同特权级别的访问控制,包括查找、插入等——允许Admin用户通过视图的方式限制普通用户对行或列的访问,或者对数据进行脱敏处理。
  • 基于角色的管理:Sentry通过基于角色的授权的方式,让你可以轻易将访问同一数据集的不同权限级别授予多个用户组。例如,对于某特定数据集,你可以分配给反欺诈小组查看所有列的特权,给分析师查看非敏感或非PII(personally identifiable information)列的权限,给数据接收流插入新数据到HDFS的权限。
  • 多租户管理:Sentry允许给不同管理员的不同数据集设置权限。在Hive/Impala的情况下,Sentry可以在数据库/schema级别进行权限管理。
  • 统一平台:Sentry为确保数据安全,提供了一个统一平台,使用现有的Hadoop Kerberos实现安全认证。同时,通过Hive或Impala访问数据时可以使用同样的Sentry协议。未来,Sentry协议会被扩展到其它组件。

Sentry架构图

Sentry授权包括以下几种角色:

  • 资源:可以是Server、Database、Table或者URL(例如:HDFS或者本地路径)。Sentry1.5中支持对表的列(Column)进行授权。
  • 权限:授权访问某一个资源的规则,比如SELECT,INSERT,ALL。
  • 角色:角色是一系列权限的集合,可以简单的理解为权限的实例化。
  • 用户和组:一个组是一系列用户的集合。Sentry的授权是针对用户组的,组映射是可以扩展的。默认情况下,Sentry使用Hadoop的组映射(可以是操作系统组或者LDAP中的组)。Sentry允许你将用户和组进行关联,你可以将一系列的用户放入到一个组中。Sentry不能直接给一个用户或组授权,需要先将权限授予角色,通过角色给用户组授权。

本文将主要介绍如何使用Sentry为包含特殊字符的用户组授权。

测试环境:

操作系统为Redhat 7.2

CM、CDH版本为5.11.2

文章目录结构:

1. 文档编写目的

2. 配置Hive与Sentry集成

3. 使用Sentry授权

3.1 创建测试用户

3.2 创建超级用户

4. 为测试用户授权

4.1 问题复现

4.2 解决办法

4.3 权限验证

5. 总结

2 配置Hive与Sentry集成

1、Sentry服务勾选“Sentry”,点击保存更改

保存更改后,会出现如下告警信息,红色告警是因为HiveServer2默认启用了模拟功能,启用Sentry后需要关闭改功能,黄色告警是因为集群未启用Kerberos,用户可能可以绕过Sentry授权直接访问数据。

2、关闭HiveServer2模拟功能

3、启用Sentry测试模式

4、配置更改完成后,重启集群。

3 使用Sentry授权

3.1 创建测试用户

1、运行脚本创建包含特殊字符的测试用户

2、验证所有节点是否已成功创建包含特殊字符的测试用户

3.2 创建超级用户

1、使用beeline连接HiveServer2并用hive用户登录

2、执行“show databases”命令,只有default库,这里就用default数据库作为案例。

3、执行“create role admin;”语句,创建admin角色

4、执行“grant all on server server1 to role admin;”语句,为admin角色赋予超级权限

5、执行“grant role admin to group hive;”语句,将admin角色授予hive用户组

6、执行“create table test1 (s1 string,s2 string) row format delimited fields terminated by ',';”语句,创建测试表

7、执行“insert into test1 values('a','b'),('1','2');”语句,向测试表写入测试数据

8、执行“select * from test1;”语句,查看测试数据

4 为测试用户授权

4.1 问题复现

1、执行“create role test_select;”语句,创建“test_select”角色

2、执行“GRANT SELECT ON DATABASE default TO ROLE test_select;”语句,将default数据库的SELECT权限授予“test_select”角色

3、执行“GRANT ROLE test_select TO GROUP luo-kang;”语句,将“test_select”角色授予“luo-kang”用户组,出现如下异常。

4、经过分析,出现上述异常是正常的,因为“luo-kang”用户组比“hive”用户组更“特殊”,带了特殊字符“-”,所以会出现异常。

4.2 解决办法

1、修改用户组名

使用groupmod工具更改用户组名,执行如下命令:groupmod -n <newGroupName> <oldGroupName>,将“luo-kang”用户组改为不含特殊字符的用户组名

2、将“luo-kang”用户组放在反引号(`)中

执行“GRANT ROLE test_select TO GROUP `luo-kang`;”语句,将“test_select”角色授予“luo-kang”用户组,可以发现,授权语句成功执行。

4.3 权限验证

1、使用hive用户执行“show role grant group `luo-kang`;”语句,可以看到“test_select”已经授予给了“luo-kang”用户组

2、退出hive用户,使用beeline连接HiveServer2并用“luo-kang”用户登录

3、执行“select * from test1;”语句,查看测试表的内容

4、执行“insert into test1 values('a','b'),('1','2');”语句,向测试表写入测试数据,发现无法向测试表插入数据,与预期结果相符。

5 总结

1、Sentry对用户组授权,要求用户组名由字母数字或者下划线“_”组成。如果用户组名必须要包含非下划线的非字母数字字符,则必须将用户组名放在反引号(`)中以执行该命令。除此之外,建议用户组名的字母全部为小写,虽然Sentry不区分用户组名的大小写,但是Sentry进行授权时,会将大写字母全部改为小写,例如,Sentry会将TestGroup更改为testgroup。目前无法禁用此规范化,所以建议用户组包含的字母全部由小写字母组成。

2、启用Sentry后,必须给用户组授权相应权限才能执行对应操作,比如我只给“luo-kang”用户组授予了default库的SELECT权限,那么“luo-kang”用户可以查看default库内所有表的内容,但是不能向表写入数据,除非授予INSERT或者ALL权限。

参考文章:

https://www.cloudera.com/documentation/enterprise/latest/topics/sg_hive_sql.html

http://blog.javachen.com/2015/04/29/apache-sentry-architecture.html

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 文档编写目的
  • 2 配置Hive与Sentry集成
  • 3 使用Sentry授权
    • 3.1 创建测试用户
      • 3.2 创建超级用户
      • 4 为测试用户授权
        • 4.1 问题复现
          • 4.2 解决办法
            • 4.3 权限验证
            • 5 总结
            相关产品与服务
            专用宿主机
            专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档