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基础设施。
jdbc:sqlserver:// sqlserver:1433; databasename = mydb; usecursorSalways = true; retemperatedSecurity = true; authEnticationschemechemecheme = ntlm; domain; domain; domain; user = domain; user = dbuser; use = dbuser; passwass; passwass =xxxxxxx
直接从源
https://github.com/microsoft/mssql-jdbc/releases请参阅通知:Https://github.com/microsoft/mssql-jdbc#download-the-dlls
update ** 从7.3.1版本开始,MS SQL驱动程序中支持NTLM **
连接字符串看起来像这样**
**
jdbc:sqlserver://<server>;integratedSecurity=true;authenticationScheme=NTLM;domain=<domain>;user=<domainUser>;password=<domainUserPassword>;