[Ubuntu 16.04] 配置 PostgreSQL 的遠端連接設定

我在Ubuntu服务器上安装和配置PostgreSQL以进行远程连接的机会,为了再次进行设置而做下笔记。

安装 PostgreSQL

首先从终端安装PostgreSQL。

sudo apt-get update
sudo apt-get install postgresql 

在Ubuntu 16.04上,已安装的PostgreSQL被解压到/etc/postgresql目录中。
前往上述目录并确认配置文件。

cd /etc/postgresql/[Version]/main

ls
postgresql.conf pg_hba.conf ... etc

本次设置将使用两个文件,即postgresql.conf和pg_hba.conf。首先,针对pg_hba.conf的配置如下所示:

修改pg_hba.conf文件

...

 TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
...

由于存在上述的设置部分,我们需要修改IPv4连接的部分。初始状态下,只允许本地访问,我们需要在此处进行以下补充。

...

 TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             0.0.0.0/0               md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
...

将IP地址设置为0.0.0.0/0可以允许来自所有IP的密码连接。如果您知道自己的私有网络IP,则应该限制为192.168.**.0/24(**需要自行查询)。另外,在方法上指定密码认证为MD5,但据说在这种情况下无法使用只能访问目标数据库的用户。因为我没有使用过,所以不清楚。在这种情况下,似乎建议将方法设置为常规的密码认证即密码,并通过SSL进行访问(本次未采用)。
如果有余裕,我认为最好拒绝使用root用户postgres进行远程连接,如下所示。

...

 TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             0.0.0.0/0               md5
host    all             postgres        0.0.0.0/0               reject
# IPv6 local connections:
host    all             all             ::1/128                 md5
...

这次虽然没有进行,但最好在本地将访问转换为对peer进行认证的root用户。
这样一来,只有在本地终端上登录为root用户后,才能限制通过root用户进行数据库访问。
顺便提一下,将方法设置为trust将使密码认证失效,所以这样是不合适的。
现在配置pg_hba.conf完成,接下来需要配置postgresql.conf。

修改postgresql.conf文件

...

#listen_addresses = 'localhost'

...

在文件内存在上述部分,通过取消注释并进行以下设置,允许远程连接。

...

listen_addresses = '*'

...

完成上述设置后重新启动PostgreSQL即可。

关于PostgreSQL

顺便提一下,启动、停止、确认和重新启动的命令如下。

/etc/init.d/postgresql start     ## 起動

/etc/init.d/postgresql stop      ## 停止

/etc/init.d/postgresql status    ## 確認

/etc/init.d/postgresql restart   ## 再起動

最后,如果设置了防火墙等,还需要打开PostgreSQL的默认端口5432。

bannerAds