Npgsql を使用していますが、パブリック ログインに自動的にフォールバックする統合セキュリティを使用して PostgreSQL サーバーに接続する方法があるかどうか疑問に思っていました。または、私が達成しようとしていることを行う別の方法があるかもしれません。
Windows 認証を使用する ASP.NET Web サイト (IIS7.5) があり、SSPI 経由のアクセスを許可するように PostgreSQL を構成しました。データベースに正しい名前のロールがある限り、これは正常に機能します。この Web サイトは、イントラネット上のすべてのユーザーが表示できますが、一部のユーザーには、他のユーザーにはできないはずのいくつかの特別な機能 (または追加のデータを表示できる) があります。
現在、私は次のようなものを使用しています:
NpgsqlConnectionStringBuilder csb = new NpgsqlConnectionStringBuilder();
csb.Pooling = false; // if true, causes intermittent DB connection issues
csb.Database = "dbname";
csb.Host = "192.168.1.100";
csb.IntegratedSecurity = true;
dbconn.ConnectionString = csb.ConnectionString;
try
{
dbconn.Connect();
}
catch (NpgsqlException ex)
{
if (/* check for authentication failed */)
{
csb.IntegratedSecurity = false;
csb.UserName = "www-read";
dbconn.ConnectionString = csb.ConnectionString;
dbconn.Open();
}
}
これは正常に機能しますが、「www-read」ロールにフォールバックするたびに、認証エラーがあったことを示す重要なログ エントリが追加されます。これを回避できる唯一の方法は、常に www-read 経由で接続し、適切な統合セキュリティ ロールが存在するかどうかを問い合わせてから再接続することですが、上記よりもさらに面倒に思えます。