在kerberos身份验证下使用jdbc连接到impala时出错

hi3rlvi2  于 2021-06-26  发布在  Impala
关注(0)|答案(3)|浏览(576)

我创建了一个扩展drivermanagerdatasource的类secureimpaladatasource,并使用 UserGroupInformation.doAs() 使用keytab文件获取到impala的连接。但我得到的错误如下:
java.sql.sqlexception:[simba]impalajdbcdriver初始化或创建用于身份验证的传输时出错:[simba]impalajdbcdriver无法连接到服务器:null。
但是,当我在测试演示中获得与kerberos票证缓存的连接时,我就成功了。有人能帮我吗?

pkmbmrz7

pkmbmrz71#

验证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
......
lymgl2op

lymgl2op2#

结果是我的url中的主机和fqdn不一致。

ekqde3dh

ekqde3dh3#

忘记hadoop ugi吧:jdbc驱动程序只需要原始jaas配置就可以动态创建kerberos票证(使用 useKeyTab 提高和 useTicketCache 降低)。
系统属性 java.security.krb5.conf =>(可选)非defaut kerberos conf java.security.auth.login.config =>jaas配置文件 javax.security.auth.useSubjectCredsOnly =>必须强制为“false”(默认值在某些java版本中已更改,duh)
示例jaas conf文件,impala/hive cloudera驱动程序
这里有一个java风格的windows路径表示法。

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配置单元驱动程序
只需将节名从 Clientcom.sun.security.jgss.krb5.initiate ps:您可以在同一个conf文件中填充多个部分;这意味着您可以定义一个“全局”conf,并将其与多个工具、驱动程序和lib一起使用,并且具有一致的设置。
调试 sun.security.krb5.debug =>设置为“真” java.security.debug =>设置为“gssloginconfig,configfile,configparser,logincontext”

相关问题