psql: FATAL: identity authentication failed for user " postgresquot;

我已经在我的Ubuntu karma box上安装了PostgreSQL和pgAdminIII。

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

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

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

864853 次浏览

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

参见https://ubuntu.com/server/docs/databases-postgresql如何做到这一点。

编辑文件/etc/postgresql/8.4/main/pg_hba.conf并将identpeer替换为md5trust,这取决于你是否想让它在你自己的计算机上询问密码。 然后重新加载配置文件:

/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

然后身份就起作用了。

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

我在Mac OSX的PostgreSQL 9.3上的解决方案是在bash shell中使用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

我有同样的问题后,遵循这个:在Ubuntu 12.04中为Rails开发设置PostgreSQL

我尝试了其他答案,但所有我要做的是:“配置/形式”

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 Client Authentication . 19.1 Client Authentication .部分,以更好地理解可用的身份验证设置(对于pg_hba.conf中的每条记录),但下面是相关的片段,以帮助解决你遇到的问题(来自9.5版本手册):

信任

无条件允许连接。这个方法允许任何人 可以连接到PostgreSQL数据库服务器登录任何 PostgreSQL用户,不需要密码或任何 其他身份验证。

. sh

. sh

. sh

拒绝

无条件拒绝连接。这对于“过滤”很有用 将某些主机从组中排除,例如拒绝线可能阻塞 一个特定的主机从连接,而后面的行允许

.

.

.

md5

要求客户端提供一个双md5哈希密码 身份验证。

.

.

.

密码

要求客户端提供未加密的密码 身份验证。由于密码是以明文形式通过 网络,不应该在不受信任的网络上使用。参见

gss

使用GSSAPI认证用户。这只适用于TCP/IP 连接。

. sh

. sh

. sh

sspi

使用SSPI认证用户。这只在Windows上可用。

. sh

. sh

. sh

. sh

鉴别

客户端操作系统用户名 在客户端上识别服务器并检查它是否与请求匹配 数据库用户名。身份认证只能在TCP/IP协议上使用 连接。当指定为本地连接时,对端验证 将被使用。

. sh

. sh

. sh

. sh

同行

客户端操作系统用户名 系统检查它是否与请求的数据库用户名匹配。这 仅对本地连接可用。参见19.3.6节 细节。< / p >

ldap

使用LDAP服务器进行认证。详见19.3.7节。

半径

使用RADIUS服务器进行身份验证。详见19.3.8节。

cert

使用SSL客户端证书进行认证。参见19.3.9节 细节。< / p >

帕姆

使用PAM服务进行身份验证 由操作系统提供。

. sh

. sh

. sh

所以…要解决您正在经历的问题,您可以执行以下操作之一:

  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/ vary /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域套接字连接到本地主机上的服务器,或者在没有unix域套接字的机器上通过TCP/IP连接到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的更多信息

来自9.3: pg_hba.conf文件[粗体强调mine]:

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

注意记录是在认证方法上匹配的。因此,如果你的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

我有类似的问题,我在pg_hba.conf中修复了它,当删除所有鉴别方法时,即使是IP6地址(尽管我在机器上只有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/# < / p >
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中find location of 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的查询工具中通过运行此查询创建一个新用户 PGadmin < / >强

CREATE USER admin WITH PASSWORD 'secret'

然后在cmd

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

哪里dbname是你的db在postgresql

enter image description here

关于PostgreSQL安装的配置问题:

在下面提到的conf文件中配置# TYPE数据库用户地址方法部分

查找并编辑/var/lib/pgsql/10/data/pg_hba.conf或根据您的文件位置更新方法(md5)。如果你的配置中不存在,更新文件中的条目,如下所示:

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only
local   all             all                                     trust
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             0.0.0.0/0            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

在下面提到的conf文件中配置连接和验证部分

查找和编辑/var/lib/pgsql/10/data/postgresql.conf或根据您的文件位置 更新监听地址和端口

listen_addresses = '*' // # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
port = 5432 // Set port as 5432

重新启动PostgreSQL:

sudo systemctl restart postgresql-10 # Update service name based on your installation

我在GCP SQL中通过terraform提供了用户名和密码,问题是密码没有通过terraform正确设置,所以虽然不是一个适当的修复,但只是为了找出确切的原因。

我从GCP控制台更改了用户的密码,这是有效的。