如何使用JDBC连接到SQL Server
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用JDBC连接到SQL Server相关的知识,希望对你有一定的参考价值。
我正在使用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字符串中填写用户名和密码,但是我得到了同样的错误。我还尝试在用户名(域 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:集成身份验证失败。 ClientConnectionId:0e66f60e-958c-4c8e-85b9-484023f16ecf at com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1667)at com.microsoft.sqlserver.jdbc.KerbAuthentication.intAuthInit(KerbAuthentication.java:140)at at com.microsoft.sqlserver.jdbc.KerbAuthentication.GenerateClientContext(KerbAuthentication.java:268)位于com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2691)的com.microsoft.sqlserver.jdbc.SQLServerConnection.logon( SQLServerConnection.java:2234)com.microsoft.sqlserver.jdbc.SQLServerConnection.access $ 000(SQLServerConnection.java:41)at com.microsoft.sqlserver.jdbc.SQLServerConnection $ LogonCommand.doExecute(SQLServerConnection.java:2220)at com。 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。 java:1012)at java.sql.DriverManager.getConnection(Unknown Source)at java.sql.DriverManager.getConnection(Unknown Source)at com.ibm.atmn.tests.DumbyClass.DumbyTests(DumbyClass.java:52)引起: javax.security.auth.login.LoginException:无法获取Princpal Name进行身份验证
你不要将authenticationScheme=JavaKerberos
与sqljdbc_auth.dll
一起使用。如果您有DLL,则省略身份验证方案,并在用户登录Windows时进行连接。
如果您想以其他用户身份进行连接,或者您不在Windows上,则可以指定authenticationScheme=JavaKerberos
。为此,您需要提供以下系统属性:
-Djava.security.auth.login.config=???
-Djava.security.krb5.conf=???
另见Oracles documentation about Kerberos Requirements。
你必须设置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时,无法使用用户名和密码(请参阅this answer示例)。相反,您需要指定integratedSecurity=true
并根据驱动程序版本和首选项,您需要使用Kerberos身份验证(并在连接字符串中包含authenticationScheme=JavaKerberos
)或加载正确的sqljdbc_auth.dll
。
见Using Kerberos Integrated Authentication to Connect to SQL Server和Building the Connection URL
以上是关于如何使用JDBC连接到SQL Server的主要内容,如果未能解决你的问题,请参考以下文章
如何使用库 jTDS JDBC 驱动程序将 android 应用程序连接到 sql server 2012
无法将 jdbc 连接到 sql server 2008 r2
连接到 sql server 时出现 pyspark jdbc 错误
使用 jdbc Java、Android 应用程序连接到 SQL Server 数据库