从jTDS JDBC驱动程序迁移到Microsoft JDBC

时间:2016-09-01 13:57:42

标签: java sql-server jdbc

Microsoft最近发布了一个新的JDBC驱动程序(版本6.0.7507.100),其中包含一些非常有趣的功能。我最感兴趣的是TVP功能。这就是为什么我想用Microsoft驱动程序替换当前的jTDS驱动程序。

尝试登录我们的生产服务器时出现问题。假设我们使用域用户“mydomain \ dbuser”来登录sql server实例。这是我们到目前为止使用的jtds jdbc url:

jdbc:jtds:sqlserver:/sqlServer:1433/myDb;domain=mydomain;user=dbuser;password=secretPwd

它就像一个魅力。

但是当我尝试使用Microsoft驱动程序时,我的应用程序无法建立与数据库的连接。我尝试了以下URL字符串:

jdbc:sqlserver://sqlServer:1433;database=myDb;username=dbuser;password=secretPwd
jdbc:sqlserver://sqlServer:1433;database=myDb;username=mydomain\dbuser;password=secretPwd
jdbc:sqlserver://sqlServer:1433;database=myDb;username=dbuser@mydomain;password=secretPwd

和许多其他排列,但没有成功。该应用程序失败,但出现以下异常:

com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'mydomain\dbuser'

在SQL Server日志中,我们收到以下错误:

Login failed for user 'mydomain\dbuser'. Reason: Attempting to use an NT account name with SQL Server Authentication. [CLIENT: 10.10.10.10]

请注意,应用程序应该在Linux下运行。

有人知道在以域用户身份连接时Microsoft JDBC URL应该是什么样子吗?

3 个答案:

答案 0 :(得分:3)

我对这个问题的研究使我得出以下结论:

  • 正如我在问题中所预期的那样,无法从jTDS驱动程序到Microsoft驱动程序的简单转换。这是因为jTDS驱动程序实现了Microsoft驱动程序上不可用的NTLM身份验证。
  • 另一种方法是使用可在Linux机器上使用的JavaKerberos身份验证方案(如Gord Thomson所建议的那样)。幸运的是,我们在生产环境中设置了Kerberos基础架构。

我已经成功地在我的服务中添加了Kerberos身份验证,主要是在这些Microsoft(博客)帖子的帮助下:

所以我会用它。

答案 1 :(得分:1)

似乎Microsoft当前正在开发支持NTLM的JDBC驱动程序。 您可以在此处进行包含预览的讨论: https://github.com/Microsoft/mssql-jdbc/issues/696

我使用以下连接字符串对驱动程序进行了测试:

  

jdbc:sqlserver:// sqlServer:1433; databaseName = mydb; useCursorsAlways = true; IntegratedSecurity = true; authenticationScheme = NTLM; domain = domain; user = dbuser; password = xxxxx

我联系了Microsoft,现在等待GA发布日期。

答案 2 :(得分:0)

不直接回答您的问题,但如果您想获取最新的驱动程序(可能会解决您的问题):

Microsoft最新版本为https://www.microsoft.com/en-us/download/details.aspx?id=11774 其中还有 sqljdbc_xa sqljdbc_auth dll用于集成安全性

从maven你会得到https://repo1.maven.org/maven2/com/microsoft/sqlserver/mssql-jdbc/

直接来自来源https://github.com/Microsoft/mssql-jdbc/releases

见通知:https://github.com/Microsoft/mssql-jdbc#download-the-dlls