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 应该是什么样子吗?
最佳答案
我对这个问题的研究得出了以下结论:
- 从 jTDS 驱动程序到 Microsoft 驱动程序的简单转换是不可能的,正如我在问题中预期的那样。这是因为 jTDS 驱动程序实现了 Microsoft 驱动程序不可用的 NTLM 身份验证。
- 另一种方法是使用 Linux 机器上可用的 JavaKerberos 身份验证方案(正如 Gord Thomson 所建议的)。幸运的是,我们在生产环境中设置了 Kerberos 基础架构。
主要是在这些 Microsoft(博客)帖子的帮助下,我成功地在我的服务中添加了 Kerberos 身份验证:
- JDBC - This driver is- not-configured for integrated authentication
- Using Kerberos Integrated Authentication to Connect to SQL Server
所以我将使用它。
关于java - 从 jTDS JDBC 驱动程序迁移到 Microsoft JDBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56424996/