4

我有一个 MS SQL Server RDBMS,它使用 Kerberos 对用户进行身份验证。

如果我将数据库 URL 设置为,则从 Windows 机器

jdbc:sqlserver://DB_NAME:DB_PORT;integratedSecurity=true

并将适当的添加sqljdbc_auth.dll到路径中,一切正常。

但是我想使用 Java Kerberos 身份验证,以便能够在 *nix 机器中使用相同的代码。

所以我的数据库 URL 变为

jdbc:sqlserver://DB_NAME:DB_PORT;integratedSecurity=true;authenticationScheme=JavaKerberos

当我运行代码时,出现以下异常:

Exception in thread "main" javax.security.auth.login.LoginException: Unable to obtain Princpal Name for authentication 
    at com.sun.security.auth.module.Krb5LoginModule.promptForName(Krb5LoginModule.java:796)
    at com.sun.security.auth.module.Krb5LoginModule.attemptAuthentication(Krb5LoginModule.java:667)
    at com.sun.security.auth.module.Krb5LoginModule.login(Krb5LoginModule.java:580)

有谁知道为什么会这样?

我必须补充一点,我使用的Krb5LoginModule是 JDBC 驱动程序提供的默认值。

先感谢您。

4

4 回答 4

2

MS JDBC文档状态

使用 authenticationScheme=JavaKerberos 时,您必须在 serverName 属性中指定完全限定域名 (FQDN)。否则,将发生错误(在 Kerberos 数据库中找不到服务器)。

所以你的网址变成

jdbc:sqlserver://DB_NAME.domain.net:DB_PORT;integratedSecurity=true;authenticationScheme=JavaKerberos
于 2013-05-30T11:04:07.690 回答
2

您未能login.conf在该配置文件中提供使用Krb5LoginModule.

于 2013-09-19T11:54:12.807 回答
1

您是否在 *NIX 系统上配置了Kerberos 子系统(最好是MIT Kerberos )?它是必需的,以获取票证授予票证(从密钥分发中心)以进一步向 SQL Server 进行身份验证。另请参阅有关 Kerberos 协议的 Wikipedia 条目一些来自 MS 的指南

于 2013-09-19T11:46:31.910 回答
1

您是在 Windows 系统中执行代码吗?如果这是您的情况,则问题可能与注册表项 AllowTgtSessionKey 有关。

在此链接https://msdn.microsoft.com/en-us/library/gg558122%28v=sql.110%29.aspx中,您可以找到下一个指令:

  1. 在 Windows 的注册表中将 AllowTgtSessionKey 设置为 1。有关详细信息,请参阅Windows Server 2003 中的 Kerberos 协议注册表项和 KDC 配置项。
于 2016-03-16T17:15:45.173 回答