是否有任何方式连接到一个MS SQL服务器数据库与蟒蛇在linux上使用Windows域凭据?

我可以连接完全没从我的windows的机器使用的Windows凭据,但是尝试做一样从一个linux python pyodbs+freetds+unixodbc

>>import pyodbc
>>conn = pyodbc.connect("DRIVER={FreeTDS};SERVER=servername;UID=username;PWD=password;DATABASE=dbname")

结果,在这个错误:

class 'pyodbc.Error'>: ('28000', '[28000] [unixODBC][FreeTDS][SQL Server]Login incorrect. (20014) (SQLDriverConnectW)')

我敢肯定密码写的是正确的,但是我已经尝试了许多不同组合的用户名:

DOMAIN\username
DOMAIN\\username

甚至

UID=username;DOMAIN=domain

无济于事。任何想法?

有帮助吗?

解决方案

作为一个评论指出,这个答案很陈旧现在。我经常和经常使用GSSAPI验证从Linux到SQL Server 2008 R2的但大多是与斯软件ODBC管理器和(商业)斯软件ODBC SQL Server驱动程序。

在2009年年初,我和一个同事使用DBB :: Perl的超过freetds的构建抵御麻省理工学院的一个特定版本链接Kerberos库管理连接到SQL Server 2005实例从的Solaris 10使用GSSAPI(Kerberos凭据)。诀窍是 - 这是一个有点很难相信,但我已经通过了freetds的源代码中寻找证实此事 - 指定的零长度的USER_NAME。如果USER_NAME字符串的长度为0,则freetds的代码将尝试使用GSSAPI(如果支持已经编译)。我一直无法通过Python和pyodbc要做到这一点,因为我无法弄清楚越来越ODBC向下传递一个零长度USER_NAME的方式。

在这里,在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 / 这确实GSSAPI认证从Linux到SQL Server,但它仅是Java的。笔者(谁似乎知道他的东西)也贡献了一个类似的补丁,JTDS项目,与更多的最新的Java版本已经GSSAPI建工作。

所以,这两块都在那里,它只是一个大一团糟试图让他们所有人一起工作。我发现pyodbc到了unixODBC到freetds的ODBC来TDS集成相当困难的跟踪/调试。 Perl的东西,因为它是在顶部CT-Lib的一个非常薄的包装是很容易走了。

其他提示

随着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)

集成身份验证也出现在微软的官方驱动程序支持的Linux: HTTP: //msdn.microsoft.com/en-us/library/hh568450.aspx 。我不知道有多少Linux发行版的实际工作或如何在源中有多少是可用的。他们明确提到RHEL 5和6以及下载页面上一些依赖

可能有点来不及帮助你 - 但我遇到了同样的问题。在写这篇文章的时候,pyodbc的最新版本,可以让我与Windows凭据登录。刚刚离开的UID字段为空连接字符串中,像这样:

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=myserverinstance;DATABASE=mydatabase;UID=;PWD=mypassword')

现在,这是使用现有的Windows凭据,当你登录...不知道如何指定任何套利窗口域凭据...

我还没有做到在一段时间,但我还记得整个unixodbc+FreeTDS+pyodbc事情有点棘手。然而,这是可以做到的,和一旦安装这并不难。

这个网站提供了非常良好的说明:http://www.pauldeden.com/2008/12/how-to-setup-pyodbc-to-connect-to-mssql.html (归档的副本,上网的存档)

此外,在我的经验pyodbc有问题编写/上运行的64位Linux机。正因为如此,我们最终用ceODBC.ceODBC是不是很稳定,因为pyodbc(遇到更多意想不到的错误比pyodbc当运行在python prorgram),但是它非常容易得到建立和运行在Linux上64位。

我不相信你就可以登录到Windows域帐户这种方式。您需要设置在SQL用户直接传递凭证的这种方式。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top