psql: FATAL: Ident authentication failed for user “postgres”
我在我的Ubuntu Karmic盒子上安装了PostgreSQL和pgAdminIII。
我能够成功使用pgAdminIII(即连接/登录),但是当我尝试使用命令行上的相同用户名/ pwd登录服务器时(使用psql),我收到错误:
1 | psql: FATAL: Ident authentication failed FOR USER"postgres" |
现在有人如何解决这个问题?
以下步骤适用于在Ubuntu 12.04上全新安装postgres 9.1。 (也在Ubuntu 14.04上为postgres 9.3.9工作过。)
默认情况下,postgres会创建一个名为"postgres"的用户。我们以她身份登录,并给她一个密码。
1 2 3 4 | $ sudo -u postgres psql \password Enter password: ... ... |
通过键入
1 | $ psql -U postgres -h localhost |
你在pg_hba.conf中设置了正确的设置吗?
请参阅https://help.ubuntu.com/stable/serverguide/postgresql.html如何操作。
编辑文件
然后重新加载配置文件:
1 | /etc/init.d/postgresql reload |
您收到此错误是因为您的客户端身份验证失败。根据错误消息,您可能具有默认的postgres配置,该配置将所有PostgreSQL连接的客户端身份验证方法设置为"IDENT"。
您一定要阅读PostgreSQL手册中的第19.1节"客户端身份验证",以便更好地了解可用的身份验证设置(对于pg_hba.conf中的每条记录),但这里有相关的代码片段来帮助解决您遇到的问题(来自9.5版手册) ):
trust
Allow the connection unconditionally. This method allows anyone that
can connect to the PostgreSQL database server to login as any
PostgreSQL user they wish, without the need for a password or any
other authentication. See Section 19.3.1 for details.reject
Reject the connection unconditionally. This is useful for"filtering
out" certain hosts from a group, for example a reject line could block
a specific host from connecting, while a later line allows the
remaining hosts in a specific network to connect.md5
Require the client to supply a double-MD5-hashed password for
authentication. See Section 19.3.2 for details.password
Require the client to supply an unencrypted password for
authentication. Since the password is sent in clear text over the
network, this should not be used on untrusted networks. See Section
19.3.2 for details.gss
Use GSSAPI to authenticate the user. This is only available for TCP/IP
connections. See Section 19.3.3 for details.sspi
Use SSPI to authenticate the user. This is only available on Windows.
See Section 19.3.4 for details.ident
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. See Section 19.3.5 for details.peer
Obtain the client's operating system user name from the operating
system and check if it matches the requested database user name. This
is only available for local connections. See Section 19.3.6 for
details.ldap
Authenticate using an LDAP server. See Section 19.3.7 for details.
radius
Authenticate using a RADIUS server. See Section 19.3.8 for details.
cert
Authenticate using SSL client certificates. See Section 19.3.9 for
details.pam
Authenticate using the Pluggable Authentication Modules (PAM) service
provided by the operating system. See Section 19.3.10 for details.
所以...要解决您遇到的问题,您可以执行以下操作之一:
更改
文件到
您需要的本地连接记录
在那里定义。
更新
PostgreSQL用户并授予他们相应的访问权限,
根据您的需要。
保留IDENT设置并在数据库中创建用户
要授予其访问权限的每个操作系统用户。如果一个
用户已经过操作系统的身份验证并登录了PostgreSQL
不需要进一步的身份验证,并将授予访问权限
用户基于在其中分配给它的任何特权(角色)
数据库。这是默认配置。
注意:
只需添加
您可以设置环境变量
1 2 3 4 5 6 7 | $ psql -U db_user db_name psql: FATAL: Peer authentication failed FOR USER"db_user" $ export PGHOST=localhost $ psql -U db_user db_name Password FOR USER mfonline: |
如果以上都不适合您:
我已经做了很多Postgres安装,但今天在RedHat 6.5系统上安装了(安装Postgres 9.3)。我在Aron上面显示的典型hba.conf配置不起作用。事实证明我的系统正在使用IPV6,而忽略了IPV4配置。添加行:
1 | host ALL ALL ::1/128 password |
允许我成功登录
在上述所有答案中,对我来说没有任何作用。我不得不手动更改数据库中的用户密码,它突然工作了。
1 | psql -U postgres -d postgres -c"alter user produser with password 'produser';" |
我使用了以下设置:
的pg_hba.conf
1 2 3 4 5 | LOCAL ALL ALL peer # IPv4 LOCAL connections: host ALL ALL 127.0.0.1/32 password # IPv6 LOCAL connections: host ALL ALL ::1/128 password |
最终成功连接以下命令:
1 | psql -U produser -d dbname -h localhost -W |
我发现我必须安装一个侦听端口113的身份服务器。
1 2 | sudo apt-GET install pidentd sudo service postgresql restart |
然后识别工作。
嗯......
如果您可以使用pgAdminIII中的用户名和密码进行连接,但无法使用
[如果要连接到不同的数据库,请先尝试连接到同一个数据库。见下文。]
来自PostgreSQL:文档:9.3:psql:
If you omit the host name, psql will connect via a Unix-domain socket to a server on the local host, or via TCP/IP to localhost on machines that don't have Unix-domain sockets.
如果您没有运行类似
您可以通过运行来测试:
如果上述方法有效,您的服务器可能配置为使用postgres用户进行本地连接的对等身份验证,即要求操作系统确认您的用户名是否为postgres。
所以它可能是你的pg_hba.conf文件
该文件的完整路径类似于/etc/postgresql/9.3/main/pg_hba.conf。您可以通过以下方式查看
如果在
1 2 | # Connection TYPE DATABASE USER IP addresses Method LOCAL ALL postgres md5 |
[pg_hba.conf文件中的注释行以
如果要在
1 2 | # Connection TYPE DATABASE USER IP addresses Method host ALL postgres 127.0.0.1/32 md5 |
您需要在通过
有关pg_hba.conf的更多信息
来自PostgreSQL:文档:9.3:pg_hba.conf文件[大胆强调我的]:
The first record with a matching connection type, client address, requested database, and user name is used to perform authentication. There is no"fall-through" or"backup": if one record is chosen and the authentication fails, subsequent records are not considered. If no record matches, access is denied.
请注意,记录与身份验证方法不匹配。因此,如果您的pg_hba.conf文件包含以下条目:
1 2 | # Connection TYPE DATABASE USER IP addresses Method LOCAL ALL postgres peer |
然后你将无法通过以下方式连接:
除非其中一个条目位于前一个条目上方的pg_hba.conf文件中:
1 2 3 4 5 | # Connection TYPE DATABASE USER IP addresses Method LOCAL ALL postgres md5 LOCAL ALL postgres password # Unencrypted! LOCAL ALL ALL md5 LOCAL ALL ALL password # Unencrypted! |
问题仍然是你的pg_hba.conf文件。这一行:您可以在/ etc / postgres / varion / main中找到此文件
1 2 3 4 | LOCAL ALL postgres peer Should be LOCAL ALL postgres md5 |
这些是根据官方PostgreSQL文档关于身份验证方法的两个选项的简要描述。
对等身份验证
对等身份验证方法的工作原理是从内核获取客户端的操作系统用户名,并将其用作允许的数据库用户名(使用可选的用户名映射)。仅在本地连接上支持此方法。
密码验证
基于密码的身份验证方法是md5和密码。除了通过连接发送密码的方式外,这些方法的操作类似,分别是MD5散列和明文。
如果你完全担心密码"嗅探"攻击,那么首选md5。如果可能,应始终避免使用普通密码。但是,md5不能与db_user_namespace功能一起使用。如果连接受SSL加密保护,则可以安全地使用密码(但如果依赖于使用SSL,则SSL证书身份验证可能是更好的选择)。
更改此文件后,请不要忘记重新启动PostgreSQL服务器。如果你在Linux上,那将是
我在bash shell中Mac OSX上的PostgreSQL 9.3上的解决方案是使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | # IN bash_profile edit PGDATA environmental variable OPEN ~/.bash_profile # append this line TO bash_profile export PGDATA="/Library/PostgreSQL/9.3/data" # reload bash_profile SOURCE ~/.bash_profile # OPEN pg_hba.conf IN vim sudo vi /Library/PostgreSQL/9.3/DATA/pg_hba.conf # append these two LINES TO the END OF the pg_hba.conf file LOCAL ALL ALL trust host ALL ALL 127.0.0.1/32 trust # can now login AS USER IN bash psql -d <db_name> -U <user_name> -W |
我花了更多的时间来解决这个我不想承认的错误。
我认为pg_hba.conf中的身份验证配置顺序与您的情况相关。默认配置文件包含vanilla安装中的多行。这些默认值可以与您的身份验证尝试条件相匹配,从而导致无法进行身份验证。无论在.conf文件末尾添加其他配置,它都会失败。
要检查使用哪一行配置,请确保查看消息的默认日志文件。你可能会看到这样的东西
1 2 3 | LOG: could NOT CONNECT TO Ident server at address"127.0.0.1", port 113: Connection refused FATAL: Ident authentication failed FOR USER"acme" DETAIL: Connection matched pg_hba.conf line 82:"host all all 127.0.0.1/32 ident" |
事实证明这个默认行导致拒绝。
1 | host ALL ALL 127.0.0.1/32 ident |
尝试评论出来。
如果您已完成所有这些但仍然无效,请检查该用户的到期日期:
Postgres密码验证失败
在我的情况下,解决方案在这里:(对于有关人员)
登录postgres:
1 2 3 | sudo -i -u postgres psql ALTER USER postgres WITH PASSWORD 'postgres'; # TYPE your password here |
问候
一个黑客就是编辑pg_hba.conf
1 | sudo vi /etc/postgresql/9.3/main/pg_hba.conf |
暂时
1 2 | # DATABASE administrative login BY Unix DOMAIN socket LOCAL ALL postgres trust |
此时你已经完成了。为了安全起见,那就去吧
1 2 | sudo -u postgres psql template1 ALTER USER postgres WITH encrypted password 'your_password'; |
然后返回并将pg_hba.conf设置回
1 2 | # DATABASE administrative login BY Unix DOMAIN socket LOCAL ALL postgres md5 |
对于fedora26和postgres9.6
首先,以root用户身份登录
然后通过以下命令进入psql
$ su postgres
然后键入$ psql
在psql中找到hba_file的位置==>表示pg_hba.conf
postgres = #show hba_file;
hba_file
/etc/postgresql/9.6/main/pg_hba.conf
(1排)
在文件pg_hba.conf中更改用户对此的访问权限
主持所有127.0.0.1/32 md5
我有类似的问题,我在pg_hba.conf中修复了它,即使对于IP6地址也删除了所有的身份识别方法(尽管我在机器上只有IP4)。
1 2 3 4 | host ALL ALL 127.0.0.1/32 password host ALL ALL ::1/128 password #for pgAdmin running at LOCAL network host ALL ALL 192.168.0.0/24 md5 |
在执行了以下操作之后,我有了相同的问题:在Ubuntu 12.04中进行Rails开发的PostgreSQL设置
我尝试了其他答案,但我所要做的就是:"config / database.yml"
1 2 3 4 5 6 7 | development: adapter: postgresql encoding: unicode DATABASE: (appname)_development pool: 5 username: (username you GRANTED appname DATABASE priviledges TO) password: |
如果您在CentOS上使用它,您可能需要在制定上述解决方案后重新加载postgres:
1 | systemctl restart postgresql-9.3.service |
这对我有用:
1 2 3 4 5 6 | LOCAL ALL postgres trust LOCAL ALL myapp_usr trust # IPv4 LOCAL connections: host ALL ALL 127.0.0.1/32 trust # IPv6 LOCAL connections: #host ALL ALL ::1/128 trust |