我得到一个错误:
FATAL: Peer authentication failed for user "postgres"
当我试图让postgres使用rails时。
这是我的 pg_hba.conf
,我的 database.yml
,以及一堆完整的痕迹。
我在pgèhba中将身份验证更改为md5,并尝试了不同的方法,但似乎都不起作用。
我还尝试根据Rails3.2创建一个新用户和数据库,致命错误:用户的对等身份验证失败(pg::error)
但他们不会出现在pgadmin上,甚至在我跑步的时候 sudo -u postgres psql -l
.
知道我哪里出错了吗?
19条答案
按热度按时间o2g1uqev1#
我在克隆服务器上移动数据目录,登录postgres时遇到问题。像这样重新设置postgres密码对我很有效。
llmtgqce2#
许多其他答案与各种配置文件中的设置有关,也与
pg_hba.conf
一定要申请并且100%正确。但是,请确保您正在修改正确的配置文件。正如其他人提到的,可以使用主配置文件中的各种设置覆盖配置文件位置,还可以使用
-D
选项。在psql会话中,可以使用以下命令来显示正在读取配置文件的位置(假设可以启动psql)。这只是一个故障排除步骤,可以帮助一些人:
您还应该确保postgres用户的主目录是您期望的位置。我这么说
kxeu7u2r3#
请按照以下步骤操作
1). 首先,导航到/etc/postgresql/{your pg version}/main目录。
我的版本是10那么:
2). 这里驻留pg_hba.conf文件需要做一些更改这里可能需要sudo访问。
3). 向下滚动文件,直到找到
4). 这里将peer更改为md5,如下所示。
peer意味着它将信任unix用户的真实性,因此不信任
提示输入密码。md5意味着它将始终请求密码,并在使用md5散列后验证密码。
5) 。现在保存文件并重新启动postgres服务器。
现在应该没事了。
wgeznvg74#
pgïu config是用于兼容信息的,用于帮助扩展和客户端程序编译并链接到postgresql。它对机器上活动的postgresql示例一无所知,只知道二进制文件。
pg_hba.conf可以出现在许多其他地方,具体取决于pg的安装方式。标准位置是数据库的data目录中的pg_hba.conf(可以在/home、/var/lib/pgsql、/var/lib/postgresql/[version]/、/opt/postgres/等中),但是用户和打包程序可以将其放在任何他们喜欢的地方。很不幸。
找到pgèhba.conf的唯一有效方法是询问正在运行的postgresql示例pgèhba.conf在哪里,或者询问sysadmin它在哪里。您甚至不能依赖于询问datadir在哪里并解析postgresql.conf,因为init脚本在启动pg时可能会传递一个参数,比如-c hba_file=/some/other/path。
您要做的是询问postgresql:
此命令必须在超级用户会话上运行,因此对于shell脚本,您可以编写如下内容:
并设置环境变量pguser、pgdatabase等,确保连接正确。
是的,这有点像鸡和蛋的问题,因为如果用户无法连接(比如,在编辑pg_hba.conf时出错),就找不到pg_hba.conf来修复它。
另一种方法是查看ps命令的输出,并查看postmaster data directory参数-d是否可见。
因为pg_hba.conf将位于数据目录中(除非您使用的是debian/ubuntu或其他派生版本并使用它们的软件包)。
如果你专门针对安装了debian/ubuntu软件包的postgresql的ubuntu系统,那就容易多了。您不必处理从源pg手工编译的数据,比如某人的initdb在其home dir中为其安装了datadir,或者enterprisedb pg install in/opt等等。您可以询问pg\u wrapper,debian/ubuntu多版本pg管理器,postgresql正在使用pg\u wrapper中的pg\u lsclusters命令。
如果无法连接(pg没有运行,或者需要编辑pgèhba.conf才能连接),则必须在系统中搜索pgèhba.conf文件。在mac和linux上,sudo find/-typef-name pg\u hba.conf之类的东西就可以了。然后检查同一目录中的pgèu版本文件,如果您有多个postgresql版本,请确保它是正确的postgresql版本(如果pg_hba.conf在/etc/中,忽略它,它是父目录名)。如果同一个postgresql版本有多个数据目录,则必须查看数据库大小,检查从ps运行postgres的命令行,以查看它的data directory-d参数是否与正在编辑的位置匹配,等等。https://askubuntu.com/questions/256534/how-do-i-find-the-path-to-pg-hba-conf-from-the-shell/256711
uidvcgyl5#
您只需将方法设置为信任。
重新加载postgres服务器。
pg_hba.conf中的更改不需要重新启动postgres服务器。重新装弹。
2sbarzqh6#
以下命令适用于我:
vfhzx4xs7#
使用
host=localhost
与此相关。ppcbkaq58#
将pgèhba.conf(/etc/postgresql/9.1/main/pgèhba.conf | line 85)中的方法peer更改为trust可以解决这个问题。添加md5需要密码,因此如果需要避免使用密码,请使用trust而不是md5。
cnh2zyt39#
上面的编辑对我来说很有用,因为我发现我需要在完成后重新启动postgres服务器。对于ubuntu:
muk1a3rh10#
如果要保留默认配置,但要对一个特定用户/db连接使用套接字连接进行md5身份验证,请在“local all/all”行之前添加“local”行:
xt0899hw11#
问题还是你的
pg_hba.conf
文件(/etc/postgresql/9.1/main/pg_hba.conf*
).这条线:
应该是:
locate pg_hba.conf
应该告诉你文件在哪里。更改此文件后,不要忘记重新启动postgresql服务器。如果你使用的是linux,那就是
sudo service postgresql restart
.根据postgresql官方的认证方法文档,这两个选项都有简要的描述。
对等身份验证
对等身份验证方法的工作原理是从内核获取客户端的操作系统用户名,并将其用作允许的数据库用户名(具有可选的用户名Map)。此方法仅在本地连接上受支持。
密码验证
基于口令的认证方法有md5和password。除了通过连接发送密码的方式(即md5散列和明文)之外,这些方法的操作方式类似。
如果您对密码“嗅探”攻击有任何顾虑,那么最好使用md5。如果可能,应始终避免使用普通密码。但是,md5不能与db\u user\u命名空间功能一起使用。如果连接受ssl加密保护,那么可以安全地使用密码(不过,如果需要使用ssl,ssl证书身份验证可能是更好的选择)。
样品位置
pg_hba.conf
:/etc/postgresql/9.1/main/pg_hba.conf
nr7wwzry12#
我也有同样的问题。
depa的解决方案是绝对正确的。
只要确保你有一个用户配置为使用postgresql。
检查文件:
此文件的权限应授予已向其注册psql的用户。
更进一步。如果你到现在还不错。。
按照@depa的指示更新。
即
然后做出改变。
nue99wik13#
最简单的解决方案,无需更改配置((ubuntu)更改用户,然后连接到数据库cli。
取自https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-18-04
m0rkklqb14#
转到/etc/postgresql/9.x/main/并打开pgèhba.conf文件
就我而言:
用md5替换peer
因此将更改为:
通过unix域套接字本地所有postgres对等机进行数据库管理登录
这是:
通过unix域套接字本地所有postgres md5进行数据库管理登录
然后重新启动pg服务器:
$>sudo服务postgresql重启
以下是用于连接postgres的方法列表:
注意:如果你还没有创建你的postgres用户。创建它,现在您可以使用该用户凭据访问postgres服务器。
提示:如果在postgres重启后它不工作,那么关闭终端并再次打开。
igsr9ssn15#
如果您有问题,您需要找到您的
pg_hba.conf
. 命令是:find / -name 'pg_hba.conf' 2>/dev/null
然后更改配置文件:postgresql 9.3版
postgresql 9.4版
下一步是:重新启动db示例:
service postgresql-9.3 restart
如果您有任何问题,需要重新设置密码:ALTER USER db_user with password 'db_password';