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应该是什么样子吗?
答案 0 :(得分:3)
我对这个问题的研究使我得出以下结论:
我已经成功地在我的服务中添加了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