用'Windows Credentials'在Linux上使用python连接到MS SQL Server

问题描述:

使用Windows域凭证在Linux上使用python连接到MS SQL Server数据库有什么方法吗?用'Windows Credentials'在Linux上使用python连接到MS SQL Server

我可以连接使用Windows凭据,而是试图从与pyodbs + freetds的+ unixODBC的

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

导致此错误的Linux蟒蛇做同样的我的Windows机器完美的罚款:

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进行身份验证,但主要是使用EasySoft ODBC管理器和(商业)EasySoft ODBC SQL Server驱动程序进行身份验证。

2009年初,我和一位同事设法使用GSSAPI(Kerberos证书),通过FreeBDS构建,使用DBB :: Perl连接到Solaris 10的SQL Server 2005实例,并与特定版本的MIT kerberos库。诀窍是 - 这有点难以置信,但我通过查看FreeTDS源代码来验证它 - 指定零长度的 user_name。如果user_name字符串的长度为0,则FreeTDS代码将尝试使用GSSAPI(如果已经编译了该支持)。我无法通过Python和pyodbc做到这一点,因为我无法找到一种让ODBC传递零长度user_name的方法。

在这里的Perl代码..有多个破解配置文件,如.freetds.conf等机会我似乎记得,校长必须是大写,但我的笔记似乎是不同意的。

 
$serverprincipal = 'MSSQLSvc/foo.bar.yourdomain.com:[email protected]'; 
$dbh = DBI->connect("dbi:Sybase:server=THESERVERNAME;kerberos=$serverprincipal", '', ''); 

你必须知道如何使用SetSPN实用程序,以获得使用适当的安全主体名称SQL Server服务器。

由于我们的环境是由Kerberos大师设计出来的,并且具有像SQL Server运行的AD域之间建立的相互信任之类的花哨的东西,所以我没有任何有关kerberos方面的知识,我的客户端正在运行的Kerberos域。

有一些代码http://code.google.com/p/libsqljdbc-auth/,它执行从Linux到SQL Server的GSSAPI身份验证,但它只是Java。作者(似乎知道他的东西)也为jTDS项目贡献了类似的补丁,该项目适用于内置GSSAPI的更新版本的Java。

因此,作品都在那里,它只是一个大纠结混乱试图让他们一起工作。我发现pyodbc unixODBC以FreeTDS odbc来TDS集成很难追踪/调试。 perl的东西,因为它是CT-Lib的一个非常薄的包装器,要容易得多。

+2

这是一个可以肯定的史诗般的故事,但现在的事态现在太过误导成为最高和被接受的答案。如果您在免责声明中进行编辑,请告知我,我会删除我的downvote。 – steamer25 2013-03-21 15:43:30

我不相信你能以这种方式登录到Windows域帐户。你需要在sql中直接设置一个用户来传递凭证。

+0

看来,这是目前唯一可行的方法。 – 2009-02-12 15:46:54

我在一段时间内还没做完,但我记得整个unixodbc + FreeTDS + pyodbc的事情有点棘手。然而,它可以完成,一旦设置它并不难。

这个网站提供了很好的说明: http://www.pauldeden.com/2008/12/how-to-setup-pyodbc-to-connect-to-mssql.html (archived copy on Web Archive)

而且,根据我的经验pyodbc有问题编译/ 64台Linux机器上运行。正因为如此,我们最终使用了ceODBC。 ceodBC不像pyodbc那么稳定(在python prorgram中运行时遇到比pyodbc更多的意外错误),但在Linux 64位上启动并运行起来非常容易。

+0

我已经使用该网站的说明,它不帮助Windows凭据登录,虽然它提供了一个很好的介绍设置整个系统。 – 2009-02-12 15:40:54

+0

Downvote,因为此答案没有明确地解决集成身份验证/“Windows凭据”的每个问题。 – steamer25 2013-03-21 15:45:15

大概有点太晚来帮助你 - 但我遇到了同样的问题。在撰写本文时,最新版本的pyodbc允许我使用windows凭据登录。刚刚离开的UID字段为空连接字符串中,像这样:

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

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

+0

这从Linux的作品? – tponthieux 2013-03-05 02:38:39

截至2013年3月,这似乎与FreeTDS开箱即用。我指定的TDS protocol version良好的措施 - 不知道这使其中的差别:

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以及对download page的一些依赖关系。