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
モジュールを使用する場合も同様です。
注:
トピックに関するその他の質問:
pymssql:Windows以外のボックスで実行するときにWindows認証を使用する方法
https://stackoverflow.com/questions/27692366/mssql-python-windows-authentication
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接続を有効にします
現在は機能しているようです。 Python 3.6、Windows 10。
conn = pymssql.connect(server='(local)', database='DbName')
RHELの場合は、FREETDSCONF環境変数を設定します。 Pymssqlはデフォルトで間違った場所を探します:
os.environ["FREETDSCONF"] = "/etc/freetds.conf"
最近、これと同じ課題がありました。私も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()
これで問題が解決しない場合は、ソリューションに近づくことを願っています。