在Mac上使用JBDC的SQL Server的Windows身份validation

是否可以使用Mac上的Windows身份validation/集成安全性连接到SQL Server? 我使用的是Microsoft提供的type 4 JDBC驱动程序。 前端(表单应用程序)用Java编码。 一切都在Windows上完美运行,但办公室里的一个人使用Mac。

这可能吗? 仅供参考,我从未使用过Mac,因此我非常喜欢它们。 我在互联网上搜索过但没有找到解决方案。 先谢谢你。

根据我的经验,这些信息很难得到。 由于Microsoft更改了规则并添加了authenticationScheme参数,因此我的所有搜索都显示错误(过时)信息。 为了帮助下一个人,下面是一个有效的连接字符串示例:

 jdbc:jtds:sqlserver://123.123.123;instance=server1;databaseName=students;integratedSecurity=true;authenticationScheme=JavaKerberos 

同样在驱动程序属性中设置"Domain" 。 不要在任何用户名设置中包含域。

这是在Mac OSX上使用Squirrel SQL(Java)和jtds测试的。 希望前一句话中有人可能使用的搜索词需要知道这些信息。

使用Kerberos集成身份validation连接到SQL Server

从Microsoft JDBC Driver 4.0 for SQL Server开始,应用程序可以使用authenticationScheme连接属性来指示它要使用类型4 Kerberos集成身份validation连接到数据库。


SQL Server的jTDS JDBC驱动程序仅使用FAQ中描述的属性支持Windows身份validation。

指定要进行身份validation的Windows域。如果提供了用户名和密码,则jTDS使用Windows(NTLM)身份validation而不是通常的SQL Server身份validation(即提供的用户和密码是域用户和密码)。 这允许非Windows客户端登录到仅配置为接受Windows身份validation的服务器。

如果域参数存在但没有提供用户名和密码,则jTDS使用其本机Single-Sign-On库并使用记录的Windows用户凭据登录(为此工作,显然需要在Windows上,登录到一个域,并且还安装了SSO库 – 请参阅README.SSO中的分发如何执行此操作)。

我在mac(10.9)上使用jTDS。

使用此驱动程序,您需要像往常一样指定用户名和密码,唯一的区别是您需要在连接字符串中指定domain = WHATEVERTHENTDOMAIN(如果您愿意,则需要指定连接属性)。

所以示例连接字符串是:

 jdbc:jtds:sqlserver://db_server:1433/DB_NAME;domain=NT_DOMAIN_NAME 

然后,jTDS驱动程序使用NTLM使用用户名和密码登录到指定的域。

这是一个老post,但可能与某些人有关。 请参阅另一篇SOpost ,其中介绍了如何通过JDBC从Linux机器连接到带有Windows身份validation的SQL Server。 这也适用于mac。

jTDS不如微软的JDBC驱动程序(特别是它无法弄清楚预处理语句中的参数类型)

是的,您可以使用Active Directory身份validation向MS SQL Server进行身份validation,因为Active Directory只是Kerberos + LDAP,它是开源的并在Mac上实现

Kerberos配置/etc/krb5.conf

 [libdefaults] default_realm = YOUR_REALM.NET [realms] YOUR_REALM.NET = { kdc = host.your-domain.net } 

我需要使用KDC的完全限定域名,而不仅仅是域名

JDBC连接字符串:

 jdbc:sqlserver://$host;database=$db;integratedSecurity=true;authenticationScheme=JavaKerberos 

如果$host没有MSSQLSrv/$host的SPN,请将serverSp=$SPN添加到JDBC连接字符串