トップ  »  コンピュータガイド  »  データベース  »  PostgreSQL  »  クライアント認証の設定

クライアント認証の設定

PostgreSQLのクライアント認証は"pg_hba.conf"ファイルによって制御されます。
"pg_hba.conf"ファイルには設定内容を1行単位で記述する独自のホストレコードを設定します。
接続要求を受けると、PostgreSQLはpg_hba.confの記述を上から下へ順に検索し、条件に一致する記述を見付けると検索を終了して記述された設定に基づき接続の許可・拒否を行います。

"pg_hba.conf"の記述方法

"pg_hba.conf"ファイルはホストベースの認証設定を行うファイルで、「ホストタイプ」、「接続先データベース」、「接続クライアント」、「認証方法」等を1行単位で記述し、各フィールドはスペースまたはタブによって区切ります。
コメントアウトする場合は先頭に"#"(シャープ記号)を付けます。"#"を付けた行はコメントとなり、無視されます。
実際の記述方法は以下の解説、及びこのページ後半の「"pg_hba.conf"の設定例」を参照してください。

ホストタイプの指定

local
Unixドメインソケット経由の接続を意味します。
つまり、PostgreSQLサーバが起動しているマシンと同一のマシンからのクライアント接続を意味します。
host
TCP/IP ネットワーク経由の接続を意味します。
このエントリが正しく動作する為にはPostgreSQLの起動時に"postmaster"バックエンドに"-i"オプションを指定する必要があります。
hostssl
TCP/IP経由のSSLを使った接続を意味します。
但し、この指定をするにはPostgreSQLサーバのインストール時にSSL対応として構成されていなくてはいけません。
また、PostgreSQLの起動時に"postmaster"バックエンドに"-l"と"-i"のオプションを指定する必要があります。

PostgreSQL7.4.1以降"hostssl"とは逆に、設定条件をSSLを使わない通常接続に限定する為の"hostnossl"が追加されています。

データベースの指定

all
PostgreSQLサーバが実行・管理している全てのデータベースに対しての指定になります。
sameuser
クライアント接続するユーザ名と一致するデータベースを意味します。
name(データベース名)
特定のデータベース名を任意指定できます。
データベース名を指定されたレコードの条件は、指定されたデータベースに対してのみ有効になります。

IPアドレスとネットマスクの指定

IPアドレスとネットマスクの組み合わせによって特定のIPアドレスやIPアドレスの範囲を指定します。

例えば、「192.168.1.35」のIPアドレスを持つクライアントからの接続に対してのみ条件を指定したいという場合にはネットマスクに「255.255.255.255」を指定します。

また、「192.168.1.x」のIPアドレスの範囲を指定する場合には、IPアドレスに「192.168.1.0」を指定し、ネットマスクには「255.255.255.0」を指定します。
こうする事によって、IPアドレスが「192.168.1.1」のクライアントも、「192.168.1.10」のクライアントも、「192.168.1.202」のクライアントも、この条件に一致する事になります。

認証方法の指定

trust

指定されたクライアントの接続を無条件で許可します。
指定条件に一致するクライアントは全てパスワードの入力も必要なく信頼されるので、指定には最新の注意が必要です。

特に、インターネットなどの不特定多数のアクセスがある様なネットワーク上ではこの認証方法は使用するべきではありません。

reject
指定されたクライアントの接続は拒否されます。
password

ユーザ名、パスワードによる認証を行い、有効なユーザには接続を許可します。
パスワードの情報はPostgreSQLのシステムテーブルである「pg_shadow」テーブルに保存されているものを参照します。
このテーブルにエントリが無い場合、或いは送信された内容と一致しない場合には接続は拒否されます。

この認証方式の場合、送信内容は通常のテキスト形式でやり取りされます。
つまり、所謂ネット盗聴などに対する危険性を伴いますので、やはりオープンなネットワーク上での使用は控えた方が良いと思います。

md5
"password"と同様にユーザ名、パスワードによる認証を行い、有効なユーザには接続を許可しますが、通信内容はチャレンジレスポンスプロトコルで暗号化されてやり取りされます。
crypt
"md5"と同様に暗号化されたパスワード認証を行いますが、7.2以前のクライアントが必要とする旧式のcrypt暗号化方式によるのもです。
「"password"よりはまし」程度のものなので、PostgreSQL7.3以降のバージョンをお使いの場合は敢えて使う必要もないかと思います。
krb4
ユーザー認証にKerberos V4を使用します。
krb5
ユーザー認証にKerberos V5を使用します。
ident
条件に一致するクライアントからの接続に対し、identマップを使用して認証します。
"ident"方式を使用する場合には空白文字(スペースまたはタブ)で区切られた次のフィールドにオプションを指定しなくてはいけません。
オプションに指定できるのは「sameuser」もしくは"pg_ident.conf"ファイルで定義されたマップ名です。
pam
認証機構としてPAM(Pluggable Authentication Modules)を使用することを除いて"password"のように働きます。

"pg_hba.conf"の設定例

上記で解説した"pg_hba.conf"設定方法について、具体的な例を使って実際の記述方法を紹介します。
これらの設定例はごく基本的なものです。
実際の設定の際にはこれらを応用してご自身の環境に合わせて設定してみてください。

無条件で信頼する場合の設定例

以下の例では、全てのデータベースに対し、ローカル接続と"192.168.1.10"のIPアドレスを持つクライアントからの接続は無条件で許可する様に設定しています。
「自分専用の開発サーバ」の様な環境でお使いの場合の設定といったところですか。

# TYPE       DATABASE    IP_ADDRESS    MASK               AUTHTYPE  MAP
host         all         127.0.0.1     255.255.255.255    trust
host         all         192.168.1.10  255.255.255.255    trust

パスワード認証する場合の設定例

パスワードによる認証を行う場合には以下の様に"AUTHTYPE"に"password"を指定します。
但し、この場合にはパスワードのやり取りは通常のテキスト形式で行われますのでインターネットなどのオープンなネットワークを介して使用はセキュリティ上問題があります。
特別な理由が無い限り"md5"や"crypt"といった暗号化されたパスワード認証を指定する事をお奨めします。
"AUTHTYPE"に"password"は安全が確保されているLANでの使用に止めておく方が賢明です。

# TYPE       DATABASE    IP_ADDRESS    MASK               AUTHTYPE  MAP
host         all         127.0.0.1     255.255.255.255    trust
host         all         192.168.1.10  255.255.255.255    password

データベース単位の設定例

勿論、データベース単位でのクライアント認証も可能です。
以下の例では、「192.168.x.x」のIPアドレスを使って社内ネットワークを構築している会社で、財務部門のIPアドレスが「192.168.1.x」、営業部門のIPアドレスが「192.168.2.x」であると仮定しています。
財務部門クライアントはのデータベース「finance」に対して、営業部門クライアントはのデータベース「sales」に対してそれぞれの接続を"md5"によるパスワード認証により許可します。
また、IPアドレス「192.168.10.1」はシステム管理者と仮定して、全てのデータベースに対する接続を"md5"によるパスワード認証により許可します。

これにより、他部署のユーザ(例えば営業部門のユーザ)がデータベース「finance」に接続しようとしても、データベース名とIPアドレスの範囲が一致しないのでエラーが返され接続は失敗します。
勿論、エントリに無いIPアドレス範囲(例えば"192.168.3.33"のクライアントなど)からの接続もエラーが返され失敗します。
システム管理者のマシンと仮定しているIPアドレス「192.168.10.1」からの接続だけは送信されたユーザ名とパスワードのエントリが「pg_shadow」テーブルに一致すればどちらのデータベースに対する接続も許可されます。

# TYPE       DATABASE    IP_ADDRESS    MASK               AUTHTYPE  MAP
host         finance     192.168.1.0   255.255.255.0      md5
host         sales       192.168.2.0   255.255.255.0      md5
host         all         192.168.10.1  255.255.255.0      md5

トラックバック(0)

トラックバックURL: http://www.ezms.net/mt/mt-tb.cgi/16