Hive的权限管理

有一个问题一直困扰LZ,使用beeline客户端连接HiveSever的时候,登录的username和password到底有什么用处?工作中都是直接两个回车键就跳过了,LZ在想是否能利用这个来做Hive的权限管理。


** 1. 登陆用户 **
LZ使用hadoop用户启动HDFS,使用hive用户启动hiveserver2和metastore,使用superman用户登录beeline客户端。启动hive前,进行以下操作:

hive-site.xml

当hive.server2.enable.doAs = false时,不管使用哪个username登录,hive都是用hive用户的身份向yarn提交任务。当hive.server2.enable.doAs = true时,hive使用username用户的身份向yarn提交任务。使用后者,还要添加下面的配置:
core-site.xml

HDFS服务允许hive用户代理hadoop.proxyuser.hive.hosts主机上的,hadoop.proxyuser.hive.groups组下的,以及hadoop.proxyuser.hive.users用户。操作时有代理用户的权限,没有hive用户的权限。上面配置的含义:任意主机的beeline都可以连接本机的hive服务,登陆用的username要添加到本机的hive用户组里面才可以登陆。LZ公司hive都配置的是*(hive.server2.enable.doAs = false),所以直接两个回车就能登陆。用上面的配置的话,就会报错:

不输入用户名,默认用户是anonymous。因为anonymous没有加入到hive用户组中,所以异常为hive用户无法代理anonymous用户。LZ把superman用户添加到hive用户组中,就可以使用superman用户登陆了(即使你当前的Linux用户不是superman,也可以用其登陆),现在还不需要使用密码。但是还不能创建数据库,因为superman用户在/user/hive/warehouse下是没有写权限的(drwxr-xr-x hive hive)。LZ的解决方案是:

很多人都是直接给777权限,LZ觉得那样很不安全。现在superman就可以建库建表了,HDFS上数据库目录的用户也是superman了。但是数据库目录的权限继承了warehouse的目录权限(drwxrwxr-x),因为hive的每个用户都添加到了hive的用户组中,所以数据库目录对任意用户都是有写权限的,这样存在安全隐患。可以在hive-site.xml里面添加下面的配置:

这样数据库目录就不会继承warehouse的目录权限,而是使用HDFS配置的dfs.umask值(默认0002)。

** 2. 登陆密码 **
登陆不需要密码,存在很大的风险。比如有人知道了用户名,就可以删除数据。LZ尝试给登陆用户添加密码。hive.server2.authentication –身份验证模式,默认为 NONE。选项为 NONE(使用普通 SASL),NOSASL,KERBEROS,LDAP,PAM 和 CUSTOM。第三方验证太麻烦,LZ使用自定义CUSTOM模式来演示。
使用CUSTOM模式要自己定义验证类:

验证不通过时候抛出异常即可。然后打个包丢到hive的lib目录下面,并且添加配置:

密码LZ用md5进行了加密,在登陆的时候使用加密前的明文密码登陆,这样安全些。

** 3. 权限管理 **

发表评论