[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 メーリングリストの案内