Answers:
您是否在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创建一个名为“ 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
。
编辑文件,/etc/postgresql/8.4/main/pg_hba.conf
然后用ident
或替换,或者peer
用md5
或替换trust
,这取决于您是否要在自己的计算机上要求输入密码。然后使用以下命令重新加载配置文件:
/etc/init.d/postgresql reload
restart
不是reload
-更改为/etc/postgresql/9.5/main/pg_hba.conf
(更改peer
为trust
)之后。
由于客户端身份验证失败,因此出现此错误。根据错误消息,您可能具有默认的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节。
因此...要解决您遇到的问题,可以执行以下操作之一:
改变你所定义的身份验证方法(或多个)pg_hba.conf
文件trust
,md5
或password
(取决于您的安全和简单的需求)为你在那里定义的本地连接的记录。
更新pg_ident.conf
以将您的操作系统用户映射到PostgreSQL用户,并根据需要为他们授予相应的访问权限。
保留IDENT设置,并在数据库中为您要授予访问权限的每个操作系统用户创建用户。如果用户已经通过操作系统进行身份验证并登录,则PostgreSQL将不需要进一步的身份验证,并将根据数据库中为其分配的任何特权(角色)向该用户授予访问权限。这是默认配置。
注:的位置pg_hba.conf
和pg_ident.conf
与操作系统相关。
/etc/postgresql/9.6/main/pg_hba.conf
。
简单地添加-h localhost
一点是我工作所需的全部
this_computer = 'http://localhost'
您可以设置环境变量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
允许我成功登录。
在以上所有答案中,没有任何一项对我有用。我必须手动更改数据库中的用户密码,但该密码突然起作用了。
psql -U postgres -d postgres -c "alter user produser with password 'produser';"
我使用了以下设置:
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
则这两个程序可能以不同的方式连接至数据库。
[如果要连接到其他数据库,请先尝试连接到同一数据库。见下文。]
如果省略主机名,则psql将通过Unix域套接字连接到本地主机上的服务器,或者通过TCP / IP连接到没有Unix域套接字的计算机上的localhost。
如果您没有运行psql ... -h host_name ...
,而您正在运行Ubuntu,psql
则应通过Unix域套接字进行连接,因此PostgreSQL可能未配置为允许postgres用户使用一种密码验证方法。
您可以通过运行以下命令进行测试:
sudo -u postgres psql
如果上述方法可行,则您的服务器可能已配置为使用postgres用户的对等身份验证进行本地连接,即要求操作系统提供您的用户名以确认您是postgres。
文件的完整路径将类似于 /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
。如果不确定该放在哪里,只需将其放在第一条未注释的行之前。
来自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!
问题仍然是您的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.
对于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
我在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
如果您已完成所有操作,但仍然无法使用,请检查该用户的有效期:
我花了更多时间解决我很想承认的错误。
我认为,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
尝试将其注释掉。
解决这个问题的一种方法是编辑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
在执行以下操作后,我遇到了相同的问题:在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:
如果在CentOS上使用它,则在完成上述解决方案后可能需要重新加载postgres:
systemctl restart postgresql-9.3.service
postgresql
systemctl status | grep postgres
这对我有用: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