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

使用 jdbc 与 kerberos keytab 访问 hive metastore

云德辉
2023-03-14

我正在尝试连接到配置为使用Kerberos进行身份验证的蜂巢元存储。当我不尝试使用keytab文件时,即当程序在身份验证过程中提示我输入密码时,这对我很有效。当我将配置更改为使用keytab时,我会收到一个长堆栈跟踪,其中包含以下语句:

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

有人能对我做错了什么提出建议吗?

如果相关的话,我的问题的背景是,我想从mapreduce作业访问配置单元元存储,当然,mapreduced作业无法响应提示。

我的程序是这样的:

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
 }

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

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

共有1个答案

赫连琦
2023-03-14

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

 类似资料:
  • 问题内容: 我正在寻找一种在Java App(使用JDBC)中打开Access MDB文件的方法。 快速的Google搜索建议我为此需要JDBC-ODBC Bridge。 这是否意味着我需要配置要在其上运行应用程序的每个系统,以便为要打开的MDB提供ODBC DSN? 还有一个问题(因为我以前从未使用过ODBC):通信是通过某种套接字(以客户机/服务器方式)还是通过方法/函数调用(例如嵌入Derb

  • 我正在开发一个名为的简单mariaDB数据库,还有一个名为的mariaDB用户。我知道StackOverflow上有很多类似的帐户,但我使用的不是根帐户,而是具有最低权限的普通帐户。 我可以通过SSH访问终端中的数据库,如下所示: 但是,当我在localhost上执行JDBC代码时,访问将在行被拒绝: java JDBC代码是:(我已经删除了类中一些不必要的内容,但是如果我遗漏了任何重要的内容,请

  • 主要内容:示例动态网页的主要特点就是能及时更新数据,这些更新的数据来源于数据库。学习本节内容需要您了解 JDBC,可以使用 JDBC 连接 MySQL 数据库。 本节数据库使用 MySQL 5.7,你可以点击 MySQL 官方网站 下载相应的 jar 包。 注意:MySQL 8.0 及之后的版本与之前的数据库连接有所不同: 首先驱动 com.mysql.jdbc.Driver 更换为 com.mysql.cj.

  • 你好,我正在尝试使用jdbc连接到SQL2014(Talend V6.4或Squirrel给出相同的错误) 尝试使用sa凭据连接到db(在SQL Management Studio上工作,因此这不是一个错误的pwd问题),我收到一个连接错误,基本上是说对“sa”的访问没有成功(我没有一个更有意义的stacktrace,如果有任何地方可以找到它,我很乐意发布它)。 我应该要求我们的dba启用什么,以

  • 第 12 章 使用JDBC进行数据访问 目录 12.1. 简介 12.1.1. Spring JDBC包结构 12.2. 利用JDBC核心类实现JDBC的基本操作和错误处理 12.2.1. JdbcTemplate类 12.2.2. NamedParameterJdbcTemplate类 12.2.3. SimpleJdbcTemplate类 12.2.4. DataSource接口 12.2.5