JDK13下连接Microsoft SQL Server遇集成认证配置错误求助
sqljdbc_auth.dll失败的问题 嘿,我来帮你搞定这个连接问题!从你给出的错误日志来看,核心问题是JVM找不到正确的sqljdbc_auth.dll文件,或者驱动版本和JDK不兼容,咱们一步步来解决:
1. 升级JDBC驱动至兼容JDK13的版本
你当前使用的sqljdbc4@2.0是比较老旧的驱动版本,仅支持到JDK 8,完全不兼容JDK13。建议你更换为支持JDK13的Microsoft SQL Server JDBC驱动,比如mssql-jdbc 9.2.x及以上版本(该版本支持JDK 8到JDK 16)。
2. 确保sqljdbc_auth.dll位数与JDK匹配
- 先确认你的JDK13位数:打开命令行执行
java -version,如果输出包含64-Bit字样,就是64位JDK,反之则是32位。 - 下载对应位数的dll:新的
mssql-jdbc驱动包中,dll文件位于sqljdbc_<版本>\enu\auth\x64(64位)或x86(32位)目录下,不要选错版本。
3. 正确放置dll文件(三种方法选其一即可)
- 方法一:放到你已尝试的JDK
bin目录(C:\Program Files\Java\jdk-13\bin),但要确保放入的是对应位数的dll。 - 方法二:放到系统PATH目录中,64位dll放
C:\Windows\System32,32位dll放C:\Windows\SysWOW64,让系统自动识别。 - 方法三:启动程序时手动指定dll路径,在运行命令中添加
-Djava.library.path参数,示例:java -Djava.library.path="C:\path\to\your\dll\directory" de.mySampleCode.jdbc.SampleCode
4. 确认连接URL配置正确
你的JDBC连接URL必须包含integratedSecurity=true参数,示例如下:
String connectionUrl = "jdbc:sqlserver://localhost:1433;databaseName=YourDatabaseName;integratedSecurity=true;";
附:你提供的错误日志
2019年10月30日 上午10:00:33 com.microsoft.sqlserver.jdbc.AuthenticationJNI
WARNING: Failed to load the sqljdbc_auth.dll
com.microsoft.sqlserver.jdbc.SQLServerException: This driver is not configured for integrated authentication.
at sqljdbc4@2.0/com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:170)
at sqljdbc4@2.0/com.microsoft.sqlserver.jdbc.SQLServerConnection.sendLogon(SQLServerConnection.java:2338)
at sqljdbc4@2.0/com.microsoft.sqlserver.jdbc.SQLServerConnection.logon(SQLServerConnection.java:1929)
at sqljdbc4@2.0/com.microsoft.sqlserver.jdbc.SQLServerConnection.access$000(SQLServerConnection.java:41)
at sqljdbc4@2.0/com.microsoft.sqlserver.jdbc.SQLServerConnection$LogonCommand.doExecute(SQLServerConnection.java:1917)
at sqljdbc4@2.0/com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4026)
at sqljdbc4@2.0/com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1416)
at sqljdbc4@2.0/com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1061)
at sqljdbc4@2.0/com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:833)
at sqljdbc4@2.0/com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:716)
at sqljdbc4@2.0/com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:841)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:251)
at jdbc/de.mySampleCode.jdbc.SampleCode.main(SampleCode.java:26)
按照上面的步骤逐一排查,应该就能解决这个问题啦!
内容的提问来源于stack exchange,提问作者BeJay

