Java JDBC SQLServerException:“异常”;此驱动程序未配置为集成身份验证。”;
我正在为(SFS)编写一个“服务器端扩展”。在我的登录脚本中,我需要与MS SQL Server建立连接,我正试图使用JDBC进行连接。我已经在调试环境中测试了JDBC代码,它运行良好 但是 当我将服务器端扩展放入SFS“extensions”文件夹(根据规范)时,我得到一个Java JDBC SQLServerException:“异常”;此驱动程序未配置为集成身份验证。”;,java,sql-server,jdbc,mssql-jdbc,smartfoxserver,Java,Sql Server,Jdbc,Mssql Jdbc,Smartfoxserver,我正在为(SFS)编写一个“服务器端扩展”。在我的登录脚本中,我需要与MS SQL Server建立连接,我正试图使用JDBC进行连接。我已经在调试环境中测试了JDBC代码,它运行良好 但是 当我将服务器端扩展放入SFS“extensions”文件夹(根据规范)时,我得到一个com.microsoft.sqlserver.jdbc.SQLServerException: “此驱动程序未配置为集成身份验证。” 我搜索了这个错误,发现这通常是因为文件sqljdbc_auth.dll不在系统路径中;我
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文件,而不是C:\Program文件(x86) 我在介绍>要求和安装下找到了以下行。虽然这一行仅适用于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版本,应用程序是否工作?如果它突然开始使用x86DLL,那么SFS必须使用32位Java
是否有用于启动SFS的批处理文件?如果是这样的话,通读这篇文章可能有助于指出SFS从何处运行Java。还要注意路径的任何更改。Java只能在Java.library.path
系统属性中加载DLL,在Windows上,这被设置为path
环境变量的值
如果仍然无法确定SFS使用的是32位还是64位Java,请尝试使用Process Explorer查看运行SFS的Java.exe进程的启动环境。将.dll文件放在JRE文件夹中:-
我也面临同样的问题,在那之后,我根据您的操作系统将sqljdbc_auth.dll(x86或x64)放在JRE文件夹(即jre7/bin/file.dll)中,然后运行我的application.jar&它工作得非常好。这对我很管用。你也可以试试这可能对你也有帮助:)使用Windows身份验证集成安全性时
从Microsoft站点下载sqljdbc_6.0.8112.100_enu.exe
安装exe(阅读zip路径中的说明)
将sqljdbc_4.0/enu/auth/x64/sqljdbc_auth.dll复制到
Java/jre7/bin和to
Java/jre7/lib
在此之后,您应该能够连接到hibernate工具,以从Microsoft下载jdbc驱动程序(7.2版),并将sqljdbc_auth.dll复制到C:\Program Files\Java\jre\bin和C:\Program Files\Java\jdk\bin文件夹中。如果您运行的是32位Java,您将转到Program Files(x86)文件夹。在我的例子中,我执行了以下操作来解决:
下载了Microsoft JDBC驱动程序8.2 for SQL Server(zip)(可在此处找到-)
然后在zip文件中,我进入以下文件夹:
sqljdbc_8.2>enu>auth>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
注意:给定的用户名没有域我也有类似的问题,我将.dll文件在pom.xml中的位置放在
-Djava.library.path=“C:\*\\**”
这对我很有效这对我很有效:
下载MicrosoftJDBCDriverforSQLServer并提取内容。
在那里,您可以从Microsoft JDBC Driver x.x for SQL Server\sqljdbc\u x.x\chs\auth\x64
中找到一个sqljdbc\u auth.dll
。
将该文件复制到Windows的System32
文件夹中
现在测试连接。我对这里的其他答案有一点不同的看法,无论是在术语方面,还是在可能需要复制到特殊位置的文件(名称)以及应该复制到的位置。(它并不总是sqljdbc_auth.dll,也不总是放在公共jre的jre/bin中。下面将介绍更多内容 首先,在更高版本的MS SQL Server驱动程序中,我发现文件名不是sqljdbc_auth.dll,而是mssql-jdbc_auth-8.4.1.x64.dll(当然是在一个特定的最新版本中)。至于文件的确切名称(如果您还没有该文件,请在哪里查找),它将是您从MS下载的zip中找到的任何文件 具体地说,在我的例子中,该zip是sqljdbc_8.4.1.0_enu.zip,dll位于sqljdbc_8.4\enu\auth\x64中(因为我在64位Windows上运行,并计划在64位JVM中实现dll)