2013-05-30 108 views
2

我有一個MS SQL Server RDBMS,它使用Kerberos來驗證用戶。JDBC MS SQL Server Kerberos驗證

從Windows機器上,如果我將db 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。

預先感謝您。

+0

您使用的MS JDBC或Open JTDS? – gbn

+0

@gbn我正在使用MS JDBC。 sqljdbc4.jar – nikkatsa

+0

@nikkatsa你找到解決方案嗎? –

回答

1

MS JDBC文檔指出

當使用authenticationScheme = JavaKerberos,你必須指定完全限定域名(FQDN)的ServerName屬性。否則,將發生錯誤(在Kerberos數據庫中找不到服務器)。

所以,你的網址將成爲

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

事實上,我正在使用完整的域名到數據庫。我得到的錯誤與MS文檔中指定的錯誤不同。 – nikkatsa

0

你有你的* NIX系統上配置一個的Kerberos子系統(最好是MIT Kerberos)?要獲得票證授予票證(來自密鑰分發中心)才能進一步向SQL Server進行身份驗證。另見Wikipedia entry on Kerberos protocol,some guide from MS

+0

我猜他希望使用ActiveDirectory Kerberos實現,並且他的SQL Server Windows系統在該域中註冊。 –

1

您無法提供login.conf或使用Krb5LoginModule的配置文件中的條目。