远程访问PostgreSQL数据库


46

我需要从运行12.10和postgresql 9.1的DigitalOcean上的VPS上的远程计算机访问postgresql数据库。

我该怎么做呢?我注意到端口5432已关闭,该如何打开?


1
请遵循javabypatel.blogspot.in/2015/07/…中提到的步骤,并更改postgresql.conf文件中存在的端口号。更改端口后,重新启动PostgreSQL服务器。
Jayesh 2015年

@Jayesh发布的网址成功了。按照说明进行操作,并成功地使我的开发计算机之一连接到另一台计算机(从带有pgAdmin4的Windows到Ubuntu 18.04 postgresql 10.9)
EAmez

Answers:


78

要打开端口5432,请编辑/etc/postgresql/9.1/main/postgresql.conf并更改

listen_addresses='localhost'

listen_addresses='*'

并重新启动您的DBMS

invoke-rc.d postgresql restart

现在您可以与

$ psql -h hostname -U username -d database

如果您无法验证自己的身份,则需要授予用户对数据库的访问权限

编辑你的

/etc/postgresql/9.1/main/pg_hba.conf

并添加

host all all all md5

(这是一个广泛的访问权限。要进行更严格的控制,请查阅pg_hba.conf文档并根据需要进行调整)。

此后,您还需要重新加载

invoke-rc.d postgresql reload

我无需提及这是一个基本配置,现在您应该考虑修改防火墙并提高DBMS的安全性。


4
特别是,您应该启用SSL。
Craig Ringer 2014年

Okey,我尝试了这个,但是当我尝试从计算机上使用pgAdmin进行连接时,出现“服务器未监听”的提示。我已添加到iptables中,并且在运行iptables -L时显示以下内容:ACCEPT tcp-任何地方tcp dpt:postgresql在检查此站点(yougetsignal.com/tools/open-ports)上的IP和PORT时,它说端口是关闭
岛之风

2
服务器在监听吗?与netstat -nlt|grep :5432

1
我将以更严格的方式插入主机行:host <database> <user> <remote_client_IPaddress>/24 md5
gc5 2015年

对于Postgresql版本9.5,您可能需要重新启动服务器,然后listen_addresses才会生效。
Heather92065 '16

26

如果曾经这样做,它将不再起作用:

托管所有* md5

正确的可能行是:

托管所有0.0.0.0/0 md5#ipv4范围

托管所有所有:: 0/0 md5#ipv6范围

托管所有所有md5 #all ip

资源


4
这绝对可以解决问题。上面的答案肯定没有用。
迈克,

请@Mike表达正确的答案: host all all all md5可以正常工作吗?它是正确的?任何安全问题?
彼得·克劳斯

@peterkrauss是的,托管所有对我有用的所有md5。安全问题?当然可以,但是对于我所做的事情来说还不错。(内部网络)
Mike

3

对于消息“服务器未监听”,发生在我身上的是,我没有删除存档postgresql.conf中的#,我的意思是:

#listen_addresses ='本地主机'

至:

listen_addresses ='*'

(对不起我的英语不好)。


0

投票最高且被接受的答案带有严重的安全隐患。出于充分原因,默认情况下禁用此方法。

更好地结合使用本地端口转发ssh

ssh -L local_port:localhost:foreign_port user@server

开始端口转发:

ssh -L 5432:localhost:5432 user@your-server.com
#or
ssh -L 5432:127.0.0.1:5432 user@your-server.com

(更改本地和外部端口以适合您的配置)。

然后,您可以从本地计算机直接连接到数据库:

psql -U db_user -p local_port -l
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.