更新时间:2023-08-03 GMT+08:00

配置JDBC访问Hive安全认证

在开启了Kerberos认证的集群中,客户端连接组件之前需要进行安全认证,以确保通信的安全性,Hive应用开发需要进行ZooKeeper和Kerberos安全认证。

JDBC样例工程包含安全认证代码,支持在Windows与Linux环境运行,不依赖集群客户端。HCatalog、Python、Python3样例工程仅提供Linux环境运行示例,依赖Linux环境已安装的集群客户端进行认证,样例工程代码不涉及安全认证。

前提条件

已获取样例工程代码以及运行所需的配置文件及认证文件,详细操作请参见准备连接集群配置文件

配置安全登录

安全认证主要采用代码认证方式,支持Oracle JAVA平台和IBM JAVA平台。

以下代码在“hive-examples/hive-jdbc-example”样例工程的“com.huawei.bigdata.hive.example”包中,该包包括JDBCExample和JDBCExamplePreLogin类,实现的功能相同,只是认证方式有区别。JDBCExample使用JDBC连接中拼接keytab的方式进行认证;JDBCExamplePreLogin的JDBC连接中不包含认证信息,使用Hadoop通用接口UserGroupInformation认证。

根据实际情况,在JDBCExample或JDBCExamplePreLogin类中修改“USER_NAME”为实际用户名,例如“developuser”,样例代码如下:

// 设置新建用户的USER_NAME,其中"xxx"为已创建的用于认证的用户名,例如创建的用户为developuser,则USER_NAME为developuser
USER_NAME = "xxx";
if ("KERBEROS".equalsIgnoreCase(auth)) {
    // 设置客户端的keytab和zookeeper认证principal
    USER_KEYTAB_FILE = "src/main/resources/user.keytab";
    ZOOKEEPER_DEFAULT_SERVER_PRINCIPAL = "zookeeper/" + getUserRealm();
    System.setProperty(ZOOKEEPER_SERVER_PRINCIPAL_KEY, ZOOKEEPER_DEFAULT_SERVER_PRINCIPAL);
}