
# 配置Hive JDBC接口访问Hive安全认证
在开启了Kerberos认证的集群中，客户端连接组件之前需要进行安全认证，以确保通信的安全性，Hive应用开发需要进行ZooKeeper和Kerberos安全认证。
JDBC样例工程包含安全认证代码，支持在Windows与Linux环境运行，不依赖集群客户端。HCatalog、Python、Python3样例工程仅提供Linux环境运行示例，依赖Linux环境已安装的集群客户端进行认证，样例工程代码不涉及安全认证。
#### 前提条件
已获取样例工程代码以及运行所需的配置文件及认证文件，详细操作请参见[准备连接Hive集群配置文件](https://support.huaweicloud.com/devg3-mrs/mrs_07_110048.html)。
#### 配置安全登录
安全认证主要采用代码认证方式，支持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);
}
```
