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

时间:2011-05-22 12:08:26

标签: java sql-server jdbc mssql-jdbc smartfoxserver

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

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

BUT

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

  

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

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

还有其他建议吗?

11 个答案:

答案 0 :(得分:15)

对于不同的处理器体系结构(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 docs中找到了以下一行要求和安装。虽然这一行仅适用于Linux而不是Windows,但它可能表明Windows上的SFS也使用32位Java:

  

从版本1.5开始,SmartFoxServer自带x86 32位Sun Java Runtime。

确定已安装的Java版本的一种快捷方法是查看文件夹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进程启动的环境。

答案 1 :(得分:9)

使用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中

  4. 在此之后,您应该能够连接到hibernate工具以在Data Tools中提取数据库

答案 2 :(得分:7)

就我而言,我做了以下解决:

下载了用于SQL Server的Microsoft JDBC驱动程序8.2(zip)(在此处-https://docs.microsoft.com/en-us/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-server-ver15)。

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

sqljdbc_8.2> enu>身份验证> x64

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

答案 3 :(得分:6)

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

答案 4 :(得分:3)

以下Windows身份验证字符串遇到相同的问题

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

默认的authenticationScheme = NativeAuthentication,因此它可能取决于某些Microsoft dll。要解决此问题,请如下将身份验证方案更新为NTLM

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

注释:指定的用户名没有域

答案 5 :(得分:1)

我有一个类似的问题,我将.dll文件的位置放在pom.xml中的

<配置>

-Djava.library.path =“ C:\ * \ \ **”

那对我有用

答案 6 :(得分:1)

我对这里的其他答案略有不同,无论是在术语还是可能需要将文件(名称)复制到特殊位置以及应该复制到何处。 (它并不总是 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,并且在 sqljdbc_8.4\enu\auth\x64 中找到了 dll(因为我在 64 位 Windows 上运行并计划在我的 64 位 JVM 中实现 DLL)。

其次,至于该文件需要放在我的机器上的何处,而这里的许多人建议将其放在诸如 Windows system32 或任何公共 JRE 的 jre/bin 之类的地方是可以理解的(这可能对他们有用),它对我不起作用。

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

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

这对我有用:

下载 Microsoft JDBC Driver for SQL Server 并提取内容。 在那里您会找到来自 sqljdbc_auth.dllMicrosoft JDBC Driver x.x for SQL Server\sqljdbc_x.x\enu\auth\x64。 将该文件复制到 Windows 的 System32 文件夹中。

现在测试连接。

答案 9 :(得分:0)

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

您需要将 sqljdbcauth.dll 的 64 位版本复制到 D:\Program Files\IBM\Cognos\Analytics\bin64

您需要将 sqljdbcauth.dll 的 32 位版本复制到 D:\Program Files\IBM\Cognos\Analytics\bin

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

当然在 doco 的任何地方都没有提到。它只讨论 install_location\drivers 文件夹

答案 10 :(得分:0)

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