此前对Hive的用户体系一直是心存疑惑,最近有了一些新的体会,我发现一个此前困恼了很久的问题,随着经验的增长都会迎刃而解。
这里要分为两部分认证和鉴权,认证就是让用户安全登录,鉴权即为用户的权限管理。
用户认证(Authentication)
一般有三种NONE、LDAP、Kerberos。
默认情况下是NONE,也就是不做身份认证。实际上默认情况之下访问Hive的用户即为客户端用户,如使用Linux root用户打开Hive终端,那对于Hive来说,这个会话就是root
用户。Hive并不在意用户名是什么,它的权限管理是基于角色(role)的。所以Hive没有创建用户这一说,而只有创建角色的说法。
另一层面,因为Hive最终要依赖于HDFS,Hive组件与HDFS的交互都是通过hive进程的启动用户来完成的。而Hive的用户(比如使用root
登录时的root
用户)是没有办法直接使用Hive的,可以建表但是插入数据会失败,这是因为这时的root
用户没有Hive HDFS目录的权限。
所以,我们需要将用户代理给Hive组件的运行用户去访问HDFS,所以需要在core-site.xml
内新增如下配置
至于LDAP、kerberos也就是提供一套统一的用户认证体系而已,本质上对于Hive来说,与Linux操作系统用户无异。还有一种是Custom,即支持用户自定义用户认证体系。
用户鉴权(Authorization)
一般有三种:NONE,SQLStdAuth,Ranger。
NONE,即没有鉴权体系,所有用户对所有库表有权限;SQLStdAuth,SQL标准鉴权,即Hive自带的鉴权体系,基于角色的鉴权体系,而非用户;
Ranger,ranger在Hadoop生态中只是作为一个插件而已,有它没它都可以,没它各个组件也有鉴权体系,但有它权限管理会简单很多。一般配合LDAP和kerberos来使用,它的用户列表来源于kerberos或者LDAP。