我正在尝试使用DriverManager.getConnection()
从Java应用程序连接到SQL Server数据库,但是我不断收到"用户登录失败"错误。我尝试使用com.microsoft.sqlserver.jdbc.SQLServerDriver
和net.sourceforge.jtds.jdbc.Driver
进行连接,但两者都遇到了这个问题。
这是我用来连接的代码:
Class.forName("net.sourceforge.jtds.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:jtds:sqlserver://SERVERADDRESS:1433;DatabaseName=DBNAME;user=USER;password=PASS");
我知道该帐户可以访问该数据库,因为我之前使用具有相同服务器/DB/信誉的pymssql.connect(SERVERADDRESS, USER, PASS, DBNAME)
从 Python 应用程序连接到它。
从这篇文章中,我最终设法通过我的个人帐户使用 Windows 身份验证让它工作,但我仍然无法使用我们的服务帐户让它工作。有没有人知道为什么Python应用程序可以连接而Java应用程序不能?
pymssql 建立在 FreeTDS 之上。FreeTDS 和 jTDS 都支持名为 NTLM 的旧版 Windows 身份验证方案,而当前版本的 Microsoft JDBC Driver for SQL Server (mssql-jdbc) 不再支持该身份验证机制。
因此,鉴于您已经确认 pymssql 可以连接,您应该能够以 Windows 用户身份从您的 Java 应用程序进行连接,MYDOMAINusername
使用 jTDS,如下所示:
String myUid = "username", myPwd = "mypassword";
String connUrl = "jdbc:jtds:sqlserver://192.168.1.123:1433/databasename;DOMAIN=MYDOMAIN";
Connection conn = DriverManager.getConnection(connUrl, myUid, myPwd);
要找出"用户登录失败"的原因,应该转到SQL Server错误日志。
18456 error
的下一行将为您提供原因。
在您的情况下,最可能的失败原因是服务器配置为使用Windows Authentication only