セキュリティと暗号化
ログイン
Logging in
PostgreSQLにログインする最も簡単な方法は、接続文字列にUsernameとPasswordを指定することです。あなたのPostgreSQLが(pg_hba.confファイルで)設定される方法に従い、Npgsqlは、MD5や平文(推奨されません)で、パスワードを送信します。
パスワードを指定していない場合、そして、あなたのPostgreSQLは、パスワード(プレーンやMD5)を要求するように設定されています。Npgsqlは、標準のPostgreSQLパスワード・ファイルを探します。あなたが、Passfile接続文字列パラメータを指定する場合、それが指定するファイルが、使用されるでしょう。そのパラメータが、定義されていない場合、Npgsqlは、PGPASSFILE環境変数から取得したパスの下で見るでしょう。環境変数が、定義されていない場合、Npgsqlは、システムに依存したデフォルト・ディレクトリに戻します。Unixの場合は、$HOME/.pgpass、Windowsの場合は、%APPDATA%\postgresql\pgpass.confです。
PostgreSQLによってサポートされる、すべての認証メソッドについてのドキュメントについては、このページを確認して下さい。Npgsqlが、Unixドメイン・ソケット(認証メソッド・ローカル)をサポートすることに、注意して下さい。あなたのpostgresql.confで、設定されているとおり、単純に、あなたのHostパラメータを、PostgreSQLソケット・ディレクトリの絶対パスに設定するだけです。
統合セキュリティ(GSS/SSPI/Kerberos)
Integrated Security (GSS/SSPI/Kerberos)
あなたのアプリケーションが、あなたのパスワードに、アクセスできる必要があるので、ユーザー名とパスワードでログインすることは、お勧めできません。認証する代わりの方法は、Kerberosについて交渉するために、GSSやSSPIを使用する「統合セキュリティ」です。この方法の利点は、あなたの、すでに開いているログイン・セッションを使用して、認証が、あなたのOSに渡されることです。あなたのアプリケーションは、全くパスワードを処理する必要はありません。あなたは、Kerberosログイン、Windows Active DirectoryやローカルのWindowsセッションのために、このメソッドを使用できます。3.2以降、この認証方法は、Windows以外のプラットフォームでも機能することに注意してください。
KerberosとSSPIの設定方法は、PostgreSQLの認証メソッドのドキュメントにあります。SSPIに関するその他の説明は、ここで利用できます。
一旦、あなたのPostgreSQLが、適切に設定される場合、単純に、あなたの接続文字列で、Integrated Security = trueが、含まれています。そして、Passwordパラメータを削除します。しかしながら、Npgsqlは、依然として、ユーザー名をPostgreSQLに送信する必要があります。あなたが、ユーザー名の接続文字列パラメータを指定する場合、Npgsqlは、いつもの通りそれを送信します。あなたが、それを省略する場合、Npgsqlは、Kerberos領域が含まれる、あなたのシステムのユーザー名を検出しようとします。デフォルトでは、PostgreSQLは、Kerberos領域が、ユーザ名で送信されることを期待していることに注意してください。(例えば、username@REALM);あなたは、あなたの接続文字列で、Include Realmをtrueに設定することで、Npgsqlの領域を検出してもらうことができます。他の方法として、あなたは、あなたのPostgreSQLのpg_hba.confエントリで、それを領域から取り除くinclude_realm = 0を追加して、無効にすることができます。あなたは、常に、自分でPostgreSQLに、送信するユーザー名を明示的に指定することができます。
暗号化(SSL/TLS)
Encryption (SSL/TLS)
既定では、PostgreSQL接続は、暗号化されていませんが、あなたは、必要に応じてSSL / TLS暗号化を有効にすることができます。まず、ここで説明されているように、SSL / TLS接続を受信するようにPostgreSQLを設定する必要があります。
一旦、あなたが、実行すると、あなたの接続文字列で、SSLモードを指定します。それを、Require(サーバーが、暗号化用に設定されていない場合、接続は、失敗するでしょう)、あるいは、Prefer(可能であれば、暗号化を使用しますが、それ以外の場合には、暗号化されていない状態で、縮退運用します)のどちらかに設定する必要があります。
既定では、Npgsqlは、あなたのサーバの証明書が有効であることを確認します。あなたが、自己署名された証明書を使用している場合、これは失敗します。あなたは、接続文字列にTrust Server Certificate = trueを指定することで、これを無視するようにNpgsqlに指示できます。サーバーの証明書を、どのように検証するかを正確に制御するには、あなたは、NpgsqlConnection上で、UserCertificateValidationCallbackを登録することができます。(これは、.NETのSSLStreamと同じように機能します)。
あなたは、NpgsqlConnection上で、ProvideClientCertificatesCallbackを登録することによって、Npgsqlにサーバーへのクライアント証明書の提供を依頼することもできます。(これは、.NETのSSLStreamと同じように機能します)。