psql:严重:用户“ postgres”的身份验证失败

2010-05-31 postgresql

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

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

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

现在有人解决这个问题吗?

Answers

您是否在pg_hba.conf中设置了正确的设置?

请参阅https://help.ubuntu.com/stable/serverguide/postgresql.html如何进行。

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

/etc/init.d/postgresql reload

以下步骤适用于在Ubuntu 12.04上全新安装Postgres 9.1。 (在Ubuntu 14.04上也适用于Postgres 9.3.9。)

默认情况下,postgres创建一个名为“ postgres”的用户。我们以她的身份登录,并为她提供密码。

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

通过输入\qctrl+d注销psql 。然后我们连接为“ postgres”。 -h localhost部分很重要 :它告诉psql客户端,我们希望使用TCP连接(配置为使用密码身份验证)进行连接,而不希望通过PEER连接(不关心密码)进行连接。

$ psql -U postgres -h localhost

如果您已完成所有操作,但仍然无法使用,请检查该用户的有效期:

Postgres密码验证失败

我发现我必须安装一个身份服务器,该服务器侦听端口113。

sudo apt-get install pidentd
sudo service postgresql restart

然后ident工作了。

只需添加-h localhost位即可正常工作

在Mac OS X的bash shell上的PostgreSQL 9.3上,我的解决方案是使用sudo进入data文件夹,然后将必要的行附加到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 <db_name> -U <user_name> -W

在执行以下操作后,我遇到了相同的问题: 在Ubuntu 12.04中进行Rails开发的PostgreSQL设置

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

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

由于客户端身份验证失败,因此出现此错误。根据错误消息,您可能具有默认的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服务器,并检查它是否与请求的相匹配 数据库用户名。身份验证只能在TCP / IP上使用 连接。为本地连接指定时,对等身份验证 将改为使用。有关详细信息,请参见第19.3.5节。

同伴

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

ldap

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

半径

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

证书

使用SSL客户端证书进行身份验证。请参阅第19.3.9节 细节。

m

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

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

  1. 更改您的pg_hba.conf定义的身份验证方法 文件以trustmd5password (取决于您的安全性) 和简单性需求)用于您拥有的本地连接记录 在那里定义。

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

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

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

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

如果以上都不适合您:

我已经完成了许多Postgres安装,但是今天却在RedHat 6.5系统(安装Postgres 9.3)上感到困惑。我上面显示的Aron典型的hba.conf配置不起作用。原来,我的系统使用的是IPV6,却忽略了IPV4的配置。添加行:

host    all             all             ::1/128                 password

允许我成功登录。

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

local   all             postgres                                peer
Should be

local   all             postgres                                md5

这些是根据官方PostgreSQL文档中有关身份验证方法的两个选项的简要说明。

对等身份验证

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

密码认证

基于密码的身份验证方法为md5和password。除了通过连接发送密码的方式(分别为MD5哈希和明文)外,这些方法的操作方式相似。

如果您完全担心密码“嗅探”攻击,则首选md5。如果可能,应始终避免使用纯密码。但是,md5不能与db_user_namespace功能一起使用。如果连接受SSL加密保护,则可以安全地使用密码(尽管SSL证书身份验证取决于使用SSL可能是更好的选择)。

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

解决此问题的一种方法是编辑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

我花了更多时间解决这个我很想承认的错误。

我认为,pg_hba.conf中身份验证配置的顺序与您的情况相关。默认配置文件在原始安装中包括几行。这些默认值可以匹配导致身份验证失败的身份验证尝试的条件。无论.conf文件末尾添加了其他配置如何,它都会失败。

要检查使用哪一行配置,请确保查看默认的日志文件中的消息。您可能会看到类似这样的内容

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"

事实证明,此默认行导致了拒绝。

host    all             all             127.0.0.1/32            ident

尝试将其注释掉。

嗯...

如果您可以使用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查看它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!

在以上所有答案中,没有任何一项对我有用。我不得不手动更改数据库中的用户密码,但该密码突然起作用了。

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 

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

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

这为我工作: 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

如果在CentOS上使用它,则在完成上述解决方案后可能需要重新加载postgres:

systemctl restart postgresql-9.3.service

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

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

问候

对于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 row)  

在文件pg_hba.conf更改对此用户的访问权限

host all all 127.0.0.1/32 md5

我必须重新安装pdAdmin才能解决此问题

brew cask reinstall pgadmin4

对于Windows,如果您不想编辑pb_gba.conf,即将方法保留为MD5(默认),请通过在PGadmin的查询工具中运行此查询来创建新用户 PG管理员

CREATE USER admin WITH PASSWORD 'secret'

然后在cmd中

psql "dbname=Main_db host=127.0.0.1 user=admin password=secret port=5432

其中dbname是您在PostgreSQL中的数据库

在此处输入图片说明

Related