如何使用JDBC连接到SQL Server

时间:2014-02-06 19:39:47

标签: java sql-server 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字符串中填写用户名和密码,但是我得到了同样的错误。我还尝试在用户名(域\ 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       在com.microsoft.sqlserver.jdbc.SQLServerConnection.terminate(SQLServerConnection.java:1667)       在com.microsoft.sqlserver.jdbc.KerbAuthentication.intAuthInit(KerbAuthentication.java:140)       在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)       在com.microsoft.sqlserver.jdbc.SQLServerConnection $ LogonCommand.doExecute(SQLServerConnection.java:2220)       在com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)       在com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)       在com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1326)       在com.microsoft.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)       在com.ibm.atmn.tests.DumbyClass.DumbyTests(DumbyClass.java:52)   引起:javax.security.auth.login.LoginException:无法获取Princpal名称进行身份验证

3 个答案:

答案 0 :(得分:3)

您不会将authenticationScheme=JavaKerberossqljdbc_auth.dll一起使用。如果您有DLL,则省略身份验证方案,并在用户登录Windows时进行连接。

如果您想以其他用户身份进行连接,或者您不在Windows上,则可以指定authenticationScheme=JavaKerberos。为此,您需要提供以下系统属性:

  • -Djava.security.auth.login.config=???
  • -Djava.security.krb5.conf=???

另见Oracles documentation about Kerberos Requirements

答案 1 :(得分:1)

你必须设置与kerberos相关的java属性

1)loginContext配置文件    默认情况下,为您配置微软,这是可选的。但是,如果您想要更多地控制行为,您必须深入了解详细信息。   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",

答案 2 :(得分:0)

使用Windows身份验证连接到SQL Server时,无法使用用户名和密码(请参阅示例this answer)。相反,您需要指定integratedSecurity=true并根据驱动程序版本和首选项,您需要使用Kerberos身份验证(并在连接字符串中包含authenticationScheme=JavaKerberos)或加载右sqljdbc_auth.dll

请参阅Using Kerberos Integrated Authentication to Connect to SQL ServerBuilding the Connection URL