「Windows 資格情報」を使用して Linux 上で Python を使用して MS SQL Server に接続する

StackOverflow https://stackoverflow.com/questions/539430

質問

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

無駄に。何か案は?

役に立ちましたか?

解決

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

2009年初めには、同僚と私はFreeTDSの上DBB :: Perlを使用してGSSAPI(Kerberos資格)を使用して、Solaris 10からSQL Server 2005のインスタンスに接続するために管理は、MITのKerberosライブラリの特定のバージョンに対してリンクビルドします。トリックだった - これは信じ少し難しいですが、私はFreeTDSのソースコードを見てそれを確認しました - の長さがゼロのUSER_NAMEを指定します。 USER_NAME文字列の長さが0の場合、FreeTDSのコードは、(そのサポートがでコンパイルされている場合)GSSAPIを使用しようとします。私は長さゼロのUSER_NAMEを伝承するためにODBCを取得する方法を考え出すことができなかったとして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ドメイン間に設定相互信頼のような派手なものを持っているとされたため、

私は物事のケルベロス側のいずれかの知識を持っていません私のクライアントが実行されていたKerberosドメインています。

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

作品はすべてがあるので

、それはそれらすべてが一緒に仕事を取得しようとしているだけの大きなもつれた混乱です。私は/デバッグをトレースするかなりハードTDS統合へのODBC FreeTDSのにunixODBCのにpyodbcを見つけました。 perlのもの、それはCT-Libのに一番上にかなり薄いラッパーだったのでが軌道に乗るためにはるかに簡単だった。

他のヒント

は、少なくとも2013年3月のように、これはFreeTDS系で箱から出して動作しているようです。私は良い測定のためのTDSプロトコルバージョンのrel="nofollow">

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

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

あなたを助けるために

おそらく少し遅すぎる - しかし、私は同じ問題に遭遇しました。執筆時点では、pyodbcの最新バージョンは、私がWindows資格情報でログインすることができます。

:ちょうどそのようなあなたの接続文字列でUIDフィールドを空白のまま
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=myserverinstance;DATABASE=mydatabase;UID=;PWD=mypassword')
あなたがログオンしているときに

さて、これは既存のWindows資格情報を使用している...ない任意のARBのWindowsドメインの資格情報を指定する方法がわから...

しばらくやっていなかったのですが、unixodbc + FreeTDS + pyodbc 全体が少し難しかったことを覚えています。ただし、それは実行可能であり、一度セットアップすれば、それほど難しいことではありません。

この Web サイトには非常に優れた手順が記載されています。http://www.pauldeden.com/2008/12/how-to-setup-pyodbc-to-connect-to-mssql.html (Web アーカイブにアーカイブされたコピー)

また、私の経験では、pyodbc は 64 ビット Linux マシン上でコンパイル/実行する際に問題がありました。そのため、最終的には ceODBC を使用しました。ceODBC は pyodbc ほど安定していません (Python プログラムで実行すると、pyodbc よりも多くの予期せぬバグに遭遇します) が、Linux 64 ビット上で立ち上げて実行するのは非常に簡単です。

私はあなたがこの方法でWindowsドメインアカウントにログインすることができます信じていません。あなたは資格情報を渡すこのように直接SQLでユーザーを設定する必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top