我正在编写一个“服务器端扩展” 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 身份验证集成安全性时

  1. 下载 sqljdbc_6.0.8112.100_enu.exe 来自微软网站
  2. 安装exe(阅读zip路径中的说明)
  3. 将 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

笔记: :给定的用户名没有域

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top