【问题标题】:JDBC MS SQL Server Kerberos AuthJDBC MS SQL Server Kerberos 身份验证
【发布时间】:2013-05-30 10:37:00
【问题描述】:

我有一个 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)

有人知道为什么会这样吗?

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

提前谢谢你。

【问题讨论】:

  • 您使用的是 MS JDBC 还是 Open JTDS?
  • @gbn 我正在使用 MS JDBC。 sqljdbc4.jar
  • @nikkatsa 你找到解决方案了吗?
  • @nikkatsa 我面临同样的问题。你找到解决这个问题的方法了吗?

标签: java sql-server security jdbc kerberos


【解决方案1】:

MS JDBC 文档状态

使用 authenticationScheme=JavaKerberos 时,您必须在 serverName 属性中指定完全限定域名 (FQDN)。否则会报错(Server not found in Kerberos database)。

所以你的网址变成了

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

【讨论】:

  • 确实,我正在使用数据库的完整域名。我得到的错误与 MS 文档中指定的错误不同。
  • 很确定这种格式是错误的。我看不出你可以把“DB_NAME”放在哪里。在主机名之前。见docs.microsoft.com/en-us/sql/connect/jdbc/…。我认为一种方法是在 URL 的末尾添加一个属性,如下所示:;database=DB_NAME
  • @splashout true,但我只是复制了 OP 示例。它们的意思是 servername:instanceport
【解决方案2】:

您未能提供login.conf 或该配置文件中使用Krb5LoginModule 的条目。

【讨论】:

    【解决方案3】:

    您的*NIX 系统上是否配置了Kerberos 子系统(最好是MIT Kerberos)?为了获得Ticket Granting Ticket(从密钥分发中心)以进一步向 SQL Server 进行身份验证,这是必需的。另见Wikipedia entry on Kerberos protocolsome guide from MS

    【讨论】:

    • 我猜他希望使用 ActiveDirectory Kerberos 实现,并且他的 SQL Server windows 系统已在该域中注册。
    【解决方案4】:

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

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

    1. 在 Windows 的注册表中将 AllowTgtSessionKey 设置为 1。更多 信息,请参阅Kerberos protocol registry entries and KDC configuration keys in Windows Server 2003.

    【讨论】:

      猜你喜欢
      • 2017-07-13
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 1970-01-01
      • 2015-06-22
      • 2010-11-17
      • 1970-01-01
      相关资源
      最近更新 更多