2009-02-11 99 views
6

使用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 

無濟於事。有任何想法嗎?

回答

4

正如其中一條評論所指出的,這個答案現在已經很陳舊了。我經常使用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

0

我不相信你能以這種方式登錄到Windows域帳戶。你需要在sql中直接設置一個用戶來傳遞憑證。

+0

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

1

我在一段時間內還沒做完,但我記得整個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

1

大概有點太晚來幫助你 - 但我遇到了同樣的問題。在撰寫本文時,最新版本的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

2

截至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的一些依賴關係。

相關問題