Pythonを使用して、ウィンドウ認証を使用してSQLデータベースに接続しようとしています。ここでいくつかの投稿を見ました(たとえば、 here )が、メソッドが機能しなかったようです。
たとえば、次のコードを使用しました。
cnxn = pyodbc.connect(driver='{SQL Server Native Client 11.0}',
server='SERVERNAME',
database='DATABASENAME',
trusted_connection='yes')
しかし、私は次のエラーを受け取りました:
Error: ('28000', "[28000] [Microsoft][SQL Server Native Client 11.0][SQL Server]
Login failed for user 'DOMAIN\\username'. (18456) (SQLDriverConnect); [28000] [Microsoft]
[SQL Server Native Client 11.0][SQL Server]Login failed for user 'DOMAIN\\username'.
(18456)")
(上記のエラーメッセージで、実際のドメイン名とユーザー名をそれぞれDOMAIN
とusername
に置き換えたことに注意してください。)
また、UID
とPWD
を使用してみましたが、同じエラーが発生しました。
最後に、上記のリンクからの提案に従ってサービスアカウントを変更しようとしましたが、Log On
のProperties
にアクセスしたときに、コンピューターにservices.msc
タブがありませんでした。
何を間違えたのか、どうすれば問題を解決できるのだろうか。
Windowsマシンからの接続:
MicrosoftのODBC SQL Server用ドライバー、Trusted_connection=yes
は、ドライバーに「Windows認証」を使用するように指示し、スクリプトは、スクリプトを実行しているユーザーのWindows資格情報を使用してSQL Serverへのログインを試みます。 UID
およびPWD
を使用して接続文字列で代替Windows資格情報を提供することはできないため、他のWindowsユーザーとして接続する必要がある場合は、RUNAS
を使用して実行する必要がありますPython他のユーザーとしてのスクリプト..
UID
およびPWD
で指定された特定のSQL Serverログインで「SQL Server認証」を使用する場合使用する Trusted_connection=no
。
Windows以外のマシンからの接続:
Windows以外のマシンから接続する必要があり、SQL Serverが「Windows認証」のみを使用するように構成されている場合、MicrosoftのSQL Server用のODBCドライバーはKerberosの使用を要求します。 SQL Serverインスタンスが古いNTLM認証プロトコルをサポートするように構成されている場合、接続文字列にUID
、PWD
、およびDOMAIN
を指定して、FreeTDS ODBCを使用できます。
このcxn文字列を試してください。
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=localhost;PORT=1433;DATABASE=testdb;UID=me;PWD=pass')
デフォルトのデータベース(MSSQLSERVER)への接続中に同様の問題が発生しました。デフォルトのデータベースに接続している場合は、削除してください
database = 'DATABASENAME'、
接続パラメーターセクションの行を再試行します。
乾杯、ディーパック
最初のオプションは、コマンドプロンプトを使用して資格情報が保存されている場合に機能します。もう1つのオプションは、接続で資格情報(UId、Psw)を提供することです。
次は私のために働いた:
conn = pyodbc.connect('DRIVER={SQL Server};SERVER=yourServer;DATABASE=yourDatabase;UID=yourUsername;PWD=yourPassword')
私はすべてを試しましたが、これが最終的に私のために働いたものです:
import pyodbc
driver= '{SQL Server Native Client 11.0}'
cnxn = pyodbc.connect(
Trusted_Connection='Yes',
Driver='{ODBC Driver 11 for SQL Server}',
Server='MyServer,1433',
Database='MyDB'
)