无法连接到具有安全kerberos的配置单元我正在使用usergroupinformation.loginuserfromkeytab()

oipij1gg  于 2021-06-28  发布在  Hive
关注(0)|答案(1)|浏览(343)
{
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”);信息(“获取连接”);usergroupinformation.setconfiguration(conf);
usergroupinformation.loginuserfromkeytab(“***@..com”,“etc/***.keytab”);
类名(drivername);信息(“获取连接”);连接con=
drivermanager.getconnection(“jdbc:hive2://localhost:10000;authmech=1;krbrealm=例如‌​ample.com;krbhostfqdn=hs2.example.com;krbservicename=hive“);info(“获得连接”);}
18:47:51894错误[1]未知行处运行的节出错。脚本中发生意外异常。脚本部分:运行。原因:发生loginexception。无法获取用于身份验证的princpal名称java.sql.sqlexception:[simba]hivejdbcdriver初始化或创建用于身份验证的传输时出错:conn\u kerberos\u authentication\u error\u get\u ticketcache。位于com.cloudera.hive.hivecommon.api.hiveserver2clientfactory.createtransport(未知源),位于com.cloudera.hive.hive.api.extendedhs2factory.createclient(未知源),位于com.cloudera.hive.hivecommon.core.hivejdbcconnection.connect(未知源),位于com.cloudera.hive.jdbc.common.baseconnectionfactory.doconnect(未知源)com.cloudera.hive.jdbc.common.abstractdriver.connect(未知源代码)位于java.sql.drivermanager.getconnection(drivermanager)。java:582)在java.sql.drivermanager.getconnection(drivermanager。java:207)在script.run(脚本。java:85)在oracle.oats.scripting.modules.basic.api.iteratingvuser.run(iteratingvuser。java:351)在oracle.oats.scripting.modules.basic.api.internal.iteratingagent.run(iteratingagent。java:801)导致原因:com.cloudera.hive.support.exceptions.generalexception:[simba]hivejdbcdriver错误初始化或为身份验证创建传输:conn\u kerberos\u authentication\u error\u get\u ticketcache。。。10个以上原因:com.cloudera.hive.support.exceptions.generalexception:conn\u kerberos\u authentication\u error\u get\u ticketcache。。。10个以上原因:javax.security.auth.login.login异常:无法在com.sun.security.auth.module.krb5loginmodule.promptforname(krb5loginmodule)上获取用于身份验证的princpal名称。java:733)在com.sun.security.auth.module.krb5loginmodule.attemptauthentication(krb5loginmodule。java:629)在com.sun.security.auth.module.krb5loginmodule.login(krb5loginmodule。java:542)在sun.reflect.nativemethodaccessorimpl.invoke0(本机方法)在sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl)。java:39)在sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl。java:25)在java.lang.reflect.method.invoke(方法。java:597)在javax.security.auth.login.logincontext.invoke(logincontext。java:769)在javax.security.auth.login.logincontext.access$000(logincontext。java:186)在javax.security.auth.login.logincontext$5.run(logincontext。java:706)位于java.security.accesscontroller.doprivileged(本机方法)javax.security.auth.login.logincontext.invokecreatorpriv(logincontext。java:703)在javax.security.auth.login.logincontext.login(logincontext。java:575)位于com.cloudera.hive.jdbc.kerberos.kerberos.getsubjectviaticketcache(未知源),位于com.cloudera.hive.hivecommon.api.hiveserver2clientfactory.createtransport(未知源)com.cloudera.hive.hive.api.extendedhs2factory.createclient(未知源),位于com.cloudera.hive.hivecommon.core.hivejdbcconnection.connect(未知源),位于com.cloudera.hive.jdbc.common.baseconnectionfactory.doconnect(未知源),位于com.cloudera.hive.jdbc.common.abstractdriver.connect(未知源)java.sql.drivermanager.getconnection(驱动管理器)。java:582)在java.sql.drivermanager.getconnection(drivermanager。java:207)在script.run(脚本。java:85)在oracle.oats.scripting.modules.basic.api.iteratingvuser.run(iteratingvuser。java:351)在oracle.oats.scripting.modules.basic.api.internal.iteratingagent.run(iteratingagent。java:801)在java.lang.thread.run(线程。java:619)

yeotifhr

yeotifhr1#

hivejdbc驱动程序不使用hadoopauth库,因为它们应该能够从集群外部连接,对hadooplibs的依赖性最小。
因此,在实践中,您的ugi设置被忽略。
但是HiveJDBC驱动程序使用thrift客户机库,它支持kerberos身份验证的原始jaas配置。
在命令行上使用系统道具的示例:

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

使用keytab文件中提供的密码获取私有kerberos票证(不从缓存读取,也不写入缓存)的示例“my\u jaas.conf”:

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/oraclejdk和openjdk,但不适用于使用不同语法的ibmjdk。。。
它也不能与datadirect连接器(与oracle、ibm、microstrategy等一起提供)一起工作,后者要求conf中有一个特定的“主题”。
就这样。当jdbc驱动程序检测到url请求kerberos连接时,它将自动调用jaas,jaas将处理脏工作。
ps:调试安全配置问题很麻烦,但是您有几个属性可以启用调试跟踪:

-Dsun.security.krb5.debug=true
-Djava.security.debug=gssloginconfig,configfile,configparser,logincontext

相关问题