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

时间:2010-05-31 09:08:14

标签: postgresql

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

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

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

现在有人如何解决此问题?

23 个答案:

答案 0 :(得分:401)

以下步骤适用于在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

答案 1 :(得分:183)

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

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

答案 2 :(得分:152)

修改文件/etc/postgresql/8.4/main/pg_hba.conf并将identpeer替换为md5trust,具体取决于您是否要求密码你自己的电脑与否。 然后使用以下命令重新加载配置文件:

/etc/init.d/postgresql reload

答案 3 :(得分:78)

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

您一定要阅读19.1 Client Authentication中的PostgreSQL manual部分,以便更好地了解可用的身份验证设置(针对pg_hba.conf中的每条记录),但这里有相关的代码片段来帮助解决问题你有(来自version 9.5 manual):

  

<强>信任

     

无条件地允许连接。这种方法允许任何人   可以连接到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身份验证只能用于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节。

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

  1. 更改pg_hba.conf中定义的身份验证方法 归档到trustmd5password(取决于您的安全性) 您需要的本地连接记录 在那里定义。

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

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

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

答案 4 :(得分:44)

只需添加-h localhost位就可以了。

答案 5 :(得分:14)

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

答案 6 :(得分:13)

如果以上情况均不适合您:

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

host    all             all             ::1/128                 password

允许我成功登录。

答案 7 :(得分:10)

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

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 

答案 8 :(得分:10)

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

sudo apt-get install pidentd
sudo service postgresql restart

然后识别工作。

答案 9 :(得分:7)

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

中找到此文件
local   all             postgres                                peer
Should be

local   all             postgres                                md5

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

对等身份验证

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

密码验证

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

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

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

答案 10 :(得分:7)

嗯......

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

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

来自PostgreSQL: Documentation: 9.3: psql

  

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

如果您没有运行psql ... -h host_name ...之类的内容,并且您正在运行Ubuntu,那么psql应该通过Unix域套接字连接,因此PostgreSQL可能未配置为允许其中一个 postgres 用户的密码身份验证方法。

您可以通过运行以下来测试:

sudo -u postgres psql

如果上述方法有效,您的服务器可能已配置为 postgres 用户使用 peer 身份验证进行本地连接,即要求操作系统提供您的用户名以确认你是 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: Documentation: 9.3: The pg_hba.conf File [大胆强调我的]:

  

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

请注意,身份验证方法上的记录匹配。因此,如果您的 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 :(得分:6)

我在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 <db_name> -U <user_name> -W

答案 12 :(得分:4)

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

我认为pg_hba.conf中的身份验证配置顺序与您的情况相关。默认配置文件包含vanilla安装中的多行。这些默认值可以与您的身份验证尝试条件相匹配,从而导致无法进行身份验证。无论在.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

尝试将其评论出来。

答案 13 :(得分:4)

如果您已完成所有这些并且仍然无效,请检查该用户的到期日期:

Postgres password authentication fails

答案 14 :(得分:3)

围绕这个问题就是编辑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

答案 15 :(得分:2)

在我的情况下,解决方案在这里:(对于有关人员) 登录postgres:

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

问候

答案 16 :(得分:2)

对于fedora26和postgres9.6

首先,以root用户身份登录 然后通过以下命令输入psql $ su postgres
然后键入$ psql

在psql中找到hba_file的位置==&gt;意思是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

答案 17 :(得分:1)

我有类似的问题,我在 pg_hba.conf 中删除所有 ident 方法,即使对于IP6地址也是如此(尽管我机器上只有IP4)。 / p>

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

答案 18 :(得分:0)

在执行此操作后,我遇到了同样的问题:PostgreSQL setup for Rails development in Ubuntu 12.04

我尝试了其他答案,但所有我必须做的是:“config / database.yml”

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

答案 19 :(得分:0)

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

systemctl restart postgresql-9.3.service

答案 20 :(得分:0)

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

brew cask reinstall pgadmin4

答案 21 :(得分:0)

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

CREATE USER admin WITH PASSWORD 'secret'

然后在 cmd

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

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

enter image description here

答案 22 :(得分:-2)

这对我有用: 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