正如其中一条评论所指出的,这个答案现在已经过时了。我经常使用 GSSAPI 从 Linux 到 SQL Server 2008 R2 进行身份验证,但主要使用 EasySoft ODBC 管理器和(商业)EasySoft ODBC SQL Server 驱动程序。
在 2009 年初,我和一位同事设法使用 GSSAPI(Kerberos 凭据)从 Solaris 10 连接到 SQL Server 2005 实例,该实例使用 DBB::Perl 通过与特定版本的 MIT kerberos 库链接的 FreeTDS 构建。诀窍是——这有点难以置信,但我已经通过查看 FreeTDS 源代码验证了它——指定长度为零的用户名。如果 user_name 字符串的长度为 0,则 FreeTDS 代码将尝试使用 GSSAPI(如果已编译该支持)。我无法通过 Python 和 pyodbc 做到这一点,因为我想不出一种让 ODBC 传递零长度用户名的方法。
在 perl 代码中.. 有多种机会破坏 wrt 配置文件,例如 .freetds.conf 等。我似乎记得主体必须是大写的,但我的笔记似乎不同意这一点。
$serverprincipal = 'MSSQLSvc/foo.bar.yourdomain.com:1433@YOURDOMAIN.COM';
$dbh = DBI->connect("dbi:Sybase:server=THESERVERNAME;kerberos=$serverprincipal", '', '');
您必须知道如何使用 setspn 实用程序才能让 SQL Server 服务器使用适当的安全主体名称。
我对 kerberos 方面一无所知,因为我们的环境是由一个彻头彻尾的 Kerberos 专家设置的,并且在运行 SQL Server 的 AD 域和 Kerberos 域之间设置了一些花哨的东西,比如相互信任。我的客户正在运行。
有一些代码http://code.google.com/p/libsqljdbc-auth/执行从 Linux 到 SQL Server 的 GSSAPI 身份验证,但它只是 Java。作者(似乎知道他的东西)也为 jTDS 项目提供了一个类似的补丁,该补丁适用于内置 GSSAPI 的更新版本的 Java。
所以碎片都在那里,试图让它们一起工作只是一个大杂烩。我发现 pyodbc 到 unixODBC 到 FreeTDS odbc 到 TDS 集成很难跟踪/调试。perl 的东西,因为它是 CT-Lib 顶部的一个非常薄的包装器,所以更容易上手。