JDBC SQLServerException:"此驱动程序未配置为集成身份验证."

Sha*_*ica 33 java sql-server jdbc smartfoxserver mssql-jdbc

我的标准免责声明:我在大约10年内没有使用Java,所以我很可能在这里做了一些基本错误.

我正在为SmartFoxServer(SFS)编写一个"服务器端扩展" .在我的登录脚本中,我需要连接到MS SQL Server,我正在尝试使用JDBC.我在调试环境中测试了JDBC代码,它工作正常.

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

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

我用Google搜索了这个错误,发现它通常是因为文件sqljdbc_auth.dll不在系统路径中; 我已将此文件复制到系统路径中的文件夹中,但仍然无效!

还有其他建议吗?

Luk*_*ard 18

对于不同的处理器体系结构,有不同版本的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的版本(S)是看是否一个或两个的文件夹C:\Program Files\JavaC:\Program Files (x86)\Java存在.当然,如果两个文件夹都存在,那对你没什么帮助.

如果您使用x86版本的sqljdbc_auth.dll而不是x64版本,您的应用程序是否有效?如果它突然开始使用x86 DLL,那么SFS必须使用32位Java.

是否有用于启动SFS的批处理文件?如果是这样,阅读它可能有助于指出SFS从哪里运行Java.还要留意任何变化PATH.Java只能在java.library.path系统属性中加载DLL ,而在Windows上,这会设置为PATH环境变量的值.

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

  • OMG,这太疯狂了。我进行了试验并将 x86 版本的 DLL 复制到扩展文件夹中 - 并且成功了!这完全是疯狂的 - 据说是 64 位服务器,但它运行的是 32 位版本的 JVM!(换句话说,你中了大奖!) (2认同)

Pav*_*van 15

使用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工具以在Data Tools中提取数据库

  • 复制到Java bin目录就足够了 (2认同)

小智 10

就我而言,我执行了以下操作来解决:

下载了 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?视图=sql-server-ver15)。

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

sqljdbc_8.2 > enu > auth > x64

并将“mssql-jdbc_auth-8.2.2.x64.dll”复制到 C:\Program Files\Java\jdk-12.0.1\bin


Moh*_*ani 8

                                                            将.dll文件
放在你的JRE文件夹中: -我也遇到了同样的问题,然后根据你在JRE文件夹中的操作系统,即jre7/bin/file.dll放置了sqljdbc_auth.dll(x86或x64),然后运行我的application.jar&它工作得很好.这对我有用,你也可以试试这可能这对你有帮助:)


CLU*_*HER 7

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


小智 5

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

jdbc:sqlserver://host:1433;integratedSecurity=true
Run Code Online (Sandbox Code Playgroud)

默认的authenticationScheme=NativeAuthentication,所以它可能取决于一些微软的dll。要修复它,将 authenticationScheme 更新为 NTLM,如下所示

jdbc:sqlserver://host:1433;authenticationScheme=NTLM;integratedSecurity=true;domain=myDomain
Run Code Online (Sandbox Code Playgroud)

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