如何允许远程访问 PostgreSQL 数据库

Posted

技术标签:

【中文标题】如何允许远程访问 PostgreSQL 数据库【英文标题】:How to Allow Remote Access to PostgreSQL database 【发布时间】:2013-09-05 23:12:24 【问题描述】:

我在 Windows 7 中安装了 PostgreSQL 9.2,我在虚拟机中安装了 Windows XP,如何连接这两个数据库并允许远程访问以从两个系统添加/编辑数据库?

【问题讨论】:

请注意,所有答案都允许访问服务器上的 all PostgreSQL 数据库(在您的情况下在 Win 7 上运行)。将服务器暴露给像这里这样的 VM 是有意义的。当然,在更一般的情况下,出于安全原因,人们会限制对特定数据库和用户的远程访问。 【参考方案1】:

您必须将其添加到您的 pg_hba.conf 并重新启动您的 PostgreSQL。

托管所有 192.168.56.1/24 md5

这适用于启用 VirtualBox 和仅主机适配器。如果您不使用 Virtualbox,则必须替换 IP 地址。

【讨论】:

谢谢,但我使用的是 Microsoft Virtual PC,我怎么知道要添加哪个 IP 地址?【参考方案2】:

为了远程访问 PostgreSQL 数据库,您必须设置两个主要的 PostgreSQL 配置文件:

postgresql.conf pg_hba.conf

这里简单介绍一下如何设置(注意以下说明仅供参考:要安全配置机器,必须熟悉所有参数及其含义)

首先将 PostgreSQL 服务配置为在 Windows 7 机器上的所有网络接口上侦听端口 5432: 打开文件postgresql.conf(通常位于C:\Program Files\PostgreSQL\9.2\data)并设置参数

listen_addresses = '*'

查看WindowsXP虚拟机的网络地址,并在pg_hba.conf文件(与postgresql.conf同目录)中设置参数,使postgresql能够接受来自虚拟机主机的连接。 例如Windows XP的机器IP地址为192.168.56.2,在pg_hba.conf文件中添加:

host all all 192.168.56.1/24 md5

这样,PostgreSQL 将接受来自网络 192.168.1.XXX 上所有主机的连接。

在 Windows 7 中重新启动 PostgreSQL 服务(服务-> PosgreSQL 9.2:右键单击并重新启动服务)。在 windows XP 机器上安装 pgAdmin 并尝试连接到 PostgreSQL。

【讨论】:

非常感谢,不幸的是它没有用,我所做的所有更改都在 Windows 7 端,当我重新启动 PostgreSQL 服务时,它不会再次启动,直到我删除虚拟机 IP pg_hba.conf 中的地址,我应该在虚拟机文件中添加任何内容吗? 您检查过 Windows 7 防火墙吗?你能从 WindowsXP ping Windows7 吗?您也可以尝试使用netstat -a -n 命令来检查postgresql 是否正在监听地址 Nvm 老兄,它成功了,这是一个 IP 地址问题,现在它就像一个魅力:) django.db.utils.OperationalError:致命:用户“multibot_crm”的密码验证失败 致命:用户“multibot_crm”的密码验证失败 @AlikElzin-kilaka 您可以使用斜线表示法来指示子网。如果需要包含所有以 192.168.*.* 开头的地址,可以在 pg_hba.conf 配置文件中指定 192.168.0.0/16。【参考方案3】:

如果使用 PostgreSql 9.5.1,请按照以下配置:

    在 pgAdmin 中打开 hg_hba.conf 选择你的路径,打开它,然后添加一个设置 重启 postgresql 服务

【讨论】:

所以你的网络IP地址是0.0.0.0/0?还是只接受所有 IP 地址? @ziggy :所有 IP 地址。为了允许 X.X.X.X 使用 0.0.0.0/0。为了允许 192.X.X.X 使用 192.0.0.0/8。为了允许 192.168.X.X 使用 192.168.0.0/8。为了允许 192.168.1.X 使用 192.0.0.0/16。为了允许 192.168.1.X 使用 192.168.1.0/24。为了只允许 192.168.1.2 使用 192.168.1.2/32【参考方案4】:

除了上述建议 (1) 修改配置文件 pg_hba.conf 和 (2) postgresql.conf 和 (3) 重新启动 PostgreSQL 服务的答案外,某些 Windows 计算机可能还需要传入 TCP 流量以允许在端口上(通常是5432)。

为此,您需要打开 Windows 防火墙并为端口添加入站规则(例如 5432)。

前往控制面板\系统和安全\Windows Defender 防火墙 > 高级设置 > 操作(右侧选项卡)> 入站规则 > 新规则... > 端口 > 特定本地端口 并输入您的端口使用,通常是 5432 > (其余的默认设置并输入您想要的任何名称)

现在,尝试从客户端计算机上的 pgAdmin 再次连接。不需要重启服务。

【讨论】:

这适用于在 VirtualBox 上的 Windows 10 主机上运行的 Windows 7 来宾操作系统。【参考方案5】:

postgresql.conf

中设置listen_addresses = '*'

编辑 pg_hba.conf 文件 并在文件的最后添加以下条目:

host    all             all              0.0.0.0/0                       md5
host    all             all              ::/0                            md5

查找配置文件this link 可能会对您有所帮助。

【讨论】:

是的,它有效。最后,我可以使用本地网络中的 pgadmin 访问 postgresql。谢谢。 conf 文件位置:psql -U postgres -c 'SHOW config_file'。 Ubuntu 中的默认值:/etc/postgresql/12/main/postgresql.conf。此外,应该重新启动服务:sudo service postgresql restart - 在 ubuntu 上。 别忘了sudo systemctl restart postgresql 我的工作正常。但我不得不使用“信任”而不是“md5”。此外,只有 ipv6 连接才需要第二行。 不要trustall all 0.0.0.0/0 结合使用 - 这会使您的服务器实际上是开放的给大家。正如in PostgreSQL documentation 所述:“只有在与服务器的连接上有足够的操作系统级保护时,才应使用此方法。”【参考方案6】:

在 Windows 上重新启动服务的快捷方式:

1) 按 Windows 键 + R

2) 输入“services.msc”

3) 按名称排序

4) 找到“PostgreSQL”服务并重启。

【讨论】:

重启 Postgresql 服务不会使 Postgres DB 能够从其他机器访问。您应该先配置它,然后重新启动 Postgre 服务。【参考方案7】:

这是针对使用 AWS 云计算(EC2 或 RDS 机器)的特定案例的补充答案。

除了执行上述所有建议之外,在使用 AWS 云计算时,您还需要设置入站规则以允许您访问端口。

请查看this answer about 'inbound rules'。

【讨论】:

【参考方案8】:

对于 PostgreSQL 13,由于某种原因,我无法对远程连接使用 scram-sha-256 加密。这行得通。

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all             all                                     scram-sha-256 # "local" is for Unix domain socket connections only
host    all             all             127.0.0.1/32            scram-sha-256 # IPv4 local connections:
host    all             all             ::1/128                 scram-sha-256 # IPv6 local connections
local   replication     all                                     scram-sha-256 # Allow replication connections from localhost, by a user with the replication privilege.
host    replication     all             127.0.0.1/32            scram-sha-256
host    replication     all             ::1/128                 scram-sha-256
host    all             all             0.0.0.0/0               trust # <---------- remote connections

【讨论】:

请不要这样做,这会使您的数据库访问对所有人开放而无需密码

以上是关于如何允许远程访问 PostgreSQL 数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何设置PostgreSQL允许被远程访问

PostgreSQL 允许远程访问设置方法

PostgreSQL 允许远程访问设置方法

PostgreSQL 允许远程访问设置方法

Postgresql允许远程访问配置修改

mac默认安装postgresql, 如何让postgresql可以远程访问