JDBC SQLServer异常:“该驱动程序未配置为集成身份验证。”
-
09-09-2020 - |
题
我正在编写一个“服务器端扩展” SmartFox服务器 (SFS)。在我的登录脚本中,我需要建立到 MS SQL Server 的连接,我尝试使用 JDBC 来完成此操作。我已经在我的调试环境中测试了 JDBC 代码,并且运行良好。
但
当我将服务器端扩展放入 SFS“扩展”文件夹中(按照规范)时,我得到了 com.microsoft.sqlserver.jdbc.SQLServerException
:
“此驱动程序未配置为集成身份验证。”。
我用谷歌搜索了这个错误,发现这通常是因为文件 sqljdbc_auth.dll
不在系统路径中;我已将此文件复制到系统路径中的文件夹中,但它仍然不起作用!
还有其他建议吗?
解决方案
不同的处理器架构(x86/x64/ia64)有不同版本的sqljdbc_auth.dll。您在 SFS 服务器上使用哪一款?
您必须选择与运行 SFS 的 JVM 架构相匹配的一种。因此,如果您在 64 位计算机上运行 32 位 Java,则需要 x86 版本,而不是 x64 版本。
我以前没有使用过SFS,所以我不知道它是否在任何地方写入任何日志。如果确实如此,可能值得查看这些日志,看看是否写入了任何有用的内容。
编辑: :我不能 100% 确定 SFS 正在使用 64 位 Java,只是因为它用完了 C:\Program Files,而不是 C:\Program Files (x86)。
我在以下行中找到了 SFS 文档 在简介 > 要求和安装下。虽然此行仅适用于 Linux 而不是 Windows,但它可能表明 Windows 上的 SFS 也使用 32 位 Java:
自版本 1.5 起,SmartFoxServer 附带了自己的 x86 32 位 Sun Java 运行时。
确定已安装的 Java 版本的一种快速方法是在 cmd 中输入以下命令: Java -version
它将在控制台显示以下内容:
C:\Users\967097>java -version
java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)
在这里,您可以看到安装的java版本的位类型。
如果您使用 x86 版本的 sqljdbc_auth.dll 而不是 x64 版本,您的应用程序是否可以正常工作?如果它突然开始使用 x86 DLL,则 SFS 必须使用 32 位 Java。
是否有用于启动 SFS 的批处理文件?如果是这样,通读该内容可能有助于指出 SFS 从何处运行 Java。还要注意是否有任何更改 PATH
. 。Java只能加载DLL java.library.path
系统属性,在 Windows 上,它设置为 PATH
环境变量。
如果您仍然无法确定 SFS 使用的是 32 位还是 64 位 Java,请尝试使用 Process Explorer 查看运行 SFS 的 java.exe 进程启动时使用的环境。
其他提示
使用 Windows 身份验证集成安全性时
- 下载 sqljdbc_6.0.8112.100_enu.exe 来自微软网站
- 安装exe(阅读zip路径中的说明)
将 sqljdbc_4.0/enu/auth/x64/sqljdbc_auth.dll 复制到
Java/jre7/bin 并
Java/jre7/lib
之后,您应该能够连接到休眠工具以在数据工具中提取数据库
将 .dll 文件放入您的 JRE 文件夹中:-
我也遇到了同样的问题,之后我根据您的操作系统将 sqljdbc_auth.dll (x86 或 x64)放置在 JRE 文件夹中,即 jre7/bin/file.dll,然后运行我的 application.jar & 它工作得很好。这对我有用,你也可以尝试一下,这可能对你也有帮助:)
从 Microsoft 下载 jdbc 驱动程序(版本 7.2)并复制 sqljdbc_auth.dll 到 C:\Program Files\Java\jre\bin 和 C:\Program Files\Java\jdk\bin 文件夹。如果您运行的是 Java 32 位,您将转到 Program Files (x86) 文件夹。
就我而言,我执行了以下操作来解决:
下载了 Microsoft JDBC Driver 8.2 for SQL Server (zip)(可在此处找到 - https://docs.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15).
然后在 zip 文件中,我进入以下文件夹:
sqljdbc_8.2 > enu > 身份验证 > x64
并将“mssql-jdbc_auth-8.2.2.x64.dll”复制到 C:\Program Files\Java\jdk-12.0.1\bin
对于以下 Windows 身份验证字符串,我遇到了同样的问题
jdbc:sqlserver://host:1433;integratedSecurity=true
默认的authenticationScheme=NativeAuthentication,所以它可能依赖于一些microsoft dll。要修复此问题,请将authenticationScheme更新为NTLM,如下所示
jdbc:sqlserver://host:1433;authenticationScheme=NTLM;integratedSecurity=true;domain=myDomain
笔记: :给定的用户名没有域