psql:FATAL:用户“postgres”的身份validation失败

我在Ubuntu Karmic盒子上安装了PostgreSQL和pgAdminIII。

我能够成功地使用pgAdminIII(即连接/login),但是当我尝试使用相同的用户名/密码在命令行(使用psql)login到服务器时,我得到的错误:

psql: FATAL: Ident authentication failed for user "postgres" 

现在有人如何解决这个问题?

你在pg_hba.conf中设置了正确的设置吗?

https://help.ubuntu.com/stable/serverguide/postgresql.html如何做到这一点。;

以下步骤适用于Ubuntu 12.04上新安装的postgres 9.1。 (也在Ubuntu 14.04上为postgres 9.3.9工作。)

默认情况下,postgres创build一个名为“postgres”的用户。 我们以她的身份login,并给她一个密码。

 $ sudo -u postgres psql \password Enter password: ... ... 

通过input\qctrl+d注销psql 。 然后我们连接成'postgres'。 -h localhost部分很重要 :它告诉psql客户端我们希望使用TCP连接(configuration为使用密码authentication)而不是通过PEER连接(不关心密码)来连接。

 $ psql -U postgres -h localhost 

编辑/etc/postgresql/8.4/main/pg_hba.conf文件,并用md5trustreplaceidentpeer ,具体取决于是否要在自己的计算机上询问密码。 然后重新加载configuration文件:

 /etc/init.d/postgresql reload 

您收到此错误,因为您的客户端身份validation失败。 根据错误消息,您可能拥有默认的postgresconfiguration,它将客户端身份validation方法设置为所有PostgreSQL连接的“IDENT”。

您应该阅读PostgreSQL手册中的第19.1节“ 客户端authentication” ,以更好地理解可用的authentication设置(针对pg_hba.conf中的每个logging),但是这里有相关的代码片段来帮助解决您遇到的问题(从版本9.5手册 ):

相信

无条件地允许连接。 这种方法允许任何能够连接到PostgreSQL数据库服务器的用户以任何他们希望的PostgreSQL用户身份login,而不需要密码或任何其他身份validation。 细节见第19.3.1节。

拒绝

无条件拒绝连接。 这对于从组中过滤某些主机非常有用,例如,拒绝行可以阻止特定的主机连接,而后面的行允许连接特定networking中的其余主机。

MD5

要求客户端提供双MD5哈希密码进行身份validation。 细节见第19.3.2节。

密码

要求客户端提供未encryption的密码进行身份validation。 由于密码通过networking以明文forms发送,因此不应在不受信任的networking上使用。 细节见第19.3.2节。

GSS

使用GSSAPI来authentication用户。 这仅适用于TCP / IP连接。 细节见第19.3.3节。

SSPI

使用SSPI来validation用户。 这仅在Windows上可用。 细节见第19.3.4节。

IDENT

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

窥视

从操作系统获取客户端的操作系统用户名,并检查它是否与请求的数据库用户名匹配。 这只适用于本地连接。 细节见第19.3.6节。

LDAP

使用LDAP服务器进行身份validation。 细节见第19.3.7节。

半径

使用RADIUS服务器进行身份validation。 细节见第19.3.8节。

证书

使用SSL客户端证书进行身份validation。 细节见第19.3.9节。

PAM

使用操作系统提供的可插入身份validation模块(PAM)服务进行身份validation。 细节见第19.3.10节。

所以…要解决您遇到的问题,您可以执行以下操作之一:

  1. 将您在pg_hba.conf文件中定义的身份validation方法更改为您在其中定义的本地连接logging的trustmd5password (取决于您的安全性和简单性需求)。

  2. 更新pg_ident.conf将您的操作系统用户映射到PostgreSQL用户,并根据您的需要授予他们相应的访问权限。

  3. 单独保留IDENT设置,并为您希望授予访问权限的每个操作系统用户在数据库中创build用户。 如果用户已被操作系统authentication并login,PostgreSQL将不需要进一步的身份validation,并且将根据在数据库中为其分配的任何特权(angular色)授予对该用户的访问权限。 这是默认configuration。

注意: pg_hba.confpg_ident.conf的位置取决于操作系统。

简单地添加-h localhost位是我的工作所需

你可以设置环境variablesPGHOST=localhost

 $ 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: 

我发现我不得不安装身份服务器,在端口113上进行侦听。

 sudo apt-get install pidentd sudo service postgresql restart 

然后ident工作。

如果以上都不适合你:

我已经完成了很多Postgres安装,但今天在RedHat 6.5系统上安装了Postgres 9.3。 Aron在上面显示的典型hba.confconfiguration不起作用。 事实certificate,我的系统正在使用IPV6,而忽略了IPV4configuration。 添加行:

 host all all ::1/128 password 

允许我成功login。

问题仍然是你的pg_hba.conf文件。 这一行:你可以在/ etc / postgres / varion / main中find这个文件

 local all postgres peer Should be local all postgres md5 

这些是根据关于authentication方法的官方PostgreSQL文档的两个选项的简要说明。

同行authentication

对等身份validation方法的工作原理是从内核获取客户端的操作系统用户名,并将其用作允许的数据库用户名(可选用户名映射)。 此方法仅在本地连接上受支持。

密码authentication

基于密码的身份validation方法是md5和密码。 除了通过连接发送密码的方式,这些方法的操作类似,分别是MD5哈希和纯文本。

如果你关心密码“嗅探”攻击,那么md5是首选。 如果可能,应始终避免使用简单密码。 但是,md5不能与db_user_namespacefunction一起使用。 如果连接受到SSLencryption的保护,则可以安全地使用密码(但如果使用SSL,SSL证书authentication可能是更好的select)。

修改此文件后,不要忘记重新启动PostgreSQL服务器。 如果你在Linux上,这将是sudo service postgresql restart.

我在bash shell的Mac OSX上的PostgreSQL 9.3上的解决scheme是使用sudo进入数据文件夹,然后将必要的行添加到pg_hba.conf文件中,以允许所有用户被信任并能够login。是我所做的:

 # 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 

上面的所有答案都没有为我工作。 我不得不手动更改数据库中的用户密码,它突然工作。

 psql -U postgres -d postgres -c "alter user produser with password 'produser';" 

我使用了以下设置:

的pg_hba.conf

 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 

最后连接成功为以下命令:

 psql -U produser -d dbname -h localhost -W 

嗯…

如果你可以用pgAdminIII中的用户名和密码连接,但是你不能用psql连接,那么这两个程序可能连接到不同的数据库。

[如果你连接到不同的数据库,首先尝试连接到同一个数据库。 见下文。]

来自PostgreSQL:文档:9.3:psql :

如果省略主机名,psql将通过Unix域套接字连接到本地主机上的服务器,或者通过TCP / IP连接到没有Unix域套接字的机器上的本地主机。

如果你没有运行像psql ... -h host_name ...这样的东西,而且你运行的是Ubuntu,那么psql应该通过一个Unix域套接字来连接,所以PostgreSQL可能没有configuration成允许一个密码postgres用户的身份validation方法。

你可以通过运行来testing这个:

sudo -u postgres psql

如果以上的工作,你的服务器可能被configuration为使用对等身份validation的本地连接由postgres用户,即要求操作系统的用户名,以确认你是postgres

所以这可能是你的pg_hba.conf文件

该文件的完整path将类似于 /etc/postgresql/9.3/main/pg_hba.conf 。 你可以查看它,例如sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more

如果在psql命令中省略了主机名,那么如果将以下条目添加到pg_hba.conf文件中,则应该能够进行连接:

 # Connection type Database User IP addresses Method local all postgres md5 

[ pg_hba.conf文件中的注释行以#开头]。

如果您在psql命令包含主机名,请添加以下条目:

 # Connection type Database User IP addresses Method host all postgres 127.0.0.1/32 md5 

您需要在通过psql连接任何其他条目之前将条目放入。 如果不确定放在哪里,就把它放在第一个未评论的行之前。

更多关于pg_hba.conf

来自PostgreSQL:文档:9.3:pg_hba.conf文件 [大胆强调我的]:

具有匹配的连接types客户端地址请求的数据库用户名的第一个logging用于执行身份validation。 没有“落后”或“备份”:如果select了一条logging,authentication失败,则不考虑后续logging。 如果没有logging匹配,访问被拒绝。

请注意,logging在身份validation方法上匹配。 因此,如果您的pg_hba.conf文件包含以下条目:

 # Connection type Database User IP addresses Method local all postgres peer 

那么你将无法通过以下方式连接:

psql -u postgres

除非这些条目之一在您之前的条目之上pg_hba.conf文件中:

 # 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! 

如果您已经完成了这一切,但仍然无效,请检查该用户的到期date:

Postgres密码authentication失败

我花了更多的时间来解决这个我不愿意承认的错误。

pg_hba.conf中的身份validationconfiguration顺序与您的情况相关。 默认的configuration文件在一个香草安装包括几行。 这些默认值可以与您的身份validation尝试的条件相匹配,从而导致身份validation失败。 无论在.conf文件末尾添加额外的configuration,它都会失败。

要检查使用哪一行configuration,请确保查看消息的默认日志文件。 你可能会看到像这样的东西

 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" 

事实certificate,这个默认行是导致拒绝。

 host all all 127.0.0.1/32 ident 

尝试发表评论。

一个绕过这个是编辑pg_hba.conf

 sudo vi /etc/postgresql/9.3/main/pg_hba.conf 

暂时

 # Database administrative login by Unix domain socket local all postgres trust 

此时你已经完成了。 为了安全,然后去

 sudo -u postgres psql template1 ALTER USER postgres with encrypted password 'your_password'; 

然后返回并设置pg_hba.conf

 # Database administrative login by Unix domain socket local all postgres md5 

我有类似的问题,当我删除所有的ident方法,即使IP6地址(尽pipe我只有在机器上的IP4),我修复了pg_hba.conf

 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 

在我的情况下,解决方法在这里:(对于有关的人)login到postgres:

 sudo -i -u postgres psql ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here 

问候

在遵循这个之后,我有同样的问题: PostgreSQL安装在Ubuntu 12.04中的Rails开发

我尝试了其他的答案,但我只需要在“config / database.yml”

 development: adapter: postgresql encoding: unicode database: (appname)_development pool: 5 username: (username you granted appname database priviledges to) password: 

如果你在CentOS上使用它,你可能需要重新加载postgres上面的解决scheme后:

 systemctl restart postgresql-9.3.service 

对于fedora26和postgres9.6

首先,以root用户身份login
然后通过以下命令进入psql
$ su postgres
然后input$ psql

在psql中findhba_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

这对我工作: http : //tecadmin.net/fatal-ident-authentication-failed-for-user-postgres/#

 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