Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC SQLServerException:“异常”;此驱动程序未配置为集成身份验证。”;_Java_Sql Server_Jdbc_Mssql Jdbc_Smartfoxserver - Fatal编程技术网

Java JDBC SQLServerException:“异常”;此驱动程序未配置为集成身份验证。”;

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不在系统路径中;我

我正在为(SFS)编写一个“服务器端扩展”。在我的登录脚本中,我需要与MS SQL Server建立连接,我正试图使用JDBC进行连接。我已经在调试环境中测试了JDBC代码,它运行良好

但是

当我将服务器端扩展放入SFS“extensions”文件夹(根据规范)时,我得到一个
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)