与 <主机名>:5432 的连接被拒绝

Vek*_*zor 4 java postgresql jdbc

我不是通信网络方面的专家,所以我不知道我的“主机名”应该是什么以及在哪里可以找到它?

我在 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."
Run Code Online (Sandbox Code Playgroud)

其中 127.0.1.1、127.0.0.1、192.168.1.42、98.765.432.123(public ip) 或其他任何地址,它都不起作用。正确的主机名是什么?

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

Pat*_*ick 6

这可能是由很多原因造成的。

  1. 服务器有一个IP地址。这是 JDBC 连接字符串应该使用的地址<hostname>,除非您有一些本地 DNS 解决方案。要排除后者的问题,请使用 Ubuntu 服务器的 IP 地址。在 Ubuntu 上输入ifconfig即可查看;可能192.168.1.42就像你提到的那样。因此,从具有 Java 应用程序的客户端,您可以使用服务器的 IP 地址。
  2. 如果您有标准的 PostgreSQL 安装,它应该使用端口 5432,您可以检查 中的设置postgresql.conf。在 JDBC 连接字符串中,您还应该指示端口:“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

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

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

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

postgres=# 
Run Code Online (Sandbox Code Playgroud)

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

postgres=# CREATE DATABASE my_db;
CREATE DATABASE
Run Code Online (Sandbox Code Playgroud)

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

postgres=# CREATE ROLE vekszor LOGIN PASSWORD 'secret123' CREATEROLE;
CREATE ROLE
postgres=# ALTER DATABASE my_db OWNER TO vekszor;
ALTER
Run Code Online (Sandbox Code Playgroud)

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

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