【postgreSQL】pg_hba.confファイルの設定

DB

 pg_hba.conf ファイルは PostgreSQL に接続するクライアントの認証に関する設定を記述するファイルです。PostgreSQLに接続できない、認証エラーなどの問題に遭うと、このファイルの調査は欠かせません。

pg_hba.confファイルの設定

 og_hba.congの設定は次のいずれかの形式となります。

    local      database  user  auth-method  [auth-options]

    host       database  user  address  auth-method  [auth-options]
    hostssl    database  user  address  auth-method  [auth-options]
    hostnossl  database  user  address  auth-method  [auth-options]

 TYPE(1列目)には local , host , hostssl , hostnossl のいずれか 1 つを設定します。

TYPE説明
localUnix ドメインソケットを使用する場合に使用される。
hostSSL または非 SSL での接続
hostsslSSL での接続
hostnossl非 SSL での接続

 DATABASE には接続を許可するデータベース名を指定します。複数指定する場合はカンマ(,)で区切って記述してください。また特別な値として all を指定した場合はレプリケーションを除くすべてのデータベースを意味し、 sameuser を指定した場合はユーザー名と同じ名前のデータベースを意味します。

 USER には接続を許可するロール名を指定します。複数指定する場合はカンマ(,)で区切って記述してください。また特別な値として all を指定した場合はすべてのロールを意味します。

 ADDRESS には接続を許可するホスト名またはIPアドレスの範囲を指定します。IPアドレスは IPv4 で指定する場合は 172.20.143.0/24 のような形式、また IPv6 で指定する場合は fe80::7a31:c1ff:0000:0000/96 のような形式で指定します。また特別な値として all を指定した場合はすべてのIPアドレスを意味し、 samehost と指定した場合は PostgreSQL が動作しているサーバと同じ IP アドレスを意味します。 samenet と指定した場合はサーバと同じネットワークを意味します。
 ADDRESS でホスト名を指定する場合、 hoge.example.com のように個別のホスト名を指定します。また .example.com のように指定した場合は example.com のすべてのホスト( hoge.example.com など)を意味します。

 AUTH-METHOD には認証方式を指定します。主な設定する値と認証方式は次のようです。

AUTH-METHOD説明
trust任意のロール名でパスワードなしで接続可能
reject接続をすべて拒否
md5パスワード認証
passwordパスワード認証、パスワードを平文で送信
scram-sha-256パスワード認証、最も安全だが一部クライアントで未サポート
peerPeer認証
ドメインソケットとpeer認証

 peer認証とは:カーネルからクライアント上のオペレーティングシステムのユーザ名を取得し、 それをデータベースユーザ名(オプションのユーザ名マップとともに)として使用することにより動作します。この方法はローカル接続でのみ使用可能です。
 例として、アカウント myuser で Linux システムにログインして psql コマンドを実行すると、ユーザー myuser はパスワード認証なしでデータベースに接続されます。postgresql データベースに myuser ユーザーが存在しない場合、ユーザーが見つからないというエラーが報告されます。

 ドメインソケットとは:単一マシン上の高効率なプロセス間通信に用いられる機能・インタフェースの一種です。
 Linux上、psql のデフォルトの接続方法は unix ドメイン ソケットを使用するもので、/var/run/postgresql/または/tmp/ ディレクトリでソケット .s.PGSQL.5432 を検索します。 psql -h /path/to/socket/directory/ -p port を使用して、他のディレクトリのソケット ファイルを切り替えることができます。

 以下のコマンドでシステムがLISTENしているドメインソケットがわかります。

netstat -an | grep LISTEN

……
unix  2      [ ACC ]     STREAM     LISTENING     24815    /var/run/abrt/abrt.socket

コメント

タイトルとURLをコピーしました