1

次のコードがあります。

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)")

2 番目の接続文字列でユーザー名とパスワードを指定していませんが、ユーザー名とパスワードが pyodbc によって使用されているようです。使用されたユーザー名とパスワードを確認するにはどうすればよいですか?

4

2 に答える 2

2

指定しない場合は、WINDOWSドメイン資格情報を渡す必要があります。失敗したサーバーでは、Windows アカウントにアクセス権がありません (または、他のマシンが別の信頼されていないドメインにある)。これが一般的なシナリオである場合、プログラムはおそらく Windows 認証に依存するべきではありません。別のドメインまたは別の権限を持つ別のユーザーがそれを実行しようとします。SQL認証を使用し、接続文字列を構成ファイル (コード内ではなく) に配置することを検討する必要があります。

于 2013-08-23T20:57:23.190 に答える