2014-02-27 140 views
10

我一直在尝试编辑pg_hba.conf文件,以便能够使用IP地址访问服务器,迄今为止,没有成功。从局域网访问PostgreSQL服务器

例如,我可以访问使用«本地主机»,但我想用我的路由器给我的至极的IP地址来访问是一样的东西192.168.1.X

这是MI的pg_hba.conf:

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

任何帮助?

+0

有几件需要的信息。您的路由器正在为您提供局域网IP,因此您将无法从局域网外访问您的计算机。我对PostgreSQL不熟悉,但我知道Ubuntu上的MySQL要求我在Ubuntu上重新启动MySQL服务。你在使用什么操作系统?最后,你是否有防火墙运行,阻止访问PostgreSQL使用的端口? –

+0

我没有防火墙,我知道它只能通过局域网访问。我正在使用Linux 3.12(Manjaro)@gabe –

+0

@simon只是想确保你知道局域网的约束,因为你的标题无处不在。抱歉,我无法提供更多帮助,但我使用Ubuntu和MySQL。我建议你将PostgreSQL和OS添加到你的问题中,以便那些希望在未来帮助你的人不要错过它。祝你好运。 –

回答

22

首先,编辑postgresql.conf文件,并设置listen_addresses。 'localhost'的默认值只会在回送适配器上侦听。您可以将其更改为'*',表示监听所有地址,或者特定列出您希望接受连接的接口的IP地址。请注意,这是接口分配给它的IP地址,您可以使用ifconfigip addr命令查看该IP地址。

您必须重新启动postgresql才能使listen_addresses更改生效。

接下来,在pg_hba.conf,你需要这样的条目:

# TYPE DATABASE  USER   ADDRESS     METHOD 
host {dbname}  {user}   192.168.1.0/24   md5 

{} DBNAME是你允许访问的数据库名。您可以为所有数据库添加“全部”。

{user}是允许连接的用户。请注意,这是postgresql用户,不一定是unix用户。

ADDRESS部分是您想要允许的网络地址和掩码。按照您的要求,我指定的掩码将适用于192.168.1.x。

METHOD部分是要使用的身份验证方法。那里有很多选择。 md5表示它将使用md5哈希密码。你在样本中的'信任'意味着根本不认证 - 这绝对不被推荐。

重新加载服务器后,对pg_hba.conf的更改将生效。你可以使用pg_ctl reload(或通过初始化脚本,这取决于你的操作系统发行版)。

+0

其实你只需要一个'pg_ctl reload'让它生效,而不是完全重启。或者'SELECT pg_reload_conf()'。 –

+1

@CraigRinger listen_addresses需要重新启动(手动显示“此参数只能在服务器启动时设置”)。正如我所说的那样,pg_hba可以通过重新加载来更改。 – harmic

+0

啊,我的坏。 -ENOCOFFEE。 –