Java JDBC MS SQL Server Kerberos身份验证
我有一个MS SQL Server RDBMS,它使用Kerberos对用户进行身份验证 如果我将数据库URL设置为Java JDBC MS SQL Server Kerberos身份验证,java,sql-server,security,jdbc,kerberos,Java,Sql Server,Security,Jdbc,Kerberos,我有一个MS SQL Server RDBMS,它使用Kerberos对用户进行身份验证 如果我将数据库URL设置为 jdbc:sqlserver://DB_NAME:DB_PORT;integratedSecurity=true 然后将适当的sqljdbc_auth.dll添加到路径中,一切正常 但是,我希望使用Java Kerberos身份验证,以便能够在*nix机器中也使用相同的代码 所以我的数据库URL变为 jdbc:sqlserver://DB_NAME:DB_PORT;integr
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
提前谢谢。文件中说
使用authenticationScheme=JavaKerberos时,必须在serverName属性中指定完全限定域名(FQDN)。否则,将发生错误(在Kerberos数据库中找不到服务器)
所以你的URL变成了
jdbc:sqlserver://DB_NAME.domain.net:DB_PORT;integratedSecurity=true;authenticationScheme=JavaKerberos
您是否在*NIX系统上配置了Kerberos子系统(最好是)?为了(从密钥分发中心)获得票证授予票证,需要进一步向SQL Server进行身份验证。另请参见,.您未能提供
login.conf
或使用Krb5LoginModule
的配置文件中的条目。您是否在Windows系统中执行该代码?如果这是您的场景,那么问题可能与注册表项AllowTgtSessionKey有关
在此链接中,您可以找到下一个说明:
您使用的是MS JDBC还是Open JTDS?@gbn我使用的是MS JDBC。sqljdbc4。jar@nikkatsa你找到解决办法了吗?@nikkatsa我也面临同样的问题。你找到解决这个问题的方法了吗?事实上,我正在使用数据库的完整域名。我得到的错误与MS文档中指定的错误不同。非常确定此格式是错误的。我看不出你可以在主机名前加上“DB_NAME.”。看见我认为一种方法是在URL的末尾添加一个属性,如下所示:
;database=DB_NAME
@splashout true,但我刚刚复制了OP示例。他们的意思是servername:instanceportI我猜他希望使用ActiveDirectory Kerberos实现,并且他的SQL Server windows系统已在该域中注册。