PostgreSQL HBAの設定
概要 †PostgreSQLの接続権限やクライアントの設定をしているのが、pg_hba.confファイルとpg_ident.confファイルです。ここではpg_hba.confの設定と外部から接続するための設定について説明します。 1. pg_hba.confの設定 †デフォルトでは以下のようになっています。 # PostgreSQL Client Authentication Configuration File # =================================================== # # Refer to the "Client Authentication" section in the # PostgreSQL documentation for a complete description # of this file. A short synopsis follows. # # This file controls: which hosts are allowed to connect, how clients # are authenticated, which PostgreSQL user names they can use, which # databases they can access. Records take one of these forms: # # local DATABASE USER METHOD [OPTIONS] # host DATABASE USER CIDR-ADDRESS METHOD [OPTIONS] # hostssl DATABASE USER CIDR-ADDRESS METHOD [OPTIONS] # hostnossl DATABASE USER CIDR-ADDRESS METHOD [OPTIONS] # # (The uppercase items must be replaced by actual values.) # # The first field is the connection type: "local" is a Unix-domain socket, # "host" is either a plain or SSL-encrypted TCP/IP socket, "hostssl" is an # SSL-encrypted TCP/IP socket, and "hostnossl" is a plain TCP/IP socket. # # DATABASE can be "all", "sameuser", "samerole", a database name, or # a comma-separated list thereof. # # USER can be "all", a user name, a group name prefixed with "+", or # a comma-separated list thereof. In both the DATABASE and USER fields # you can also write a file name prefixed with "@" to include names from # a separate file. # # CIDR-ADDRESS specifies the set of hosts the record matches. # It is made up of an IP address and a CIDR mask that is an integer # (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that specifies # the number of significant bits in the mask. Alternatively, you can write # an IP address and netmask in separate columns to specify the set of hosts. # # METHOD can be "trust", "reject", "md5", "password", "gss", "sspi", "krb5", # "ident", "pam", "ldap" or "cert". Note that "password" sends passwords # in clear text; "md5" is preferred since it sends encrypted passwords. # # OPTIONS are a set of options for the authentication in the format # NAME=VALUE. The available options depend on the different authentication # methods - refer to the "Client Authentication" section in the documentation # for a list of which options are available for which authentication methods. # # Database and user names containing spaces, commas, quotes and other special # characters must be quoted. Quoting one of the keywords "all", "sameuser" or # "samerole" makes the name lose its special character, and just match a # database or username with that name. # # This file is read on server startup and when the postmaster receives # a SIGHUP signal. If you edit the file on a running system, you have # to SIGHUP the postmaster for the changes to take effect. You can use # "pg_ctl reload" to do that. # Put your actual configuration here # ---------------------------------- # # If you want to allow non-local connections, you need to add more # "host" records. In that case you will also need to make PostgreSQL listen # on a non-local interface via the listen_addresses configuration parameter, # or via the -i or -h command line switches. # # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all ident # IPv4 local connections: host all all 127.0.0.1/32 ident # IPv6 local connections: host all all ::1/128 ident pg_hba.confは1行で1レコードを構成しており、1行のフォーマットは以下のとおりです。 認証の設定は上から1行ずつ順番に判定され、最初に一致した行が認証処理に使用されます。そして、どれも一致しない場合はアクセスが拒否されます。 TYPE DATABASE USER CIDR-ADDRESS METHOD # TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all md5 local all postgres ident # IPv4 local connections: host all dbuser 127.0.0.1/32 md5 host all dbuser 192.168.100.1/32 md5
具体的なデータベース名を記述する場合は、カンマ区切りで複数指定できます。多くのデータベースを指定したい場合は、それらを別のファイルに記述して、データベース名の指定を@ファイル名とすると、そのファイルに書かれたデータベース名が適用されるようになります。
接続を許可したいデータベース名を指定。「all」とすると全てのデータベースを意味する。複数のデータベース名を指定したい場合は、カンマで区切る。
接続を許可するユーザ名を指定。「all」とすると全てのユーザを意味する。ユーザ名の前に「+」を付けるとグループ名を指定したことになる。複数のユーザ名を指定したい場合は、カンマで区切る。
他の PostgreSQL データベースサーバからのネットワーク経由でのバックアップ受け口など、特定のホストに対し接続を認めたい場合は、以下を追記します。この例ではスーパーユーザーである postgres に対してのみ 192.168.1.54 からの接続を許可しています。 # TYPE DATABASE USER IP-ADDRESS IP-MASK METHOD host all postgres 192.168.1.54 255.255.255.255 md5 このようにバックアップを受け取る側の PostgreSQL サーバーに設定しておけば、ネットワークを使って pg_dumpall で別のPostgreSQLデータベースサーバに丸ごと復元する事も可能です。 7.2 から、パスワードを暗号化して格納できるようになりました。alter user するときに、encrypted を指定するようにします。 alter user jibun with encrypted password 'secret'; しかし、利用者全員に encrypted を付けてパスワードを変更してくれと言うのは大変です。そこで、デフォルトで暗号化して格納するように設定を行います。postgresql.conf の以下の行のコメントを外します。 #password_encryption = on ↓ password_encryption = on これで encrypted を付けなくても暗号化されるようになりました。 設定の反映 †設定を反映させるために設定を再読み込みします。 # service postgresql reload postgresq.confファイルの修正 †postgresql.confを次のように修正します。 listen_addresses = '*' ←コメントを解除し、''内を * に修正~ なお、PostgreSQLのデフォルトのポート「5432」です。ポートを変えたい場合、以下を修正します。~ #port 5432 ←コメントを解除し、ポート番号を変更する~ ポートを開ける †デフォルトのポート5432または上記で設定したポートを開け、通信できるようにします。 # vi /etc/sysconfig/iptables 以下を追加します。 -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT 保存したら、iptableを再起動します。 # service iptables restart 編集中 Last-modified: 2014-04-11 (金) 01:19:52 (3659d)
|