JDBC SQLServerException:“此驱动程序未配置为进行集成身份验证。”


问题内容

我正在为SmartFoxServer(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 Runtime。

确定已安装的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版本的位类型。

如果您使用sqljdbc_auth.dll的x86版本而不是x64版本,您的应用程序是否可以工作?如果突然开始使用x86
DLL,则SFS必须使用32位Java。

是否有用于启动SFS的批处理文件?如果是这样,那么通读该文章可能有助于指出SFS从何处运行Java。同时请注意对的任何更改PATH。Java只能在java.library.pathsystem属性中加载DLL
,而在Windows上,这被设置为PATH环境变量的值。

如果仍然不能确定SFS使用的是32位还是64位Java,请尝试使用Process Explorer查看运行SFS的java.exe进程启动的环境。