当前位置:  开发笔记 > 编程语言 > 正文

psql:致命:用户"postgres"的身份验证失败

如何解决《psql:致命:用户"postgres"的身份验证失败》经验,为你挑选了14个好方法。

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

我能够成功使用pgAdminIII(即连接/登录),但是当我尝试使用命令行上的相同用户名/ pwd登录服务器时(使用psql),我收到错误:

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

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



1> Manav..:

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

默认情况下,postgres会创建一个名为"postgres"的用户.我们以她身份登录,并给她一个密码.

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

psql通过键入\q或注销退出ctrl+d.然后我们连接为'postgres'.该-h localhost部分很重要:它告诉psql客户端我们希望使用TCP连接(配置为使用密码验证)进行连接,而不是通过PEER连接(不关心密码)进行连接.

$ psql -U postgres -h localhost


如果设置`PGHOST = localhost`,则不需要每次都指定`-h`选项.这也适用于其他`pg_*`命令,例如`pg_dump`.
这是使用PostgreSQL在Debian上安装Mediawiki所必需的.

2> Frank Heiken..:

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

请参阅https://help.ubuntu.com/stable/serverguide/postgresql.html如何操作.


@SeanA你需要像'sudo -u postgres psql'这样的东西
@Robert:"postgresql是用户最不友好的数据库"?有一天尝试使用Oracle来获得一些观点...... :)
这对我不起作用.我花了好几个小时!我想要做的就是在终端中运行psql命令.我需要做什么使文件看起来像这样做?
别忘了';' 在psql的每个语句的末尾.听起来很傻,但它发生了嘿嘿.
对于那些使用rails的人,我必须设置pg_hba.conf,并将'ident'更改为'password'.将其更改为信任不起作用.
为什么是,我确实阅读了精美的手册,但是一点也没有帮助。它没有提及该错误,也没有提及如何解决。
我不得不将PEER更改为md5,因为我不是linux中的postgres用户.使用md5,只要提供正确的密码,任何人都可以登录为postgres用户.如果你首先将自己设置为postgres linux用户,它也有效,就像@JLarky所说的那样.
@mivk我尽量避免使用大型企业产品.他们通常不是很友好:-)

3> 小智..:

编辑文件/etc/postgresql/8.4/main/pg_hba.conf并替换identpeer使用md5trust取决于您是否希望它在您自己的计算机上要求输入密码.然后重新加载配置文件:

/etc/init.d/postgresql reload


为什么在重新加载时需要重新启动?
一个命令重启postgresql:/etc/init.d/postgresql restart

4> Haig Bedrosi..:

您收到此错误是因为您的客户端身份验证失败.根据错误消息,您可能具有默认的postgres配置,该配置将所有PostgreSQL连接的客户端身份验证方法设置为"IDENT".

您一定要阅读PostgreSQL手册中的第19.1节" 客户端身份验证",以便更好地了解可用的身份验证设置(对于pg_hba.conf中的每条记录),但这里有相关的代码片段来帮助解决您遇到的问题(来自9.5版手册)):

信任

允许无条件连接.此方法允许任何可以连接到PostgreSQL数据库服务器的人以他们希望的任何PostgreSQL用户身份登录,而无需密码或任何其他身份验证.有关详细信息,请参见第19.3.1节.

拒绝

无条件拒绝连接.这对于从组中"过滤掉"某些主机非常有用,例如,拒绝行可能会阻止特定主机连接,而后续行允许特定网络中的其余主机进行连接.

MD5

要求客户端提供双MD5哈希密码以进行身份​​验证.有关详细信息,请参见第19.3.2节.

密码

要求客户端提供未加密的密码以进行身份​​验证.由于密码是通过网络以明文形式发送的,因此不应在不受信任的网络上使用.有关详细信息,请参见第19.3.2节.

GSS

使用GSSAPI对用户进行身份验证.这仅适用于TCP/IP连接.有关详细信息,请参见第19.3.3节.

SSPI

使用SSPI对用户进行身份验证.这仅适用于Windows.有关详细信息,请参见第19.3.4节.

IDENT

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

窥视

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

LDAP

使用LDAP服务器进行身份验证.有关详细信息,请参见第19.3.7节.

半径

使用RADIUS服务器进行身份验证.有关详细信息,请参见第19.3.8节.

证书

使用SSL客户端证书进行身份验证 有关详细信息,请参见第19.3.9节.

PAM

使用操作系统提供的可插入身份验证模块(PAM)服务进行身份验证.有关详细信息,请参见第19.3.10节.

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

    改变你所定义的验证方法(S)pg_hba.conf 到文件trust,md5password(取决于您的安全和简单的需求)为你在那里定义的本地连接的记录.

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

    保留IDENT设置,并为您要授予访问权限的每个操作系统用户在数据库中创建用户.如果用户已经通过操作系统进行身份验证并登录,则PostgreSQL将不需要进一步的身份验证,并将根据在数据库中为其分配的任何权限(角色)授予对该用户的访问权限.这是默认配置.

注:的位置pg_hba.confpg_ident.conf与操作系统相关.


对我来说,这是最好的答案.当您了解所有这些选项后,您可以轻松调整conf.特别是当您使用Dev机器时,您只需为所有条目设置"ident"即可避免浪费您的时间.谢谢

5> boulder_ruby..:

只需添加-h localhost钻头就可以了



6> 小智..:

您可以设置环境变量PGHOST=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:



7> Ethan Brown..:

如果以上都不适合你:

我已经做了很多Postgres安装,但今天在RedHat 6.5系统上安装了(安装Postgres 9.3).我在Aron上面显示的典型hba.conf配置不起作用.事实证明我的系统正在使用IPV6,而忽略了IPV4配置.添加行:

host    all             all             ::1/128                 password

允许我成功登录



8> Joseph Persi..:

在上述所有答案中,对我来说没有任何作用.我不得不手动更改数据库中的用户密码,它突然工作了.

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 



9> Dustin Kirkl..:

我发现我必须安装一个侦听端口113的身份服务器.

sudo apt-get install pidentd
sudo service postgresql restart

然后识别工作.



10> Kenny Evitt..:
嗯......

如果您可以使用pgAdminIII中的用户名和密码进行连接,但无法连接,psql那么这两个程序可能会以不同方式连接到数据库.

[如果要连接到不同的数据库,请先尝试连接到同一个数据库.见下文.]

来自PostgreSQL:文档:9.3:psql:

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

如果您没有运行类似的东西psql ... -h host_name ...,并且您正在运行Ubuntu,则psql应该通过Unix域套接字进行连接,因此PostgreSQL可能未配置为允许postgres用户使用其中一种密码身份验证方法.

您可以通过运行来测试:

sudo -u postgres psql

如果上述方法有效,您的服务器可能配置为使用postgres用户进行本地连接的对等身份验证,即要求操作系统确认您的用户名以确认您是postgres.

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

该文件的完整路径类似于 /etc/postgresql/9.3/main/pg_hba.conf.你可以通过例如查看它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文件 [大胆强调我的]:

具有匹配的连接类型,客户端地址,请求的数据库用户名的第一个记录用于执行身份验证.没有"直通"或"备份":如果选择了一条记录且认证失败,则不考虑后续记录.如果没有记录匹配,则拒绝访问.

请注意,记录与身份验证方法匹配.因此,如果您的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!



11> Suneel Kumar..:

问题仍然是你的pg_hba.conf文件.这一行:您可以在/ etc/postgres/varion/main中找到此文件

local   all             postgres                                peer
Should be

local   all             postgres                                md5

这些是根据官方PostgreSQL文档关于身份验证方法的两个选项的简要描述.

对等身份验证

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

密码验证

基于密码的身份验证方法是md5和密码.除了通过连接发送密码的方式外,这些方法的操作类似,分别是MD5散列和明文.

如果你完全担心密码"嗅探"攻击,那么首选md5.如果可能,应始终避免使用普通密码.但是,md5不能与db_user_namespace功能一起使用.如果连接受SSL加密保护,则可以安全地使用密码(但如果依赖于使用SSL,则SSL证书身份验证可能是更好的选择).

更改此文件后,请不要忘记重新启动PostgreSQL服务器.如果你在Linux上,那就是sudo service postgresql restart.



12> 小智..:

就我而言,这里的解决方案:(对于相关人员)登录到postgres:

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

问候



13> Aaron Lelevi..:

我在bash shell中Mac OSX上的PostgreSQL 9.3上的解决方案sudo用于进入数据文件夹,然后将必要的行追加到pg_hba.conf文件中以允许所有用户都被信任并能够登录.这就是我所做的:

# 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  -U  -W



14> mohsen.nour..:

对于fedora26和postgres9.6

首先,以root用户身份登录,
然后通过以下命令
$ su postgres 输入psql,
然后键入$ 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

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有