JDBC SQLServerException: "This driver is not configured for integrated authentication."



我正在为SmartFoxServer(SFS)编写一个"服务器端扩展"。在我的登录脚本中,我需要连接到MS SQL Server,我正试图使用JDBC来实现这一点。我已经在调试环境中测试了JDBC代码,它运行良好。

但是

当我将服务器端扩展放入SFS"extensions"文件夹(根据规范)时,我会得到一个com.microsoft.sqlserver.jdbc.SQLServerException:

"此驱动程序未配置为集成身份验证。"。

我在谷歌上搜索了这个错误,发现这通常是因为文件sqljdbc_auth.dll不在系统路径中;我已经把这个文件复制到我的系统路径中的一个文件夹中,但它仍然不起作用!

还有其他建议吗?

使用Windows身份验证集成安全时

  1. 从Microsoft站点下载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

在此之后,您应该能够连接到hibernate工具来提取数据工具中的数据库

sqljdbc_auth.dll的不同版本适用于不同的处理器体系结构(x86/x64/ia64)。您在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:Users967097>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只能在java.library.path系统属性中加载DLL,在Windows上,这被设置为PATH环境变量的值。

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

在我的情况下,我做了以下操作来解决:

已下载适用于SQL Server的Microsoft JDBC驱动程序8.2(zip)(可在此处找到-https://learn.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-服务器-服务器15)。

然后在zip文件中,我进入以下文件夹:

sqljdbc_8.2>enu>auth>x64

并且复制的";mssql-jdbc_auth-8.2.2.x64.dll";到C:\Program Files\Java\jdk-12.0.1\bin

nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp nbsp将.dll文件放在JRE文件夹中:-
我也面临着同样的问题,在那之后,我根据您的操作系统将sqljdbc_auth.dll(x86或x64)放在JRE文件夹中,即jre7/bin/file.dll,然后运行我的application.jar;它运行得很好。这对我有效,你也可以尝试一下,也许这对你也有帮助:)

对于下面的windows身份验证字符串,我也遇到了同样的问题

jdbc:sqlserver://host:1433;integratedSecurity=true

默认authenticationScheme=NativeAuthentication,因此它可能依赖于一些microsoft dll。要修复此问题,请将authenticationScheme更新为NTLM,如下所示

jdbc:sqlserver://host:1433;authenticationScheme=NTLM;integratedSecurity=true;domain=myDomain

注意:给定的用户名没有域

从Microsoft下载jdbc驱动程序(7.2版),并将sqljdbc_auth.dll复制到C:\Program Files\Java\jre\bin和C:\Program Files\Java\jdk\bin文件夹。如果您运行的是Java 32位,您将转到Program Files(x86)文件夹。

我遇到了类似的问题,我将.dll文件在pom.xml中的位置放在下

<配置>

<argLine&gt-Djava.library.path=";C: \*\\**"lt;argLine>

这对我有效

这对我有用:

下载适用于SQL Server的Microsoft JDBC驱动程序并提取内容。在那里,您将从Microsoft JDBC Driver x.x for SQL Serversqljdbc_x.xenuauthx64中找到一个sqljdbc_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\chs\auth\x64中找到(因为我在64位Windows上运行,并计划在64位JVM中实现dll)。

第二,至于该文件需要放在我的机器上的哪里,虽然这里的许多人可以理解地建议将其放在Windows system32或他们的公共jre的jre/bin之类的地方(这可能对他们有效),但它对我不起作用。

在我的案例中,我使用的应用程序服务器(如Tomcat)被配置为在我的机器上使用特定的JVM/JRE。我需要将这个DLL放入JVM的jre/bin文件夹中(或者只是bin文件夹,在Java 11及更高版本的情况下,它默认情况下是作为jre实现的)。

然后重新启动应用程序服务器(或JVM)。

如果这里有人正在使用gradle或maven,并且还没有显式导入特定版本的mssqljdbc驱动程序,那么这些解决方案都不起作用。对于与您的系统不兼容或没有包含mssqljdbc-auth.dll的mssql库版本,您几乎肯定有一个可传递的依赖项。

所以改为这样做:(如果你使用Maven,也可以使用它。)

dependencies {
    implementation('com.some.dependencie:that-depends-on-mssql:0.0.1beta')
    implementation('com.microsoft.sqlserver:mssql-jdbc') {
        version {
            strictly '10.2.0.jre8'
            // Or whatever version you need, i.e. 10.2.0.jre11, etc
        }
    }
}

这将用您指定的任何版本替换您的可传递依赖项。

当我尝试使用Java 17和mssql jdbc 11.2.3.jre17时,我遇到了同样的异常

我的例外是

  1. jdbc。SQLServerException:此驱动程序未配置为集成身份验证
  2. java.lang.UnsisfiedLinkError:无法加载身份验证DLL mssql-jdbc_auth-11.2.3.x64

在本例中,我从链接下载了MSSQL JDBC驱动程序sqljdbc_11.2.3.0_enuhttps://learn.microsoft.com/en-us/sql/connect/jdbc/release-notes-for-the-jdbc-driver?view=sql-服务器-ver16

提取Zip文件sqljdbc_11.2.3.0_enu并遵循以下两个步骤

  1. 从路径"复制dll";提取文件夹路径";\sqljdbc_11.2.3.0_enu\sqljdbc_11.2\enu\auth\x64

  2. 粘贴在Java 17的bin文件夹中C:\Program Files\Java\jdk-17.0.5\bin

在这个问题之后,修复了

对于任何来这里的人,因为这个错误出现在他们的Cognos日志中,(cognoserver.log)

您需要将64位版本的sqljdbcauth.dll复制到D:Program FilesIBMCognosAnalyticsbin64

您需要将32位版本的sqljdbcauth.dll复制到D:Program FilesIBMCognosAnalyticsbin

当我将一个工作安装(11.1.3)升级到新版本(11.1.7)时,它删除了这些文件。

当然,文档中没有提到。它只谈论install_locationdrivers文件夹

我已将c:full-pathmssql-jdbc_auth-9.2.1.x64.dll包含在CLASSPATH(windows环境)中这个概念类似于om.xml使用指令的概念:-Djava.library.path="C:*\**"

对于任何在DBeaver中有这个问题的人,你必须将其他答案中提到的.dll文件复制到C:UsersmyuserAppDataLocalDBeaverjrebin

相关内容

最新更新