2016-09-01 74 views
1

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

尝试登录我们的生产服务器时出现问题。假设我们使用域用户“mydomain \ dbuser”登录到sql服务器实例。这是我们目前使用的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;[email protected];password=secretPwd 

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

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

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

com.microsoft.sqlserver.jdbc.SQLServerException: Login failed for user 'mydomain\dbuser' 
在SQL Server日志中我们得到以下错误

有谁知道当以域用户身份连接时,Microsoft JDBC URL的外观应该如何?

+2

我会建议不要将凭据传递的URL的方式。在创建连接时将它们传递给驱动程序管理器。 – duffymo

+0

我会的。只要我找出如何使登录工作 –

+0

将其移出URL将使其工作。你应该使用DriverManager来完成它。 – duffymo

回答

1

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

  • 从JTDS驱动程序Microsoft驱动程序的简单过渡是不可能的,因为我打算在这个问题。这是因为jTDS驱动程序实现了Microsoft驱动程序上不可用的NTLM身份验证。
  • 另一种方法是使用JavaKerberos身份验证方案(如Gord Thomson建议的),该方案可在Linux机器上使用。幸运的是,我们在生产环境中建立了Kerberos基础架构。

我已经successfuly设法在我的服务添加Kerberos身份验证主要与这些职位的帮助:https://blogs.msdn.microsoft.com/psssql/2015/01/09/jdbc-this-driver-is-not-configured-for-integrated-authentication/https://msdn.microsoft.com/en-us/library/gg558122(v=sql.110).aspx所以我会被使用。

0

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

微软最新的版本是https://www.microsoft.com/en-us/download/details.aspx?id=11774 也有sqljdbc_xasqljdbc_auth的DLL集成安全

从行家,你会得到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