通过JDBC从Linux机器进行Windows身份验证连接到SQL Server

zuc*_*ori 16 java sql-server jdbc windows-authentication

我希望能够使用jdbc和Windows身份验证连接到SQL Server.我在互联网上看到一些答案说我应该将以下属性添加到连接字符串:

integratedSecurity=true;
Run Code Online (Sandbox Code Playgroud)

并且还添加

sqljdbc_auth.dll
Run Code Online (Sandbox Code Playgroud)

到java路径.

但据我所知,只有在我从Windows机器上连接时才适用.当我在Linux机器上尝试这个时,我得到:

java.sql.SQLException: This driver is not configured for integrated authentication
Run Code Online (Sandbox Code Playgroud)

我的问题是我如何从Linux机器上做到这一点.

谢谢

zuc*_*ori 33

好吧,最后我回答了我自己的问题:这是不可能使用Microsoft JDBC驱动程序从Linux机器上使用Windows身份验证.这可以使用以下连接字符串使用jTDS JDBC驱动程序:

jdbc:jtds:sqlserver://host:port;databaseName=dbname;domain=domainName;useNTLMv2=true;
Run Code Online (Sandbox Code Playgroud)

谢谢大家的所有评论

  • 我试图实现相同。我可以使用Unix计算机上的jtDs和Windows身份验证连接到SqlServer,但是插入查询失败。请您看看[this](http://stackoverflow.com/questions/39658960/exception-while-using-jtds-for-sqlserver-connectivity)堆栈溢出问题 (2认同)
  • @Pradatta 在连接字符串中提供用户和密码,只需将它们作为键值对添加到 url 的末尾。SQL Server 的模板 url 是:jdbc:jtds:<server_type>://<server>[:<port>][/<database>][;<property>=<value>[;...]] 和所以你的网址是 jdbc:jtds:sqlserver://host:port/database;user=someuser;password=somepass (2认同)
  • 感谢您的回答。 (2认同)

mav*_*avi 8

对于那些使用 DBeaver 的人来说,连接到 SQL Server 数据库的方式是:

为了使用 DBeaver 从 Linux Debian 连接到 SQL Server

1.- 选择 SQL Server jTDS 驱动程序

在此输入图像描述

2.- 输入连接信息

在此输入图像描述

3.- 转到驱动程序属性选项卡并添加域、用户、密码

在此输入图像描述

在此输入图像描述

需要注意的是,在一些帖子中,我发现他们需要将属性 USENTLMV2 更改为 TRUE,但它对我有用,可以将 USERTLNMV2 设置为 true 或 false。

我发现的一个问题是,当我尝试使用用户名和密码连接到数据库时,抛出了下一个错误:

登录失败。该登录来自不受信任的域,无法与 Windows 身份验证一起使用。

在此输入图像描述

由于我的用户即将过期,因此引发了此错误。我尝试使用另一个 AD 用户,它可以连接。


mjn*_*mjn 5

TL; DR

无法将本机Windows身份验证用于从Linux上运行的JVM到MSSQL的JDBC连接。


此MSDN文章介绍了Linux上JDBC的身份验证方法,潜在的错误以及可用的选项:

https://blogs.msdn.microsoft.com/psssql/2015/01/09/jdbc-this-driver-is-not-configured-for-integrated-authentication/

...在JDBC 4.0驱动程序中,您可以使用authenticationScheme连接属性来指示您如何使用Kerberos连接到SQL。这里有两个设置。

  • NativeAuthentication(默认)-使用sqljdbc_auth.dll,特定于Windows平台。这是JDBC 4.0驱动程序之前的唯一选项。

  • JavaKerberos –利用Java API调用kerberos,并且不依赖Windows平台。这是特定于Java的,并且未绑定到底层操作系统,因此可以在Windows和Linux平台上使用。

...

以下文档概述了如何将Kerberos与JDBC驱动程序一起使用,并逐步介绍了使JavaKerberos正常工作所需的内容。

使用Kerberos集成身份验证连接到SQL Server http://msdn.microsoft.com/zh-cn/library/gg558122%28v=sql.110%29.aspx