他ホストから接続するための設定

PostgreSQLはインストールしただけでは、自ホストからしか接続できず、他のホストから利用できない。ここでは、他ホストから接続するための設定を紹介する。

1 postgresq.confファイルの修正

PostgreSQLは、デフォルトでは自ホストからの接続しか許可していない。他ホストからの接続を許可するよう、/usr/local/pgsql/data/postgresql.confを開き、次のように修正する。

listen_addresses = '*' ←コメントを解除し、''内を * に修正

なお、PostgreSQLはデフォルトではポート「5432」を使って通信を行う。ポートを変えたい場合、以下を修正する。

#port 5432 ←コメントを解除し、ポート番号を変更する

変更を保存し、PostgreSQLを再起動する。

# /etc/rc.d/init.d/postgresql restart

2 ポートを開ける

PostgreSQLは、デフォルトではポート5432で通信を行う。よって、ポートを開け、通信できるようにする。この作業はrootで行う。viで/etc/sysconfig/iptablesを開き、以下を追加する。

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 5432 -j ACCEPT

保存したら、iptableを再起動する。

# /etc/rc.d/init.d/iptables restart

3.接続できるクライアントを設定する

他ホストからの接続を許可し、ポートを開けただけでは他クライアントから接続できない。これは、PostgreSQLの設定ファイルである/usr/local/pgsql/data/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  [OPTION]
# host       DATABASE  USER  CIDR-ADDRESS  METHOD  [OPTION]
# hostssl    DATABASE  USER  CIDR-ADDRESS  METHOD  [OPTION]
# hostnossl  DATABASE  USER  CIDR-ADDRESS  METHOD  [OPTION]
#
# (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", "crypt", "password",
# "krb5", "ident", "pam" or "ldap".  Note that "password" sends passwords
# in clear text; "md5" is preferred since it sends encrypted passwords.
#
# OPTION is the ident map or the name of the PAM service, depending on METHOD.
#
# 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.
#

# CAUTION: Configuring the system for local "trust" authentication allows
# any local user to connect as any PostgreSQL user, including the database
# superuser. If you do not trust all your local users, use another
# authentication method.


# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD

# "local" is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
# IPv6 local connections:
host    all         all         ::1/128               trust

このファイルに設定を行い、データベースへ接続するホストを制限する。

全てのホストからの接続を許可する

全てのホストから、全てのデータベースへの接続を許可する場合、以下の記述を追加する。

host all all 0.0.0.0/0 trust

接続を制限する

pg_hba.confは1行で1レコードを構成しており、1行のフォーマットは以下のとおりである。

KIND DATABASE USER CIDR-ADDRESS METHOD

例えば、192.168.0.0/24であるクライアントに、SampleDBへの接続を全てのユーザにパスワード認証でのみ接続を許可する場合、以下の1行を追加する。

host SampleDB all 192.168.0.0/24 md5

設定後の作業

postmasterは書き換わったpg_hba.confを認識しないため、編集した後は必ずPostgreSQLを再起動する。

# /etc/rc.d/init.d/postgresql restart


[ TOP ]