Sam*_*ani 7 python sql-server unixodbc pyodbc freetds
有没有办法使用Windows Domain Credentials在Linux上使用python连接到MS SQL Server数据库?
我可以使用Windows凭据从我的Windows机器上完美地连接,但尝试使用pyodbs + freetds + unixodbc从linux python中做同样的事情
>>import pyodbc
>>conn = pyodbc.connect("DRIVER={FreeTDS};SERVER=servername;UID=username;PWD=password;DATABASE=dbname")
Run Code Online (Sandbox Code Playgroud)
导致此错误:
class 'pyodbc.Error'>: ('28000', '[28000] [unixODBC][FreeTDS][SQL Server]Login incorrect. (20014) (SQLDriverConnectW)')
Run Code Online (Sandbox Code Playgroud)
我确定密码写得正确,但我尝试了很多不同的用户名组合:
DOMAIN\username
DOMAIN\\username
Run Code Online (Sandbox Code Playgroud)
甚至
UID=username;DOMAIN=domain
Run Code Online (Sandbox Code Playgroud)
无济于事.有任何想法吗?
至少在 2013 年 3 月,这似乎与 FreeTDS 开箱即用。我指定了TDS 协议版本以获得良好的测量 - 不确定这是否有所不同:
connStr = "DRIVER={{FreeTDS}};SERVER={0};PORT=1433;TDS_Version=7.2;UID={1}\\{2};PWD={3}".format(hostname, active_directory_domain, username, password)
Run Code Online (Sandbox Code Playgroud)
Microsoft 的 linux 官方驱动程序似乎也支持集成身份验证:http : //msdn.microsoft.com/en-us/library/hh568450.aspx。我不确定它实际在多少 Linux 发行版上工作,或者有多少可用的源代码。他们在下载页面上明确提到了 RHEL 5 和 6 以及一些依赖项。
正如其中一条评论所指出的,这个答案现在已经相当陈旧了。我经常使用 GSSAPI 从 Linux 到 SQL Server 2008 R2 进行身份验证,但主要使用 EasySoft ODBC 管理器和(商业)EasySoft ODBC SQL Server 驱动程序。
2009 年初,我和一位同事设法使用 GSSAPI(Kerberos 凭据)通过 FreeTDS 构建(与 MIT kerberos 库的特定版本链接)使用 DBB::Perl 从 Solaris 10 连接到 SQL Server 2005 实例。诀窍是——这有点难以置信,但我已经通过查看 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 域和运行 SQL Server 的 Kerberos 域之间建立相互信任。我的客户跑进来了。
有一些代码http://code.google.com/p/libsqljdbc-auth/可以进行从 Linux 到 SQL Server 的 GSSAPI 身份验证,但它只是 Java。作者(他似乎很了解他的东西)也为 jTDS 项目贡献了一个类似的补丁,该补丁适用于内置 GSSAPI 的最新版本的 Java。
所以所有的碎片都在那里,这只是一个混乱的大团伙,试图让它们一起工作。我发现 pyodbc 到 unixODBC 到 FreeTDS odbc 到 TDS 的集成很难跟踪/调试。Perl 的东西因为它是 CT-Lib 之上的一个非常薄的包装,所以更容易使用。