[英]How to connect to SQL Server using JDBC
我正在使用Microsoft SQL Server 2008,並嘗試使用JDBC連接到數據庫。 下面是我的代碼。 用戶名和密碼使用Windows身份驗證。
String url1 = "jdbc:sqlserver://ServerName;databaseName=v14testvp;user=USERNAME;password='';";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
DriverManager.getConnection(url1);
嘗試連接時出現打擊錯誤
com.microsoft.sqlserver.jdbc.SQLServerException:用戶'USERNAME'的登錄失敗。 ClientConnectionId:befb617f-8382-4388-ad98-a210ed0c3105
有人可以幫我解決什么以解決錯誤。 我嘗試在url1字符串中同時填寫用戶名和密碼,但是遇到相同的錯誤。 我也嘗試過在用戶名(domain \\ USERNAME)中包含域。 我對sql和java相對較新,因此希望我只是缺少一些簡單的東西。
編輯:
我將代碼更改為以下
String url1 = "jdbc:sqlserver://servername;databaseName=v14testvp;integratedSecurity=true;authenticationScheme=JavaKerberos";
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
DriverManager.getConnection(url1);
我現在收到以下錯誤。 我有sqljdbc_auth.dll。 有人可以為我指出正確的解決方法嗎?
com.microsoft.sqlserver.jdbc.SQLServerException:集成身份驗證失敗。 位於com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1667)處com.microsoft.sqlserver.jdbc.KerbAuthentication.intAuthInit(KerbAuthentication.java:140)處的ClientConnectionId:0e66f60e-958c-4c8e-85b9-484023f16ecf com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2691)上的com.microsoft.sqlserver.jdbc.KerbAuthentication.GenerateClientContext(KerbAuthentication.java:268)(com.microsoft.sqlserver.jdbc.SQLServerConnection.logon( com.microsoft.sqlserver.jdbc.SQLServerConnection.access $ 000(SQLServerConnection.java:41)處的com.microsoft.sqlserver.jdbc.SQLServerConnection $ LogonCommand.doExecute(SQLServerConnection.java:2220)處的SQLServerConnection.java:2234)。位於com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)處的microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)位於com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection。 java:1326)在com.micr osoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:991)位於com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:827)位於com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver。 com.ibm.atmn.tests.DumbyClass.DumbyTests(DumbyClass.java:52)處java.sql.DriverManager.getConnection(未知源)處java.sql.DriverManager.getConnection(未知源) javax.security.auth.login.LoginException:無法獲取用於身份驗證的主要名稱
您不要將authenticationScheme=JavaKerberos
與sqljdbc_auth.dll
一起使用。 如果您具有DLL,則省略身份驗證方案,然后在用戶登錄Windows時進行連接。
如果要以其他用戶身份連接或不在Windows上,則可以指定authenticationScheme=JavaKerberos
。 為此,您需要提供以下系統屬性:
-Djava.security.auth.login.config=???
-Djava.security.krb5.conf=???
另請參閱有關Kerberos要求的Oracle文檔 。
您必須設置與kerberos相關的java屬性
1)loginContext配置文件默認情況下,Microsoft為您配置了此文件,這是可選的。但是,如果要控制更多有關該行為的信息,則必須深入研究其詳細信息。 https://docs.oracle.com/javase/8/docs/jre/api/security/jaas/spec/com/sun/security/auth/module/Krb5LoginModule.html
2)Kerberos配置a)使用外部配置然后傳遞給java b)直接使用java屬性進行設置,例如System.setProperty(“ java.security.krb5.realm”,“ ”); System.setProperty(“ java.security.krb5.kdc”, )
使用Windows身份驗證連接到SQL Server時,不能使用用戶名和密碼(例如,參見此答案 )。 相反,您需要指定integratedSecurity=true
並且根據驅動程序版本和首選項,您需要使用Kerberos身份驗證(並在連接字符串中包含authenticationScheme=JavaKerberos
)或加載正確的sqljdbc_auth.dll
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.