使用 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_CONFIG
和 KRB5CCNAME
env。 vars, kinit -k -t <your.keytab> <principal@REALM>
并且您不需要设置任何系统属性。以上是关于使用 keytab 文件连接到 Impala 的 jdbc URL的主要内容,如果未能解决你的问题,请参考以下文章
使用 keytab kerberos 身份验证连接到 Hive 时出错
如何使用 impyla 连接到 impala 或使用 pyhive 连接到 hive?
无法使用 Impala JDBC 驱动程序通过 Java 应用程序连接到 Impala