2013-08-23 52 views
1

我有以下代碼:pyodbc - 在這裏傳遞了什麼用戶名/密碼?

import pyodbc 

cnxn = pyodbc.connect("DRIVER={SQL Server};" 
         +"SERVER=somesqlserver2008.example.com;" 
         +"DATABASE=exampledatabase;") 
cursor = cnxn.cursor() 
#do stuff... 

上面的代碼運行良好。不過,我有理由相信,這段代碼實際上是將某種形式的憑據傳遞給我的背後(可以這麼說)。例如,下面的代碼:

cnxn = pyodbc.connect("DRIVER={SQL Server};" 
         +"SERVER=someOTHERsqlserver2008.example.com;" 
         +"DATABASE=exampledatabase;") 
cursor = cnxn.cursor() 

回報:

Traceback (most recent call last): 
    File "C:\Users\<my username>\Documents\sql_connect_test1.py", line 27, in <module> 
    +"SERVER=someOTHERsqlserver2008.example.com;") 
Error: ('28000', "[28000] [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user '<user name appears here>'. (18456) (SQLDriverConnect); [28000] [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user '<user name appears here>'. (18456)") 

即使我沒有指定第二連接字符串中的用戶名/密碼,看來用戶名和密碼均使用pyodbc 。我怎樣才能找出使用的用戶名和密碼?

回答

1

如果您未指定,它必須通過您的WINDOWS域憑據。在失敗的服務器上,您的Windows帳戶無權訪問(或其他計算機位於不同的不可信域中)。如果這是一種常見的情況,您的程序可能不應該依賴Windows身份驗證 - 不同的域或具有不同權限的不同用戶將嘗試運行它。您應該考慮使用SQL身份驗證並將連接字符串置於配置文件中(不在代碼中)。

+0

嗯......我實際上已經嘗試在第一個連接字符串中添加一個'「UID = ; PWD = 」),但它不起作用。當我將它們從連接字符串中刪除時,它可以正常工作。不知道發生了什麼事。 – SheerSt

+0

您是否嘗試過UID = Windows用戶名或UID = SQL驗證登錄?無論如何,這只是一個總猜測和建議,我對pyodbc沒有任何經驗。他們的文檔對此有何評論? –

+0

是的,我確實嘗試了'UID = '。我不確定「SQL授權登錄」的含義。 – SheerSt