与<hostname>的连接:5432被拒绝

时间:2015-07-07 12:33:24

标签: java postgresql jdbc

我不是通讯网络的专家,所以我不知道我应该是什么&#34;主机名&#34;我在哪里可以找到它?

我在ubuntu 14.04上创建了一个postgreSQL服务器,我可以通过将主机名设置为127.0.0.1(localhost),甚至192.168.1.42(我的私有ip)从同一台计算机连接到它。但我无法从任何其他计算机连接到我的服务器,即使它们是在本地网络上。我总是得到这样的信息:

"Connection to <hostname>:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections."

其中是127.0.1.1,127.0.0.1,192.168.1.42,98.765.432.123(公共IP)或其他任何东西,它永远不会起作用。 什么是正确的主机名?

我已经将listen_addresses设置为&#39; *&#39;,已编辑pg_hba.conf以接受0.0.0.0/0 IP-s,并禁用ubuntu防火墙。

3 个答案:

答案 0 :(得分:3)

这可能是由许多事情引起的。

  1. 服务器有一个IP地址。这是JDBC连接字符串应用于<hostname>的地址,除非您有一些本地DNS解决方案。要排除后者的问题,请使用Ubuntu服务器的IP地址。在Ubuntu上键入ifconfig来查看它;它可能就像你提到的那样192.168.1.42因此,从使用Java应用程序的客户端,您可以使用服务器的IP地址。
  2. 如果你有一个标准的PostgreSQL安装,它应该使用端口5432,你可以检查postgresql.conf中的设置。在JDBC连接字符串中,您还应指明端口:&#34; jdbc:postgresql://192.168.1.42:5432 /...",只是为了安全起见。
  3. 您需要拥有一个可以连接的数据库。请注意,默认情况下,只有数据库的所有者(可能是您的用户postgres)才能连接到该数据库。进一步了解。
  4. pg_hba.conf中,您需要为新数据库创建一个条目,以便它可以连接到(典型设置,检查您的网络设置)。 您在此处指定的IP地址(范围)是连接到数据库的客户端的IP地址(范围)!

    host my_db all 192.168.0.0/16 md5

  5. 修改pg_hba.conf后,必须重新启动PostgreSQL服务器。 (通常在Ubuntu上,执行sudo ./etc/init.d/postgresql restart

    要创建数据库my_db(或您喜欢的任何名称),请转到您的Ubuntu框并输入psql作为postgres用户:

    vekszor@ubuntu:~$ sudo -u postgres psql
    [sudo] password for user:
    psql (9.3.5)
    Type "help" for help
    
    postgres=# 
    

    为了连接数据库,你应该有一个数据库:

    postgres=# CREATE DATABASE my_db;
    CREATE DATABASE
    

    您还希望用户(角色)的功能不如postgres超级用户,但仍能够操作数据库。因此,创建此用户角色并分配数据库的所有权:

    postgres=# CREATE ROLE vekszor LOGIN PASSWORD 'secret123' CREATEROLE;
    CREATE ROLE
    postgres=# ALTER DATABASE my_db OWNER TO vekszor;
    ALTER
    

    现在,您可以使用Java应用程序返回到客户端计算机,并使用数据库名称,用户和密码完成JDBC连接字符串。

    请注意,如果要从Internet访问数据库,则应在路由器中设置NAT规则,将端口5432上的流量指向Ubuntu服务器的IP。只要路由器的内部地址为在pg_hba.conf中指明的客户端计算机的相同地址范围内,这应该很容易设置,否则在pg_hba.conf中添加新条目。

答案 1 :(得分:1)

将您的评论读到正确的答案:
这是你向iptables添加规则的方法:

iptables -A INPUT -s 0/0 -p tcp --dport 5432 -j ACCEPT

0/0:如果你想让任何人访问它。
您可以将其更改为特定的IP地址或IP地址范围。

答案 2 :(得分:0)

如果使用UI连接到服务器,则可以运行以下查询以使用以下查询获取服务器的IP地址,以验证您是否使用了正确的IP。

Select inet_server_addr();