使用 keytab 文件连接到 Impala 的 jdbc URL

Posted

技术标签:

【中文标题】使用 keytab 文件连接到 Impala 的 jdbc URL【英文标题】:jdbc URL to connect to Impala using keytab file 【发布时间】:2019-09-18 10:00:09 【问题描述】:

我正在尝试使用 keytab 文件连接到 Impala,但我没有找到与 keytab 连接的确切 URL。我已经通过Cloudera documentation,但它没有提到使用 keytab 文件和主体连接到 Impala。使用 keytab 文件连接到 Impala 的 JDBC URL 是什么?

【问题讨论】:

【参考方案1】:

如User Guide“使用 Kerberos”一节中所述,Impala JDBC 驱动程序支持三种获取 Kerberos 主题的方法:

    ...驱动程序尝试从当前线程继承的 AccessControlContext 中获取主题。如果 AccessControlContext 包含 多个主题,驱动程序使用最新的主题。 驱动程序检查java.security.auth.login.config 系统属性以获取 JAAS 配置。如果 JAAS 配置是 指定,驱动程序使用该信息创建一个 LoginContext 然后使用与其关联的主题。 驱动程序检查 KRB5_CONFIG 和 KRB5CCNAME 系统环境变量以查找 Kerberos 票证缓存。司机使用信息 从缓存中创建一个 LoginContext 然后使用 Subject 与之相关联。

您可以通过连接 URL 中的KrbAuthType 参数来控制驱动程序将使用哪种方法,否则它将逐个尝试每种方法。

所以,使用 keytab 文件(方法#2)你应该做的就是

    创建一个jaas.conf 文件,指定keytab 位置、主体等。 在您的程序中设置系统属性java.security.auth.login.config(或使用 JVM 启动参数-Djava.security.auth.login.config=</some-path-to/jaas.conf>) 指向那个jaas.conf 的位置,并且 在您的 JDBC 连接 URL 中,设置 ...AuthMech=1;KrbRealm=<YOUR-REALM.COM>;KrbHostFQDN=your.impalad.host.com;KrbServiceName=<impala-service-principal> 用于 Kerberos 身份验证

...在尝试连接之前。

或者,kinit 使用您的 keytab,以便在调用 Java 应用程序之前票证缓存包含必要的 TGT(基本上,使用上面的方法 3)。

【讨论】:

我现在可以使用独立类连接到 Impala。但是我们确实使用休眠配置文件创建了动态数据源。有没有办法在休眠配置文件中指定系统属性? 不是 hybernate 专家,所以无法回答。但我相信选项 3 对您来说可能是一个更好的选择——只需定义 KRB5_CONFIGKRB5CCNAME env。 vars, kinit -k -t <your.keytab> <principal@REALM> 并且您不需要设置任何系统属性。

以上是关于使用 keytab 文件连接到 Impala 的 jdbc URL的主要内容,如果未能解决你的问题,请参考以下文章

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

如何使用 impyla 连接到 impala 或使用 pyhive 连接到 hive?

无法使用 Impala JDBC 驱动程序通过 Java 应用程序连接到 Impala

使用 Dask 库连接到 Impala DB

在 mac os x 上安装 cloudera impala shell 并连接到 impala 集群

在没有 Impala JDBC 驱动程序的情况下从 R 连接到 Impala