概述
CDH测试集群已经搭建好了,勉强算是有个数据平台可以实践了,这几天一直在忙多用户权限管理的问题,借鉴网上博客,但抄袭无数,基本百度第一页都是一模一样的内容(渣渣)。信息混乱,过时,很多博客根本没作用或者讲的不清不楚,踩坑无数,心里下定决心,一定要写篇博客专门讲清楚,这次不讲底层本质,讲应用
导读
认证 (authentication) 和授权 (authorization)
表权限
表权限优化
文件权限
平台权限和控制
认证 (authentication) 和授权 (authorization)
前提:用户已经合法,已经有相应权限
通俗举例(hive)
认证:用户登录hive客户端,是否有kerberos密钥证明用户合法
授权:认证后,获得对hive表增删改查相应的权限
hadoop认证这块基本都是用kerberos,但公司hadoop这块还处于起步阶段,不需要搞得这么复杂,所以认证基本靠linux的认证,这块不在本文讨论范围
表权限
CDH版本为5.13,hive版本为1.1.0(版本很重要),客户端选的是beeline,权限控制这块是sql standard base。顾名思义,类似传统数据库的权限控制方法,hiveserver2作为一道关卡,解析并授权beeline提交上来的sql,对权限的配置其实就是对hiveserver2的配置,简单高效又容易管理。具体的权限控制相关表可在元数据库查询,如下:
Db_privs:记录了User/Role在DB上的权限
Tbl_privs:记录了User/Role在table上的权限
Tbl_col_privs:记录了User/Role在table column上的权限
Roles:记录了所有创建的role
Role_map:记录了User与Role的对应关系
配置不能全信(包括我的),只能做参考,要看源码,源码,源码,hive1.1源码配置中的相关类说明,甚至测试类,配置的说明和默认值,源码都有
hive.security.authorization.enabled
true
hive.users.in.admin.role
hive
hive.security.authorization.manager
org.apache.hadoop.hive.ql.security.authorization.plugin.sqlstd.SQLStdHiveAuthorizerFactory
hive.security.authenticator.manager
org.apache.hadoop.hive.ql.security.SessionStateUserAuthenticator
hive.security.authorization.task.factory
官网(SqlBasedAuthorization)有详细的说明和配置,但是没有具体到版本,还是要回归源码,还是要亲自验证
表权限优化
通过beeline的方式,表权限控制已经能满足平台化需求,但是,在使用中发现,用hive cli方式是不用经过hiveserver2的,所以导致hive cli是不受权限约束的。权衡利弊下,为了管理和使用上的方便,默认所有用户只能使用beeline,但是用户的使用习惯是不可控的,因此需要从底层出发:
把hive脚本权限设置为对非root用户只读
修改hive脚本,使用hive cli的时候自动转向beeline
文件权限
hadoop acl 搞定一切,能够对目录,文件进行多个用户赋权,这个具体上网查询,hdfs-site.xml设置启动acl配置如下(没有歧义,可靠):
dfs.permissions.enabled
true
dfs.namenode.acls.enabled
true
core-site.xml设置用户组默认权限.
fs.permissions.umask-mode
002
平台权限需求和控制
总结
本文讲述了数据平台权限的建立,主要为表权限和文件权限
表权限方面介绍了beeline的权限开通和配置,着重讲了怎么依靠官网和源码进行正确的配置,同时对表权限的一些不足做小优化,文件权限主要是acl开通配置。最后结合自身平台对权限的需求,列举相关的控制手段。