关于PostgreSQL的pg_hba.conf文件

简介

    • クライアントの接続認証を設定するファイル

 

    hbaとは、host-based authentication(ホストベース認証)の略

文件位置

    $PGDATA(DBクラスタ)直下$PGDATA/pg_hba.conf

格式

    • どの接続方法で、どのDBに対して、どのユーザ名を使って、どのIPアドレス(CIDR)から、どの認証方式を利用して接続を許可するのかを指定する

 

    • 接続方法 DB DBユーザ IPアドレス(CIDR) 認証方式

 

    デフォルトでいくつかの設定されている

连接方式

local:Unix ドメインソケットを使用する場合に使用されるもので、Windows 環境の場合は使用しない。

host:TCP/IP を使った接続を行う場合に使用する。 host を指定した場合はSSLまたは非 SSLでの接続を許可する。

身份验证方式

trust:パスワードなしで常に接続を許可

reject:常に接続を拒否

password:パスワード認証。パスワードを平文で認証する

md5:パスワード認証。ハッシュ化されたパスワードで認証する

scram-sha-256:パスワード認証。最も安全とされている

验证顺序

    • 認証の設定は上から1行ずつ順番に判定が行われ、最初に一致した行のみが認証処理に使用される。

 

    • どれも一致しない場合は、接続が拒否される

 

    • 接続時の認証において、ある行の認証が選択されて認証に失敗した場合、それ以降の行は無視される。(それ以降の認証が判定されることはない)つまり接続が拒否される

 

    • デフォルトでは、ローカルホストからの接続しか許可されていないので、リモートから接続できない

 

    デフォルトの設定をコメントアウトしてから独自の設定を追加することが多い印象
# TYPE  DATABASE        USER          ADDRESS               METHOD

# IPv4 local connections:
# host    all             all           127.0.0.1/32          md5
# IPv6 local connections:
# host    all             all           ::1/128               md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
# host    replication     all           127.0.0.1/32          md5
# host    replication     all           ::1/128               md5

host    mydb             postgres       127.0.0.1/32          md5
    デフォルトの設定をコメントアウトし、新たな設定を末尾に追加した
$ psql -U postgres -d mydb
    • 上記のコマンドでmydb(DB)に、postgres(DBユーザ)で接続する

 

    • コマンド実行後は、パスワード入力待ちとなるため、postgres(DBユーザ)のパスワードを入力する。パスワードに問題がなければmydb(DB)に接続できる

 

    • ※DBユーザのパスワードは、デフォルトでは設定されていない。そのため、パスワード認証が行えない。

 

    DBユーザのパスワードは、ユーザ作成時、または後から設定することができる。
$ psql -U postgres -d postgres
    postgres(DB)についての認証をpg_hba.confに設定していないため、エラーとなり接続が拒否される

设定反映

$ pg_ctl reloadを指定することで変更内容が反映される
つまり、再起動ではなく、再読み込み

其他访问限制设置(postgresql.conf)

listen_addressesパラメータ(設定の変更には再起動が必要)

サーバー側の接続を受け付けるIPアドレスを設定するパラメータ
接続先のホスト名、またはIPアドレスをカンマ区切りで指定する
デフォルトでは、listen_addresses = localhost

接続元のアドレスを指定するパラメータではないことに注意。これは、pg_hba.confで設定するもの

listen_addresses = *に変更して使用することが多い印象

#listen_addresses = 'localhost'
    • デフォルトでは、クライアントからの接続はローカルホスト宛しか監視しないので、リモートホストからDBサーバのアドレス宛には接続できない

 

    そのため、以下のように値を変更する
listen_addresses = '*'
bannerAds