2017-08-30 141 views
2

我试图用DriverManager.getConnection()从Java应用程序连接到SQL Server数据库,但我不断收到“登录失败的用户“错误。我试过使用com.microsoft.sqlserver.jdbc.SQLServerDrivernet.sourceforge.jtds.jdbc.Driver来连接,但都一直在触及这个问题。SQL Server登录失败Java DriverManager.getConnection(),从Python与pymssql.connect()工作

下面是我使用的连接代码:我知道帐户有权访问DB

Class.forName("net.sourceforge.jtds.jdbc.Driver"); 
conn=DriverManager.getConnection("jdbc:jtds:sqlserver://SERVERADDRESS:1433;DatabaseName=DBNAME;user=USER;password=PASS"); 

,因为我已经使用pymssql.connect(SERVERADDRESS, USER, PASS, DBNAME)在同一服务器Python应用程序之前,连接到它/ DB/creds。

this article,我最终设法使用Windows身份验证与我的个人帐户工作,但我仍然无法使用我们的服务帐户得到它的工作。有没有人对Python应用程序为什么可以连接但是Java不能够有什么了解?

+0

当你从Python应用程序连接是您将服务帐户用户名指定为“DOMAINNAME \ USERNAME”?换句话说,服务帐户是Windows帐户,而不是“SQL Server身份验证”登录名? –

+0

我在'域\\ svc_account'中传递。我在Java中的连接字符串中做同样的事情。因此,连接字符串是'“jdbc:jtds:sqlserver:// SERVERADDRESS:1433; DatabaseName = DBNAME; user = domain \\ svc_account; password = PASS”' –

回答

0

pymssql是建立在freetds的顶部。 FreeTDS和jTDS都支持名为NTLM的旧版Windows身份验证方案,而当前版本的Microsoft SQL Server JDBC驱动程序(mssql-jdbc)不再支持该身份验证机制。

所以,因为您已确认pymssql可以连接,你应该能够从您的Java应用程序的Windows用户连接如MYDOMAIN\username使用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); 
+1

保佑你,真心实意! –

0

要找出“登录失败的用户”的原因应该去SQL Server 错误日志

下一行18456 error会给你原因。

最有可能的原因,你的情况发生故障是服务器可配置为使用Windows Authentication only