为了账号安全,请及时绑定邮箱和手机立即绑定

在kerberos身份验证下使用JDBC连接到Impala时出错

/ 猿问

在kerberos身份验证下使用JDBC连接到Impala时出错

萧十郎 2019-12-06 15:00:12

我创建了一个类SecureImpalaDataSource,它扩展了DriverManagerDataSource,并用于UserGroupInformation.doAs()通过keytab文件获取与impala的连接。但是我得到如下错误:

java.sql.SQLException:[Simba] ImpalaJDBCDriver初始化或创建用于身份验证的传输错误:[Simba] ImpalaJDBCDriver无法连接到服务器:null。

但是,当我在测试演示中获得与Kerberos票证缓存的连接时,我就成功了。有人可以帮助我吗?


查看完整描述

3 回答

?
绝地无双

忘记Hadoop UGI:JDBC驱动程序只需要原始的JAAS配置就可以动态地(useKeyTab升高和useTicketCache降低)创建Kerberos票证。


系统属性


java.security.krb5.conf =>(可选)非默认的Kerberos conf

java.security.auth.login.config => JAAS配置文件

javax.security.auth.useSubjectCredsOnly =>必须强制为“ false” (某些Java版本中的默认设置已更改,duh)

示例JAAS conf文件,Impala / Hive Cloudera驱动程序,

此处带有Windows路径(Java样式表示法)。


Client {

  com.sun.security.auth.module.Krb5LoginModule

    required

  useTicketCache=false

  doNotPrompt=true

  useKeyTab=true

  keyTab="file:C:/blah/blah/dummy.keytab"

  principal="dummy@SOME.REALM"

  debug=false;

};

示例JAAS conf文件,Apache Hive驱动程序

只需将部分名称从更改Client为com.sun.security.jgss.krb5.initiate

PS:您可以将多个部分填充在同一个conf文件中。这意味着您可以定义“全局” conf,并将其与具有一致设置的多个工具,驱动程序和库一起使用。


调试


sun.security.krb5.debug =>设置为“ true”

java.security.debug=>设置为“ gssloginconfig,配置文件,configparser,logincontext”


查看完整回答
反对 回复 2019-12-06
?
杨魅力

验证jdbc连接的一种方法是使用ugi.doAs。这是示例代码:


// 1. login use keytab

System.setProperty("java.security.krb5.realm", "XXX.COM");

System.setProperty("java.security.krb5.kdc", "kdcXXX");

Configuration conf = new Configuration();

conf.set("hadoop.security.authentication", "Kerberos");

UserGroupInformation.setConfiguration(conf);

UserGroupInformation ugi = UserGroupInformation.loginUserFromKeytabAndReturnUGI("test", "test.keytab");


// 2. create impala jdbc connection

Class.forName(JDBCDriverName);

conn = (Connection) ugi.doAs(new PrivilegedExceptionAction<Object>() {

  public Object run() {

    Connection tcon = null;

    try {

      tcon = DriverManager.getConnection(connectionUrl);

    } catch (SQLException e) {

      e.printStackTrace();

    }

    return tcon;

  }

});


// 3. execute query using conn

......


查看完整回答
反对 回复 2019-12-06
?
叮当猫咪

结果是我的URL中的HOST和FQDN不一致。


查看完整回答
反对 回复 2019-12-06
  • 3 回答
  • 0 关注
  • 178 浏览
我要回答

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信