当前位置: 首页 > 知识库问答 >
问题:

无法连接到具有安全Kerberos的配置单元。我正在使用UserGroupInformation.LoginUserFromKeyTab()

翟黎明
2023-03-14
 {
String driverName = "com.cloudera.hive.jdbc4.HS2Driver";
conf.set("hadoop.security.authentication", "kerberos");
info("Getting Connection"); 
UserGroupInformation.setConfiguration(conf);    
info("Getting Connection"); `info("Getting Connection");
UserGroupInformation.setConfiguration(conf);


UserGroupInformation.loginUserFromKeytab("****@***.***.COM","etc/****.keytab");
Class.forName(driverName); info("Getting Connection");
Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000;AuthMech=1;KrbRealm=EX‌​AMPLE.COM;KrbHostFQDN=hs2.example.com;KrbServiceName=hive");
info("Got Connection");
}

{String driverName=“com.cloudera.hive.jdbc4.hs2driver”;
conf.set(“hadoop.security.authentication”,“kerberos”);info(“获取连接”);usergroupinformation.loginuserfromkeytab(“***@..com”,“etc/****.keytab”);
class.forname(driverName);info(“获取连接”);Connection con=
drivermanager.getconnection(“

共有1个答案

桓信鸥
2023-03-14

配置单元JDBC驱动程序不使用Hadoop Auth库,因为它们应该能够从集群外部连接,并且对Hadoop库的依赖性最小。
因此,在实践中,您的UGI设置被忽略。

但是配置单元JDBC驱动程序使用Thrift客户机库,它支持Kerberos身份验证的原始JAAS配置。

在命令行上使用系统道具的示例:

java -Djava.security.krb5.conf=/etc/krb5.conf \
     -Djava.security.auth.login.config=./my_jaas.conf \
     *****

示例“my_jaas.conf”获取私有Kerberos票证(不是从缓存读取,也不是写入缓存),并在keytab文件中提供密码:

com.sun.security.jgss.krb5.initiate {
  com.sun.security.auth.module.Krb5LoginModule
    required
  useTicketCache=false
  doNotPrompt=true
  useKeyTab=true
  keyTab="file:/some/path/to/my_login.keytab"
  principal="my_login@MY.REALM"
  debug=true;
};

请注意,上面的语法适用于Sun/Oracle JDK和OpenJDK,但不适用于使用不同语法的IBM JDK。
它也不适用于DataDirect连接器(随Oracle、IBM、Microstrategy等一起提供),后者在conf中需要一个特定的“subject”。

就这样了。当检测到URL请求Kerberos连接时,JDBC驱动程序将自动调用JAAS,而JAAS将处理这些脏活累活。

ps:调试安全配置问题是一个麻烦,但您有几个属性可以启用调试跟踪:

-Dsun.security.krb5.debug=true
-Djava.security.debug=gssloginconfig,configfile,configparser,logincontext
 类似资料:
  • 我不知道我应该给的用户名和密码是什么。我必须在某个配置文件中添加凭据(用户名和密码)吗?

  • 问题是,我被问到的这些用户名和密码是什么,我可以在哪里找到他们或者设置他们? 提前致谢

  • keytab和principl似乎都是正确的。我可以成功运行命令 有谁能进一步帮我。我被这个问题困扰了将近一个星期。如果需要,我可以提供更多的信息。

  • 我已经使用JDBC api连接到HIVE2,这里提到,它是成功的,所以为了方便访问,我想到创建一个webapp,使用JSP作为前端页面来输入服务器名称和查询。虽然从JSP页面到servlet的所有参数都被正确解析,但它在连接到配置单元服务器时引发了一个错误,这是将libthrift和配置单元JAR放置在WEB-INF/lib目录中的必要条件,我同时放置在WEB-INF/lib和classpath中

  • 我使用下面提到的连接URL连接到蜂巢服务器使用直线。 !连接jdbc: hive2://sandbox.hortonworks.com:21000/default; ssl=true; sslTrustStore=/var/lib/Knox/data-2.3.2.0-2950/Security/keystore/gateway.jks; Trust StorePassword=Knox?hive.

  • 当我在oozie中执行spark进程时,我有以下错误。找不到数据库。 这是我的火花配置