9

Windows ドメイン資格情報を使用して、Linux で Python を使用して MS SQL Server データベースに接続する方法はありますか?

Windows資格情報を使用してWindowsマシンから完全に正常に接続できますが、pyodbs + freetds + unixodbcを使用してLinux pythonから同じことをしようとしています

>>import pyodbc
>>conn = pyodbc.connect("DRIVER={FreeTDS};SERVER=servername;UID=username;PWD=password;DATABASE=dbname")

このエラーが発生します。

class 'pyodbc.Error'>: ('28000', '[28000] [unixODBC][FreeTDS][SQL Server]Login incorrect. (20014) (SQLDriverConnectW)')

パスワードは正しく書かれていると確信していますが、ユーザー名のさまざまな組み合わせを試しました。

DOMAIN\username
DOMAIN\\username

あるいは

UID=username;DOMAIN=domain

無駄に。何か案は?

4

5 に答える 5

5

少なくとも2013年3月の時点で、これはFreeTDSですぐに機能するようです。私は適切な測定のためにTDSプロトコルバージョンを指定しました-それが違いを生むかどうかはわかりません:

connStr = "DRIVER={{FreeTDS}};SERVER={0};PORT=1433;TDS_Version=7.2;UID={1}\\{2};PWD={3}".format(hostname, active_directory_domain, username, password)

統合認証は、MicrosoftのLinux用公式ドライバー( http://msdn.microsoft.com/en-us/library/hh568450.aspx)でもサポートされているようです。実際に動作するLinuxディストリビューションの数や、利用可能なソースの量がわかりません。彼らは、RHEL 5と6、およびダウンロードページのいくつかの依存関係について明示的に言及しています。

于 2013-03-21T15:34:02.530 に答える
4

コメントの1つで指摘されているように、この回答は今ではかなり古くなっています。Linux から SQL Server 2008 R2 への認証に GSSAPI を定期的かつ日常的に使用していますが、ほとんどの場合、EasySoft ODBC マネージャーと (商用の) EasySoft ODBC SQL Server ドライバーを使用しています。

2009 年の初めに、同僚と私は、特定のバージョンの MIT kerberos ライブラリにリンクされた FreeTDS ビルドを介して DBB::Perl を使用し、GSSAPI (Kerberos 資格情報) を使用して、Solaris 10 から SQL Server 2005 インスタンスに接続することに成功しました。その秘訣は -- これは少し信じがたいことですが、私は FreeTDS ソース コードを調べて確認しました --長さゼロのuser_name を指定することです。user_name 文字列の長さが 0 の場合、FreeTDS コードは GSSAPI を使用しようとします (そのサポートがコンパイルされている場合)。ODBC に長さ 0 の user_name を渡す方法を理解できなかったため、Python と pyodbc を介してこれを行うことができませんでした。

ここの perl コードでは、.freetds.conf などの wrt 構成ファイルが破損する可能性が複数あります。プリンシパルは大文字にする必要があったことを思い出すようですが、私のメモはそれと一致していないようです。

$serverprincipal = 'MSSQLSvc/foo.bar.yourdomain.com:1433@YOURDOMAIN.COM';
$dbh = DBI->connect("dbi:Sybase:server=THESERVERNAME;kerberos=$serverprincipal", '', '');

SQL Server サーバーに適切なセキュリティ プリンシパル名を使用させるには、setspn ユーティリティの使用方法を知っておく必要があります。

私たちの環境は Kerberos の第一人者によって設定されており、SQL Server が実行されている AD ドメインと、私のクライアントが走っていました。

Linux から SQL Server への GSSAPI 認証を行うコードhttp://code.google.com/p/libsqljdbc-auth/がありますが、これは Java のみです。作者 (彼のことをよく知っているようです) も、GSSAPI が組み込まれている Java の最近のバージョンで動作する jTDS プロジェクトに同様のパッチを提供しています。

つまり、ピースはすべてそこにあり、それらをすべて一緒に機能させようとするのは、大きなもつれた混乱です。pyodbc から unixODBC から FreeTDS odbc から TDS への統合を追跡/デバッグするのはかなり難しいことがわかりました。perl は CT-Lib の上にある非常に薄いラッパーだったので、はるかに簡単に作業を進めることができました。

于 2009-06-05T01:47:56.197 に答える
1

おそらくあなたを助けるには少し遅すぎます-しかし、私は同じ問題に遭遇しました. 執筆時点では、最新バージョンの pyodbc を使用すると、Windows 資格情報でログインできます。次のように、接続文字列の UID フィールドを空白のままにします。

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=myserverinstance;DATABASE=mydatabase;UID=;PWD=mypassword')

現在、これはログオン時に既存のWindows資格情報を使用しています...任意の任意のWindowsドメイン資格情報を指定する方法がわからない...

于 2011-04-29T12:49:35.933 に答える
0

この方法で Windows ドメイン アカウントにログインできるとは思えません。この方法で資格情報を渡すには、SQL で直接ユーザーを設定する必要があります。

于 2009-02-12T00:46:42.063 に答える