[pgsql-jp: 41672] Re: Npgsql で PostgreSQL に SSPI 認証で接続する際の問題
Tomoaki Sato
sato @ sraoss.co.jp
2014年 6月 2日 (月) 21:59:52 JST
佐藤です。
> 中西と申します。
>
> Npgsql(.Net Data Provider for Postgresql)を使って
> PostgreSQLにSSPI認証で接続するケースの質問です。
# かなり前 (2014/2) の質問への返信なので、すでに解決していると思います
# が、
> 【前提】
> ・使用マシンは2台(PostgreSQLサーバとクライアントマシン)
> ・PostgreSQLサーバの環境情報
> OS: Windows7 32bit
> DB: PostgreSQL 9.2.6 を EnterpriseDB 社のバイナリパッケージでインストール
> ・クライアントマシンの環境情報
> OS: Windows7 64bit
> 開発ツール: Microsoft Visual Studio Express 2013 for Windows Desktop
> 接続ドライバ: Npgsql 2.0.14.3
どうやら以下で報告されている Npgsql のバグっぽいです。
https://github.com/npgsql/Npgsql/issues/162
2.1.0 以降ではなおっていると考えられます。
> DB: psqlを使うため、PostgreSQL 9.2.6 を EnterpriseDB 社の
> バイナリパッケージでインストール
> ・PostgreSQLサーバとクライアントマシンは同一のWindowsドメイン上にある。
> ・PostgreSQLサーバの pg_hba.conf は以下レコードを設定し、SSPI認証のみを許可
> -----------------------------------------------
> host all all 0.0.0.0/0 sspi
> host all all ::1/0 sspi
> -----------------------------------------------
> ・PostgreSQLサーバのWindowsファイアーウォールは一時的に停止し、
> 全てのポートへのアクセスを許可
> ・PostgreSQLサーバにWindowsドメインのログインユーザーと同名のロールを追加済
> ----------------------------------------------------------------------------
> CREATE ROLE (Windowsユーザー名) WITH LOGIN;
> ----------------------------------------------------------------------------
>
> 【NpgsqlでDB接続するアプリのソースコード(抜粋)】
> string connstr =
> "Server=(PostgreSQLサーバのIP);Port=5432;Database=(DB名);Integrated Security= true;"
> NpgsqlConnection conn = new NpgsqlConnection(connstr);
> conn.Open();
> NpgsqlCommand command = conn.CreateCommand();
> command.CommandText = "select * from pg_locks";
> command.ExecuteScalar();
> conn.Close();
>
> 【発生事象】
> 1. クライアントマシンからPostgreSQLサーバへpsqlで接続 ⇒ 接続OK
> --------------------------------------------------------------------------------------------------------------------------
> [クライアントマシンでの実行コマンド]
>> psql -h (PostgreSQLサーバのIP) -d (接続するデータベース名)
> [接続時のPostgreSQLサーバログ]
> 2014-01-21 17:08:38 JST LOG: connection received: host=(クライアントマシンのIP)
> port=56499
> 2014-01-21 17:08:38 JST LOG: connection authorized:
> user=(Windowsドメインユーザ) database=(DB名)
> --------------------------------------------------------------------------------------------------------------------------
> 2. クライアントマシンからPostgreSQLサーバへNpgsqlで接続 ⇒ 接続NG
> --------------------------------------------------------------------------------------------------------------------------
> [接続時のPostgreSQLサーバログ]
> 2014-01-21 17:08:51 JST LOG: connection received: host=(クライアントマシンのIP)
> port=56501
> 2014-01-21 17:08:51 JST FATAL: could not accept SSPI security context
> 2014-01-21 17:08:51 JST DETAIL: この関数に提供されたトークンは無効です
> (80090308)
> --------------------------------------------------------------------------------------------------------------------------
> 3. クライアントマシンの中で動かしたPostgreSQLサーバへNpgsqlで接続 ⇒ 接続OK
> --------------------------------------------------------------------------------------------------------------------------
> [接続時のPostgreSQLサーバログ]
> 2014-01-22 14:20:54 JST LOG: connection received: host=127.0.0.1 port=57690
> 2014-01-22 14:20:54 JST LOG: connection authorized:
> user=(Windowsドメインユーザ) database=(DB名)
> --------------------------------------------------------------------------------------------------------------------------
>
> ※同一条件で 「psqlならSSPI認証OK」「NpgsqlならSSPI認証NG」なので、
> Npgsql に何か問題があるのではと推測しています。
>
> 【確認したいこと】
> 2.のケースで接続できるようにしたいので、
> ・接続NGの原因を調査するための方法
> ・同様のケースに遭遇されたことがあればその時の対処方法
> について、わかる方がいらっしゃれば回答いただきたいと思っています。
>
> 当方WindowsやSSPI認証の知識が乏しいため、Windowsの世界では
> 初歩的/的外れな質問かもしれませんがよろしくお願いいたします。
----
Tomoaki Sato <sato @ sraoss.co.jp>
SRA OSS, Inc. Japan
pgsql-jp メーリングリストの案内