SQL Server从Java DriverManager.getConnection()失败,从Python与pymssql.connect()一起工作 [英] SQL Server log in failing from Java DriverManager.getConnection(), working from Python with pymssql.connect()

查看:131
本文介绍了SQL Server从Java DriverManager.getConnection()失败,从Python与pymssql.connect()一起工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 DriverManager.getConnection()从Java应用程序连接到SQL Server数据库,但是我不断收到用户登录失败"错误.我尝试同时使用 com.microsoft.sqlserver.jdbc.SQLServerDriver net.sourceforge.jtds.jdbc.Driver 进行连接,但两者都一直存在问题./p>

这是我用来连接的代码:

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

我知道该帐户可以访问该数据库,因为我之前已经通过Python应用程序使用 pymssql.connect(SERVERADDRESS,USER,PASS,DBNAME)在同一服务器/下连接到该数据库,DB/信条.

来自本文,我最终设法通过我的个人帐户使用Windows身份验证来使其正常运行,但仍然无法通过我们的服务帐户来使其正常工作.是否有人对为什么Python应用程序可以连接而Java应用程序无法连接有任何见识?

解决方案

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

因此,假设您已确认pymssql可以连接,则应该能够使用jTDS以Windows用户 MYDOMAIN \ username 的身份从Java应用程序进行连接,如下所示:

  String myUid =用户名",myPwd ="mypassword";字符串connUrl ="jdbc:jtds:sqlserver://192.168.1.123:1433/databasename; DOMAIN = MYDOMAIN";连接conn = DriverManager.getConnection(connUrl,myUid,myPwd); 

I'm trying to use DriverManager.getConnection() to connect to a SQL Server db from a Java application, but I keep getting "Login failed for user" errors with it. I've tried using both com.microsoft.sqlserver.jdbc.SQLServerDriver and net.sourceforge.jtds.jdbc.Driver to connect, but both keep hitting the issue.

Here's the code I'm using to connect:

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

I know that account has access to that DB, as I've connected to it before from a Python application using pymssql.connect(SERVERADDRESS, USER, PASS, DBNAME) with the same server/DB/creds.

From this article, I eventually managed to get it working using windows authentication with my personal account, but I still can't get it to work using our service account. Does anyone have any insight into why the Python app can connect but the Java one can't?

解决方案

pymssql is built on top of FreeTDS. Both FreeTDS and jTDS support an older Windows authentication scheme named NTLM, while current versions of Microsoft's JDBC Driver for SQL Server (mssql-jdbc) no longer support that authentication mechanism.

So, given that you've confirmed that pymssql can connect, you should be able to connect from your Java app as Windows user MYDOMAIN\username using jTDS like so:

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从Java DriverManager.getConnection()失败,从Python与pymssql.connect()一起工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆