使用 keytab kerberos 身份验证连接到 Hive 时出错

Posted

技术标签:

【中文标题】使用 keytab kerberos 身份验证连接到 Hive 时出错【英文标题】:Error Connecting to Hive with keytab kerberos authentication 【发布时间】:2022-01-17 16:28:28 【问题描述】:

我正在尝试连接到远程 CDH 集群中的 hive。

使用的依赖:

<dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-jdbc</artifactId>
        <version>1.1.0</version>
        <classifier>standalone</classifier>
    </dependency>

代码:

  val url: String = "jdbc:hive2://ip-11-11-5-228.eu-central-1.compute.internal:10000/test;" +
    "principal=hive/my@test-TELEKOM.COM;"
  val driver = "org.apache.hive.jdbc.HiveDriver"
  val fullTableName = "test.student_data"
  val keytab_path = "/etc/my.keytab"

  val conf:org.apache.hadoop.conf.Configuration = new org.apache.hadoop.conf.Configuration()
  System.setProperty("java.security.krb5.conf", "/etc/krb5.conf")
  System.setProperty("java.security.krb5.realm", "my-test.COM")
  System.setProperty("HADOOP_CONF_DIR", "/etc/hadoop/conf/")
  System.setProperty("java.security.krb5.kdc", "ip-11-11-5-228.eu-central-1.compute.internal")
  conf.set("hadoop.security.authentication", "kerberos")
  conf.set("hadoop.security.authorization", "true")
  UserGroupInformation.setConfiguration(conf)
  UserGroupInformation.loginUserFromKeytab("hive/my@test-TELEKOM.COM",
    keytab_path)
  Class.forName("org.apache.hive.jdbc.HiveDriver")

DriverManager.getConnection(url)

运行时出错:

javax.security.auth.login.LoginException: 无法从用户获取密码

我已将收到的 keytab 文件放在本地,但仍然出现错误

【问题讨论】:

你能用机器上的keytab启动吗? kinit -t /etc/my.keytab hive/my@test-TELEKOM.COM 您会考虑使用 Jaas 而不是在代码中设置所有配置吗?它可能会干净得多。 (你可能会找到更好的支持,因为这是一个普遍的问题) 【参考方案1】:

您能否验证尝试使用 keytab 文件的用户是否可以使用它启动。 (keytab 文件是否有正确的权限?)

以运行 scala 的用户身份登录并执行:

kinit -kt /etc/my.keytab hive/my@test-TELEKOM.COM

很可能是 scala 用户应该拥有密钥表。这是我经常忘记做的一件非常常见的事情。

【讨论】:

很高兴听到。如果您发现此答案有帮助,请点赞。如果您觉得舒服,请将此标记为答案。

以上是关于使用 keytab kerberos 身份验证连接到 Hive 时出错的主要内容,如果未能解决你的问题,请参考以下文章

kerberos 身份验证-功能组

Kerberos 身份验证密钥表 KVNO

在 Windows 上生成 kerberos 密钥表文件需要啥?

Hbase-client kerberos 身份验证仅在本地计算机上工作

是否可以在 AD 中为用户组使用 keytab

在url中使用别名时,NTLM而不是使用Chrome版本69的Kerberos