使用 psql 允许远程连接到 PostgreSQL 数据库

举报
Tiamo_T 发表于 2022/08/19 21:20:30 2022/08/19
【摘要】 安装 PostgreSQL 时,默认情况下不允许使用 TCP/IP 连接到数据库。 当您尝试使用 psql 命令从客户端连接到远程 PostgreSQL 数据库时,您可能会收到“psql:无法连接到服务器:连接被拒绝”错误消息。

安装 PostgreSQL 时,默认情况下不允许使用 TCP/IP 连接到数据库。

当您尝试使用 psql 命令从客户端连接到远程 PostgreSQL 数据库时,您可能会收到“psql:无法连接到服务器:连接被拒绝”错误消息。

在以下示例中,我们尝试从客户端计算机连接到在 192.168.102.1 服务器上运行的 PostgreSQL 数据库。正如您从输出中看到的,它清楚地表明远程 PostgreSQL 数据库不接受连接。

# psql -U postgres -h 192.168.102.1
psql: could not connect to server: Connection refused
        Is the server running on host "192.168.102.1" and accepting
        TCP/IP connections on port 5432?

要为 PostgreSQL 数据库启用 TCP/IP 连接,您需要遵循以下两个步骤。

1.修改pg_hba.conf添加Client Authentication Record

在 PostgreSQL 数据库服务器上,默认情况下,您会注意到 /var/lib/pgsql/data/pg_hba.conf 末尾的以下记录。如下所示,它只接受来自本地主机的连接。

# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
# IPv6 local connections:
host    all         all         ::1/128               ident

将以下行添加到 pg_hba.conf 服务器。这将允许来自“192.168.101.20” ip-address 的连接(这是我们示例中的客户端)。如果要允许来自特定网络上的多个客户端计算机的连接,请在此处以 CIDR 地址格式指定网络地址。

# vi  /var/lib/pgsql/data/pg_hba.conf
host    all         all         192.168.101.20/24    trust

以下是 pg_hba.conf 文件中支持的各种客户端认证记录格式。我们正在使用此列表中的#2 格式。


  • 本地数据库用户身份验证方法 [身份验证选项]
  • 主机数据库用户 CIDR-address authentication-method [authentication-option]
  • hostssl 数据库用户 CIDR-address authentication-method [authentication-option]
  • hostnossl 数据库用户 CIDR-address authentication-method [authentication-option]

除了“CIDR-address”格式,您还可以使用以下记录格式在单独的字段中指定 ip-address 和网络掩码。

  • 主机数据库用户IP地址IP掩码认证方法[认证选项]
  • hostssl 数据库用户 IP 地址 IP 掩码 身份验证方法 [身份验证选项]
  • hostnossl 数据库用户 IP-address IP-mask authentication-method [authentication-option]

2.修改postgresql.conf中的监听地址

在 PostgreSQL 数据库服务器上,默认情况下,监听地址将是 postgresql.conf 文件中的 localhost,如下所示。

# grep listen /var/lib/pgsql/data/postgresql.conf
listen_addresses = 'localhost'

修改这一行并给出 *. 如果服务器上有多个接口,还可以指定一个特定的接口来监听。

# grep listen /var/lib/pgsql/data/postgresql.conf
listen_addresses = '*'

3.测试远程连接

现在,登录到客户端机器 192.168.101.20,并执行 psql 远程连接到 PostgreSQL 数据库服务器(192.168.102.1),如下所示。这一次,它应该工作。

# psql -U postgres -h 192.168.102.1
Welcome to psql 8.1.11 (server 8.4.18), the PostgreSQL interactive terminal.
postgres=#

另外,如果您不想每次都在命令行参数中指定主机名,您可以在 PGHOST 环境变量名称中设置远程 PostgreSQL 数据库 ip-address,如下所示。

# export PGHOST=192.168.102.1
# psql -U postgres
Welcome to psql 8.1.11 (server 8.4.18), the PostgreSQL interactive terminal.
postgres=#
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。