错误:用户的身份验证失败

问题描述:

我无法通过nodejs pg模块或pgAdmin3连接postgres 下面是我的配置和错误消息,我找不到解决方法

I can't connect postgres through nodejs pg module or pgAdmin3 below is my config and error message, I can't find how to fix

用户,密码,角色特权,数据库创建

user, password, role privilege, database create

su - postgres

psql

ALTER USER db_admin WITH PASSWORD ‘aaee11’;

ALTER ROLE db_admin SUPERUSER CREATEDB CREATEROLE;


CREATE DATABASE "testdb" WITH OWNER = db_admin ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'en_GB.UTF-8' LC_CTYPE = 'en_GB.UTF-8' CONNECTION LIMIT = -1 TEMPLATE template0;

全部收听

vi /var/lib/pgsql/9.4/data/postgresql.conf

#listen_addresses = 'localhost'
listen_addresses = '*'

重新启动

service postgresql-9.4 restart

nodejs pg连接和错误消息

nodejs pg connect and error message

var conString = 'postgres://db_admin: aaee11@localhost/testdb';
var dbClient = new pg.Client(conString);
dbClient.connect(function(error) {
  if (error) {
    console.log(error);
  }
});

[root@li61-123 app]# node --harmony app.js staging
Express server listening on port 8002
{ [error: Ident authentication failed for user "db_admin"]
  name: 'error',
  length: 94,
  severity: 'FATAL',
  code: '28000',
  detail: undefined,
  hint: undefined,
  position: undefined,
  internalPosition: undefined,
  internalQuery: undefined,
  where: undefined,
  schema: undefined,
  table: undefined,
  column: undefined,
  dataType: undefined,
  constraint: undefined,
  file: 'auth.c',
  line: '285',
  routine: 'auth_failed' }

pg_hba.conf配置

pg_hba.conf config

vi /var/lib/pgsql/9.4/data/pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            ident
#host    replication     postgres        ::1/128                 ident

更新

在编辑pg_hba.conf将所有方法切换到md5后,它可以在nodejs中连接,但在pgadmin中仍然无法显示如下错误消息:

After edit pg_hba.confswitch all method to md5 it works connect in nodejs but in pgadmin still can not shows the error message like below:

Server doesn't listen
The server doesn't accept connections: the connection library reports 
could not connect to server: Operation timed out Is the server running on host "xx.xxx.xxx.xxx" and accepting TCP/IP connections on port 5432? 
If you encounter this message, please check if the server you're trying to contact is actually running PostgreSQL on the given port. Test if you have network connectivity from your client to the server host using ping or equivalent tools. Is your network / VPN / SSH tunnel / firewall configured correctly? 
For security reasons, PostgreSQL does not listen on all available IP addresses on the server machine initially. In order to access the server over the network, you need to enable listening on the address first. 
For PostgreSQL servers starting with version 8.0, this is controlled using the "listen_addresses" parameter in the postgresql.conf file. Here, you can enter a list of IP addresses the server should listen on, or simply use '*' to listen on all available IP addresses. For earlier servers (Version 7.3 or 7.4), you'll need to set the "tcpip_socket" parameter to 'true'. 
You can use the postgresql.conf editor that is built into pgAdmin III to edit the postgresql.conf configuration file. After changing this file, you need to restart 

pgadmin

[Properties]
Name: xx.xxx.xxx.xxx
Host: xx.xxx.xxx.xxx
Port: 5432
Maintenance: postgres
Username: db_admin
Password: ........

根据Postgresql

According to Postgresql pg_hba.conf documentation ident auth-method is the following:

通过联系客户端上的ident服务器获取客户端的操作系统用户名,并检查其是否与客户端上的操作系统用户名匹配. 请求的数据库用户名.身份验证只能用于 TCP/IP连接.为本地连接指定时,对等 将使用身份验证.

Obtain the operating system user name of the client by contacting the ident server on the client and check if it matches the requested database user name. Ident authentication can only be used on TCP/IP connections. When specified for local connections, peer authentication will be used instead.

您需要切换到md5,然后在psql中运行select pg_reload_conf();或仅重新启动postgres服务.

You need to switch to md5, then in psql run select pg_reload_conf(); or just restart postgres service.