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

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

我得到一个错误:

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

xt0899hw

xt0899hw1#

问题还是你的 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

1zmg4dgp

1zmg4dgp2#

安装postgresql之后,我做了以下步骤。
打开文件 pg_hba.conf 对于ubuntu,它将在 /etc/postgresql/9.x/main 并更改这行:

local   all             postgres                                peer

local   all             postgres                                trust

重新启动服务器

$ sudo service postgresql restart

登录psql并设置密码

$ psql -U postgres
db> ALTER USER postgres with password 'your-pass';

终于改变了 pg_hba.conf

local   all             postgres                                trust

local   all             postgres                                md5

重新启动postgresql server后,您可以使用自己的密码访问它
身份验证方法详细信息:
信任-任何可以连接到服务器的人都有权访问数据库
对等-使用客户端的操作系统用户名作为数据库用户名来访问它。
md5-基本密码身份验证
更多参考请点击此处

6ju8rftf

6ju8rftf3#

如果您通过localhost(127.0.0.1)进行连接,就不会遇到这种问题。我不太喜欢pg_hba.conf,但我会调整您的连接字符串:

psql -U someuser -h 127.0.0.1 database

其中someuser是您要连接的用户,database是您的用户有权连接的数据库。
下面是我在debian上设置postgres的步骤:

http://www.postgresql.org/download/linux/debian/  (Wheezy 7.x)

as root …

    root@www0:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list

    root@www0:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -

    root@www0:~# apt-get update

    root@www0:~# apt-get install postgresql-9.4        

    root@www0:~# su - postgres 

    postgres@www0:~$ createuser --interactive -P someuser
    Enter password for new role:
    Enter it again:
    Shall the new role be a superuser? (y/n) n
    Shall the new role be allowed to create databases? (y/n) y
    Shall the new role be allowed to create more new roles? (y/n) n

    postgres@www0:~$ createdb -O someuser database

    postgres@www0:~$ psql -U someuser -h 127.0.0.1 database

好好享受!

x8diyxa7

x8diyxa74#

这对我有用!!

sudo -u postgres psql
gz5pxeao

gz5pxeao5#

sudo psql --host=localhost --dbname=database-name --username=postgres

这解决了我的问题

igsr9ssn

igsr9ssn6#

如果您有问题,您需要找到您的 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';

m0rkklqb

m0rkklqb7#

转到/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重启后它不工作,那么关闭终端并再次打开。

nue99wik

nue99wik8#

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

sudo -i -u postgres

psql

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

nr7wwzry

nr7wwzry9#

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

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

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

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

然后做出改变。

o2g1uqev

o2g1uqev10#

我在克隆服务器上移动数据目录,登录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=#
muk1a3rh

muk1a3rh11#

如果要保留默认配置,但要对一个特定用户/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
cnh2zyt3

cnh2zyt312#

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

sudo /etc/init.d/postgresql restart
ppcbkaq5

ppcbkaq513#

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

vfhzx4xs

vfhzx4xs14#

使用 host=localhost 与此相关。

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

2sbarzqh15#

以下命令适用于我:

psql -d myDb -U username -W

相关问题