Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC MS SQL Server Kerberos身份验证_Java_Sql Server_Security_Jdbc_Kerberos - Fatal编程技术网

Java JDBC MS SQL Server Kerberos身份验证

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

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

在此链接中,您可以找到下一个说明:

  • 在Windows注册表中将AllowTgtSessionKey设置为1。更多 有关详细信息,请参阅

  • 您使用的是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系统已在该域中注册。