Hive 除了为我们提供一个 CLI 方式来查询数据之外,还给我们提供了基于 JDBC/ODBC 的方式来连接 Hive,这就是 HiveServer2(HiveServer)。但是默认情况下通过 JDBC 连接 HiveServer2 不需要任何的权限认证(hive.server2.authentication = NONE
);这意味着任何知道 ThriftServer 地址的人都可以连接我们的 Hive,并执行一些操作。更可怕的是,这些人甚至可以执行一些诸如 drop table xxx
之类的操作,这势必威胁到我们的数据安全。基于此,本文介绍如何通过自定义的方式来对连接 ThriftServer 的人进行有效的权限验证。
如果想及时了解Spark、Hadoop或者Hbase相关的文章,欢迎关注微信公共帐号:iteblog_hadoop
HiveServer2 支持多种用户安全认证方式:NONE, NOSASL, KERBEROS, LDAP, PAM ,CUSTOM 等等。我们可以通过 hive.server2.authentication
参数进行配置。这篇文章我们涉及到的配置是 hive.server2.authentication=CUSTOM
,这时候我们需要通过 hive.server2.custom.authentication.class
参数配置我们自定义的权限认证类,这个类必须实现 org.apache.hive.service.auth.PasswdAuthenticationProvider
接口,org.apache.hive.service.auth.PasswdAuthenticationProvider
接口的定义如下:
|
从上可知,我们需要实现 Authenticate
方法(为啥这个方法第一个字母大写?不应该是 authenticate 吗?)。现在我们来定义一个自己的授权认证类 IteblogPasswdAuthenticationProvider
。为了简便,我把用户名和密码等数据写到了文件中;你要是愿意,你可以将这些信息存储到数据库中。实现代码非常简单,如下:
|
上面的代码逻辑非常简单,我就不介绍了。我们把用户名和密码信息写到了 /home/iteblog/hive-thrift-passwd
文件中,内容日下:
|
并通过参数 hive.server2.custom.authentication.passwd.filepath
参数指定这个文件的路径。现在我们编译上面的类,得到的 jar 包放到 $HIVE_HOME/lib
路径下面(如果你是用 Spark,那你将这个 jar 包放到 $SPARK_HOME/jars
或 $SPARK_HOME/lib
目录下)。并在 hive-site.xml
文件里面加入以下的配置:
|
重启 thriftServer,现在我们来测试下这个设置是否生效:
|
上面测试我们登录的时候没有设置用户名和密码,如果你没有输入用户名系统默认会用 anonymous 用户进行登录,但是我们并没有配置这个用户登录,这时候应该是不能登录的。从上面终端输出也可以看出登录失败,而且日志里面有如下异常输出
|
现在我们用正确的用户登录,但是密码是错误的,看下结果:
|
从上面的结果可以看出,登录同样失败,日志里面也会有以下的异常信息:
|
最后如果用户名和密码都输入正确,将会成功登录:
|
并且日志里面有以下的输出:
|
本博客文章除特别声明,全部都是原创!
转载本文请加上:转载自过往记忆(https://www.iteblog.com/)
本文链接: 【HiveServer2(Spark ThriftServer)自定义权限认证】(https://www.iteblog.com/archives/2318.html)