获取错误:当试图让pgsql与rails一起工作时,用户“postgres”的对等身份验证失败

rvpgvaaj  于 2021-07-24  发布在  Java
关注(0)|答案(19)|浏览(345)

我得到一个错误:

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 .
知道我哪里出错了吗?

o2g1uqev

o2g1uqev1#

我在克隆服务器上移动数据目录,登录postgres时遇到问题。像这样重新设置postgres密码对我很有效。

root# su postgres
postgres$ psql -U postgres
psql (9.3.6) 
Type "help" for help. 
postgres=#\password 
Enter new password: 
Enter it again: 
postgres=#
llmtgqce

llmtgqce2#

许多其他答案与各种配置文件中的设置有关,也与 pg_hba.conf 一定要申请并且100%正确。但是,请确保您正在修改正确的配置文件。
正如其他人提到的,可以使用主配置文件中的各种设置覆盖配置文件位置,还可以使用 -D 选项。
在psql会话中,可以使用以下命令来显示正在读取配置文件的位置(假设可以启动psql)。这只是一个故障排除步骤,可以帮助一些人:

select * from pg_settings where setting~'pgsql';

您还应该确保postgres用户的主目录是您期望的位置。我这么说

kxeu7u2r

kxeu7u2r3#

请按照以下步骤操作
1). 首先,导航到/etc/postgresql/{your pg version}/main目录。
我的版本是10那么:

cd /etc/postgresql/10/main

2). 这里驻留pg_hba.conf文件需要做一些更改这里可能需要sudo访问。

sudo nano pg_hba.conf

3). 向下滚动文件,直到找到


# Database administrative login by Unix domain socket

local   all             postgres                                peer

4). 这里将peer更改为md5,如下所示。


# Database administrative login by Unix domain socket

local   all             all                                md5

peer意味着它将信任unix用户的真实性,因此不信任
提示输入密码。md5意味着它将始终请求密码,并在使用md5散列后验证密码。
5) 。现在保存文件并重新启动postgres服务器。

sudo service postgresql restart

现在应该没事了。

wgeznvg7

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:

SHOW hba_file;

此命令必须在超级用户会话上运行,因此对于shell脚本,您可以编写如下内容:

psql -t -P format=unaligned -c 'show hba_file';

并设置环境变量pguser、pgdatabase等,确保连接正确。
是的,这有点像鸡和蛋的问题,因为如果用户无法连接(比如,在编辑pg_hba.conf时出错),就找不到pg_hba.conf来修复它。
另一种方法是查看ps命令的输出,并查看postmaster data directory参数-d是否可见。

ps aux  | grep 'postgres *-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

uidvcgyl

uidvcgyl5#

您只需将方法设置为信任。


# TYPE  DATABASE        USER            ADDRESS                 METHOD

local    all             all                                     trust

重新加载postgres服务器。


# service postgresql-9.5 reload

pg_hba.conf中的更改不需要重新启动postgres服务器。重新装弹。

2sbarzqh

2sbarzqh6#

以下命令适用于我:

psql -d myDb -U username -W
vfhzx4xs

vfhzx4xs7#

使用 host=localhost 与此相关。

PGconn *conn = PQconnectdb(
    "host=localhost user=postgres dbname=postgres password=123"
);
ppcbkaq5

ppcbkaq58#

将pgèhba.conf(/etc/postgresql/9.1/main/pgèhba.conf | line 85)中的方法peer更改为trust可以解决这个问题。添加md5需要密码,因此如果需要避免使用密码,请使用trust而不是md5。

cnh2zyt3

cnh2zyt39#

上面的编辑对我来说很有用,因为我发现我需要在完成后重新启动postgres服务器。对于ubuntu:

sudo /etc/init.d/postgresql restart
muk1a3rh

muk1a3rh10#

如果要保留默认配置,但要对一个特定用户/db连接使用套接字连接进行md5身份验证,请在“local all/all”行之前添加“local”行:


# TYPE  DATABASE     USER         ADDRESS             METHOD

# "local" is for Unix domain socket connections only

local   dbname       username                         md5  # <-- this line
local   all          all                              peer

# IPv4 local connections:

host    all          all          127.0.0.1/32        ident

# IPv6 local connections:

host    all          all          ::1/128             ident
xt0899hw

xt0899hw11#

问题还是你的 pg_hba.conf 文件( /etc/postgresql/9.1/main/pg_hba.conf* ).
这条线:

local   all             postgres                                peer

应该是:

local   all             postgres                                md5
  • 如果找不到此文件,请运行 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

nr7wwzry

nr7wwzry12#

我也有同样的问题。
depa的解决方案是绝对正确的。
只要确保你有一个用户配置为使用postgresql。
检查文件:

$ ls /etc/postgresql/9.1/main/pg_hba.conf -l

此文件的权限应授予已向其注册psql的用户。
更进一步。如果你到现在还不错。。
按照@depa的指示更新。

$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf

然后做出改变。

nue99wik

nue99wik13#

最简单的解决方案,无需更改配置((ubuntu)更改用户,然后连接到数据库cli。

sudo -i -u postgres

psql

取自https://www.digitalocean.com/community/tutorials/how-to-install-and-use-postgresql-on-ubuntu-18-04

m0rkklqb

m0rkklqb14#

转到/etc/postgresql/9.x/main/并打开pgèhba.conf文件
就我而言:

$>  sudo nano /etc/postgresql/9.3/main/pg_hba.conf

用md5替换peer
因此将更改为:
通过unix域套接字本地所有postgres对等机进行数据库管理登录


# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only

local   all             all                                     peer

# IPv4 local connections:

host    all             all             127.0.0.1/32            md5

这是:
通过unix域套接字本地所有postgres md5进行数据库管理登录


# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only

local   all             all                                     md5

# IPv4 local connections:

host    all             all             127.0.0.1/32            md5

然后重新启动pg服务器:
$>sudo服务postgresql重启
以下是用于连接postgres的方法列表:


# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi",

# "krb5", "ident", "peer", "pam", "ldap", "radius" or "cert".  Note that

# "password" sends passwords in clear text; "md5" is preferred since

# it sends encrypted passwords.

注意:如果你还没有创建你的postgres用户。创建它,现在您可以使用该用户凭据访问postgres服务器。
提示:如果在postgres重启后它不工作,那么关闭终端并再次打开。

igsr9ssn

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';

相关问题