错误:用户的身份validation失败

我不能通过nodejs pg模块连接postgres或pgAdmin3下面是我的configuration和错误消息,我找不到如何修复

用户,密码,angular色权限,数据库创build

 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连接和错误消息

 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.confconfiguration

 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中仍然不能显示如下所示的错误信息:

 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的pg_hba.conf文档, ident auth-method如下:

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

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