如何允许远程访问 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 连接才需要第二行。
不要不将 trust 与 all 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 数据库的主要内容,如果未能解决你的问题,请参考以下文章