繁体   English   中英

使用jerc和kerberos keytab访问hive Metastore

[英]Accessing hive metastore using jdbc with kerberos keytab

我正在尝试连接到已配置为使用Kerberos进行身份验证的配置单元播放器。 当我不想使用keytab文件时,即当程序在身份验证过程中提示我输入密码时,这对我有用。 当我更改配置以使用keytab时,我得到一个包含此语句的长堆栈跟踪:

Additional pre-authentication required (25) - Need to use PA-ENC-TIMESTAMP/PA-PK-AS-REQ

谁能就我做错了什么提出任何建议?

我的问题的上下文,如果相关,是我想从mapreduce作业访问hive Metastore,当然,mapreduce作业无法回答提示。

我的程序看起来像这样:

package com.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class HiveJDBC {

   public static void main(String[] args) throws Exception {

      Class.forName("org.apache.hive.jdbc.HiveDriver");
      System.setProperty("java.security.auth.login.config","gss-jaas.conf");
      System.setProperty("sun.security.jgss.debug","true");
      System.setProperty("javax.security.auth.useSubjectCredsOnly","false");
      System.setProperty("java.security.krb5.conf","krb5.conf");

      Connection con = DriverManager.getConnection("jdbc:hive2://some.machine:10000/default;principal=hive/some.machine@MY_REALM");

      // Do stuff with the connection
   }
}

我的gss-jaas.conf文件如下所示:

com.sun.security.jgss.initiate {
   com.sun.security.auth.module.Krb5LoginModule required
   useKeyTab=true
   useTicketCache=false
   principal="my-account@MY_REALM"
   doNotPrompt=true
   keyTab="path-to-my-keytab-file"
   debug=true;
};

我的krb5.conf文件看起来像这样

[libdefaults]
default_realm = MY_REALM
dns_lookup_realm = false
dns_lookup_kdc = false
ticket_lifetime = 24h
renew_lifetime = 7d

[realms]     
 MY_REALM = {
  kdc = some.host:88
  admin_server = another.host
 }

我使用以下命令使用ktutil程序生成的keytab文件

ktutil: addent -password -p username@MY_REALM -k 1 -e aes256-cts

显然,这个错误是由于在发出ktutil命令时使用了错误的加密类型引起的。 切换到正确的加密(我不会提到我们使用的)解决了这个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM