c语言sscanf函数的用法是什么
321
2022-11-25
CDH6 开启kerberos Hive的Sentry 用户权限分配
原理内容来之Sentry是Cloudera公司发布的一个Hadoop开源组件,截止目前还是Apache的孵化项目,它提供了细粒度级、基于角色的授权以及多租户的管理模式。Sentry当前可以和Hive/Hcatalog、Apache Solr 和Cloudera Impala集成,未来会扩展到其他的Hadoop组件,例如HDFS和HBase。
安全授权:Sentry可以控制数据访问,并对已通过验证的用户提供数据访问特权。 细粒度访问控制:Sentry支持细粒度的Hadoop数据和元数据访问控制。在Hive和Impala中Sentry的最初发行版本中,Sentry在服务器、数据库、表和视图范围提供了不同特权级别的访问控制,包括查找、插入等,允许管理员使用视图限制对行或列的访问。管理员也可以通过Sentry和带选择语句的视图或UDF,根据需要在文件内屏蔽数据。 基于角色的管理:Sentry通过基于角色的授权简化了管理,你可以轻易将访问同一数据集的不同特权级别授予多个组。 多租户管理:Sentry允许为委派给不同管理员的不同数据集设置权限。在Hive/Impala的情况下,Sentry可以在数据库/schema级别进行权限管理。 统一平台:Sentry为确保数据安全,提供了一个统一平台,使用现有的Hadoop Kerberos实现安全认证。同时,通过Hive或Impala访问数据时可以使用同样的Sentry协议。未来,Sentry协议会被扩展到其它组件。如何工作:Apache Sentry的目标是实现授权管理,它是一个策略引擎,被数据处理工具用来验证访问权限。它也是一个高度扩展的模块,可以支持任何的数据模型。当前,它支持Apache Hive和Cloudera Impala的关系数据模型,以及Apache中的有继承关系的数据模型。
Sentry提供了定义和持久化访问资源的策略的方法。目前,这些策略可以存储在文件里或者是能使用RPC服务访问的数据库后端存储里。数据访问工具,例如Hive,以一定的模式辨认用户访问数据的请求,例如从一个表读一行数据或者删除一个表。这个工具请求Sentry验证访问是否合理。Sentry构建请求用户被允许的权限的映射并判断给定的请求是否允许访问。请求工具这时候根据Sentry的判断结果来允许或者禁止用户的访问请求。
Sentry授权包括以下几种角色:
BindingBinding实现了对不同的查询引擎授权,Sentry将自己的Hook函数插入到各SQL引擎的编译、执行的不同阶段。这些Hook函数起两大作用:
一是起过滤器的作用,只放行具有相应数据对象访问权限的SQL查询; 二是起授权接管的作用,使用了Sentry之后,grant/revoke管理的权限完全被Sentry接管,grant/revoke的执行也完全在Sentry中实现;对于所有引擎的授权信息也存储在由Sentry设定的统一的数据库中。这样所有引擎的权限就实现了集中管理。
Policy Engine这是Sentry授权的核心组件。Policy Engine判定从binding层获取的输入的权限要求与服务提供层已保存的权限描述是否匹配。
Policy ProviderPolicy Provider负责从文件或者数据库中读取出原先设定的访问权限。Policy Engine以及Policy Provider其实对于任何授权体系来说都是必须的,因此是公共模块,后续还可服务于别的查询引擎。
Sentry策略存储可以使用很多后端的数据库,例如MySQL、Postgres等等,它使用ORM库DataNucleus来完成持久化操作。Sentry支持kerberos认证,也可以扩展代码支持其他认证方式。
安装Sentry服务:基于CDH 6.3.2
CDH6创建相关用户权限:
1.在Hive集群所有节点创建两个组reader、writer,并分别在对应的组下创建reader、writer用户
登陆cdh所在的服务器创建以下用户 useradd reader -s /sbin/nologin useradd writer -s /sbin/nologin
使用Sentry管理员用户hive通过beeline客户端连接HiveServer2
在这之前一定要安装krb5 client和配置hive环境变量,并将cdh6的hive和 sentry的最新客户端配置文件下载下来,替换调hive conf中的配置 kinit -kt /opt/all.keytab hive/cdh6-krb5.senses-ai.com@CDH6.COM beeline -u "jdbc:hive2://cdh6-krb5.senses-ai.com:10000/default;principal=hive/cdh6-krb5.senses-ai.com@CDH6.COM"
3.创建sentry admin role 授权,这样就可以通过hive用户管理sentry权限
create role admin_role; grant all on server server1 to role admin_role; grant role admin_role to group hive; 之后可以show databases; 进行验证查看数据库
4.创建Role(sunwenbo_writer_role,sunwenbo_reader_role)
CREATE ROLE sunwenbo_writer_role; CREATE ROLE sunwenbo_reader_role; 销毁Role DROP ROLE sunwenbo_reader_role;
5.为role赋予权限
GRANT select ON DATABASE sunwenbo TO ROLE sunwenbo_reader_role; GRANT all ON DATABASE sunwenbo TO ROLE sunwenbo_writer_role; 如果权限赋予要精确到表,那么可以用以下方式 GRANT insert ON TABLE swb123.spark021109 to role sunwenbo_writer_role; 撤销权限(结合GRANT可实现权限修改操作) REVOKE insert ON DATABASE sunwenbo FROM ROLE sunwenbo_writer_role; REVOKE insert ON TABLE swb123.spark021109 FROM ROLE sunwenbo_writer_role;
6.将role授予用户组
GRANT ROLE sunwenbo_reader_role TO GROUP reader; GRANT ROLE sunwenbo_writer_role TO GROUP writer; 查看组授权角色 SHOW ROLE GRANT GROUP reader; SHOW ROLE GRANT GROUP writer; 查看所有role(管理员) SHOW ROLES; 查看指定用户组的role SHOW ROLE GRANT GROUP reader; 查看当前认证用户的role SHOW CURRENT ROLES; 查看指定ROLE的具体权限 SHOW GRANT ROLE admin_role;
Kerberos新增principal:
1.为reader、writer创建Kerberos主体、登陆192.168.10.181
kadmin.local -q "addprinc reader/reader" Authenticating as principal root/admin@HADOOP.COM with password. WARNING: no policy specified for reader/reader@HADOOP.COM; defaulting to no policy Enter password for principal "reader/reader@HADOOP.COM": (输入密码) Re-enter password for principal "reader/reader@HADOOP.COM": (输入密码) Principal "writer/writer@HADOOP.COM" created. kadmin.local -q "addprinc writer/writer" Authenticating as principal root/admin@HADOOP.COM with password. WARNING: no policy specified for writer/writer@HADOOP.COM; defaulting to no policy Enter password for principal "reader/reader@HADOOP.COM": (输入密码) Re-enter password for principal "writer/writer@HADOOP.COM": (输入密码) Principal "writer/writer@HADOOP.COM" created.
2.将keytab文件生成到指定目录/root/all.keytab
kadmin.local -q "xst -k /root/all.keytab writer/writer@CDH6.COM reader/reader@CDH6.COM"
3.使用reader登录HiveServer2,查询sunwenbo库下的任意一张表
kinit -kt /opt/all.keytab reader/reader@CDH6.COM beeline -u "jdbc:hive2://cdh6-krb5.senses-ai.com:10000/default;principal=hive/cdh6-krb5.senses-ai.com@CDH6.COM"
4.使用writer登录HiveServer2,查询sunwenbo库下的任意一张表及swb123库下的spark021109表
kinit -kt /opt/all.keytab reader/reader@CDH6.COM beeline -u "jdbc:hive2://cdh6-krb5.senses-ai.com:10000/default;principal=hive/cdh6-krb5.senses-ai.com@CDH6.COM"
5.sentry hive权限控制相关命令
#权限分为 SELECT ,INSERT ,ALL #查看所有role show roles; #创建role create role role_name; #删除role drop role role_name; #将某个数据库读权限授予给某个role GRANT SELECT ON DATABASE db_name TO ROLE role_name; #将test 表的 S1 列的读权限授权给role_name (TABLE也可以不写) GRANT SELECT(s1) ON TABLE test TO ROLE role_name; #查看role_name 在数据库db_name中权限 SHOW GRANT ROLE role_name ON DATABASE db_name; #查看role_name 在表test中的权限 SHOW GRANT ROLE role_name ON TABLE test; #将role_name 权限给予user_name用户 GRANT ROLE role_name TO USER user_name; #将role_name 权限给予user_group用户组 GRANT ROLE role_name TO GROUP user_group; #查看某个用户下所有赋予的role权限 SHOW ROLE GRANT USER user_name; #查看某个用户组下所有赋予的role权限 SHOW ROLE GRANT GROUP user_group; #查看某个role下的权限信息 SHOW GRANT ROLE role_name; #回收role_name对数据库db_name的SELECT 权限 REVOKE SELECT ON DATABASE db_name FROM ROLE role_name; #回收role_name对表test的SELECT 权限 revoke select on [table] test from role role_name; #回收某个group下role权限 REVOKE ROLE role_name [, role_name] FROM GROUP (groupName) [,GROUP (groupName)]
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~