在Mac上使用JDBC的SQL Server的Windows身份验证

时间:2012-06-27 21:17:22

标签: java sql sql-server macos windows-authentication

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

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

7 个答案:

答案 0 :(得分:23)

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

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

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

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

答案 1 :(得分:4)

Using Kerberos Integrated Authentication to Connect to SQL Server

  

从用于SQL Server的Microsoft JDBC Driver 4.0开始,一个应用程序   可以使用 authenticationScheme 连接属性来指示   它希望使用集成的类型4 Kerberos连接到数据库   认证


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

  

<强>域

     

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

     

如果域参数存在但未提供用户名和密码,则jTDS使用其本机Single-Sign-On库并登录   使用已记录的Windows用户的凭据(为此可以使用   显然需要在Windows上,登录到域,还有   安装了SSO库 - 请参阅发布中的README.SSO   该怎么做)。

答案 2 :(得分:1)

我在mac(10.9)上使用jTDS。

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

所以示例连接字符串是:

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

Kerberos config /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连接字符串

答案 5 :(得分:0)

说一个驱动程序可以确定数据类型而另一个驱动程序不能确定数据类型是不正确的。 任何驱动程序都必须根据传递的参数来查看隐式类型。 jTDS和Microsoft的驱动程序都可以执行此操作。这是协议的限制-数据库无法告诉驱动程序哪种类型是正确的,因为在许多查询中它都不知道您打算做什么。

在每个版本中,jTDS和Microsoft的驱动程序都有不同的问题和不同的优势。 “最佳”选择取决于您所查看的每种版本的确切版本以及您的实际需求。随着不同版本的推出,我不得不来回切换-微软以某种方式破坏了,然后又添加了我想要的东西。

答案 6 :(得分:-1)

以下连接字符串对我有用

jdbc:jtds:sqlserver://server_name:port_name;useLOBs=false;databaseName=db_name;useNTLMv2=true;domain=domain_name;

我正在使用 jTDS 1.3.2SQuirreL SQL Client