web-dev-qa-db-ja.com

pymssql Windows認証

Windows認証のサポートに使用されるpymssqlモジュール。今はそうではないようです。一部の場所ではまだ機能するはずです。私はこの問題に対する決定的な答えも解決策も見つけることができませんでした。最も関連性の高いリンク:

https://groups.google.com/forum/#!topic/pymssql/QDMLTGBNe

pymssql 1.0は、SQL Serverクライアントスタックの一部であるMS提供のDLLを利用し、それに依存していたため、これをサポートしました。このスタックは、すべてのNTLMネゴシエーションなどの処理を担当していました。これは、とりわけWindowsのみのソリューションであることを意味していました。

さまざまな種類のネットワーク環境をシミュレートできるので、さまざまなセットアップを試しました。このスクリプトを使用して、Windows認証を使用してリモートMSSQLサーバーに接続できるようにしています。そしてこれが問題です。


上記のリンクを含む私の調査によると、pymssqlモジュールでWindows認証を使用するには、が想定されている2つの方法があります。

最初の方法:現在のユーザーの資格情報を使用:

pymssql.connect(server='server') 
# credentials come from active windows session
# some research shows that a "trusted=True" keyword should be provided.

2番目の方法:指定されたユーザーの資格情報を使用します。

pymssql.connect(server='server', user=r'domain\user', password='pass') 
# credentials are given in code and somehow converted to a 
# windows authentication in the background
# some research shows that a "trusted=True" keyword should be provided.

_mssqlモジュールを使用する場合も同様です。


注:

  • Pythonバージョン:2.7.8
  • 私が使用しているpymssqlのバージョン:2.1.1
  • Windows認証をサポートするために使用されたpymssqlのバージョン:1.x
  • (すべて64ビット)でテストしました:
    • windows 7 Professional
    • windows 7 Home Premium
    • windowsサーバー2012
    • windowsサーバー2012R2

トピックに関するその他の質問:

pymssql:Windows以外のボックスで実行するときにWindows認証を使用する方法

Windows認証でpymssqlを使用して接続できません

https://stackoverflow.com/questions/27692366/mssql-python-windows-authentication

13
Inbar Rose

したがって、私はこの問題を解決するために最終的に使用した方法で自分の質問(数か月前)に答える必要があると考えました。

短い答え:私は何か他のものを使いました。

より長い答え:Windows認証のテスト(現在ログオンしているWindowsユーザー以外)で、Microsoftの SQLCMD ツールを PsExec

PsExecはelevated(-h)およびload profile( -e)フラグ。完全なユーザー名DOMAIN\USERNAMEを使用します。

trusted connection-Eフラグを使用して実行したSQLCMD。

後は君しだい。

0
Inbar Rose

python 2.7.11 64ビット、pymssql 2.1.1 win 64、windows 10、sqlserver 2012 with windows authenticationを使用してこれを解決できました:

conn = pymssql.connect(server = 'EDDESKTOP', database = 'baseballData')

Sql Server Configuration Manager> Sql Server Network Configuration-> Protocols for MSSQLSERVER-> TCP/IP Enabledでtcp/ip接続を有効にします

7
Ed G

現在は機能しているようです。 Python 3.6、Windows 10。

conn = pymssql.connect(server='(local)', database='DbName')
2
Igor Tkachenko

RHELの場合は、FREETDSCONF環境変数を設定します。 Pymssqlはデフォルトで間違った場所を探します:

os.environ["FREETDSCONF"] = "/etc/freetds.conf"
1
runamoker

最近、これと同じ課題がありました。私もPython 2.7とWindows認証を最初に使用していました。接続できる唯一の方法は、IronPythonを使用してclrモジュールをインポートすることでした。なぜ機能したのかわからないので、感謝しますいくつかの違いは、私のサーバーがローカルであり、内部のデータベースが「Entity framework-Code first」で形成されていたことです。これが最終的に私をサーバーに接続したコードです。

import clr
clr.AddReference('System.Data')
from System.Data.SqlClient import *

Conn_string = 'data source=Server_Name; initial catalog=Database_Name; trusted_connection=True'
ScheduleConn = SqlConnection(Conn_string)
ScheduleConn.Open()

これで問題が解決しない場合は、ソリューションに近づくことを願っています。

1
Patrick Falvey