我正在使用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名称进行身份验证
答案 0 :(得分:3)
您不会将authenticationScheme=JavaKerberos
与sqljdbc_auth.dll
一起使用。如果您有DLL,则省略身份验证方案,并在用户登录Windows时进行连接。
如果您想以其他用户身份进行连接,或者您不在Windows上,则可以指定authenticationScheme=JavaKerberos
。为此,您需要提供以下系统属性:
-Djava.security.auth.login.config=???
-Djava.security.krb5.conf=???
答案 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 Server和Building the Connection URL