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\q
或ctrl+d
注销psql
。 然后我们连接成'postgres'。 -h localhost
部分很重要 :它告诉psql
客户端我们希望使用TCP连接(configuration为使用密码authentication)而不是通过PEER连接(不关心密码)来连接。
$ psql -U postgres -h localhost
编辑/etc/postgresql/8.4/main/pg_hba.conf
文件,并用md5
或trust
replaceident
或peer
,具体取决于是否要在自己的计算机上询问密码。 然后重新加载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节。
所以…要解决您遇到的问题,您可以执行以下操作之一:
-
将您在
pg_hba.conf
文件中定义的身份validation方法更改为您在其中定义的本地连接logging的trust
,md5
或password
(取决于您的安全性和简单性需求)。 -
更新
pg_ident.conf
将您的操作系统用户映射到PostgreSQL用户,并根据您的需要授予他们相应的访问权限。 -
单独保留IDENT设置,并为您希望授予访问权限的每个操作系统用户在数据库中创build用户。 如果用户已被操作系统authentication并login,PostgreSQL将不需要进一步的身份validation,并且将根据在数据库中为其分配的任何特权(angular色)授予对该用户的访问权限。 这是默认configuration。
注意: pg_hba.conf
和pg_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