获取错误:尝试获取pgsql与rails工作时,用户“postgres”的对等身份validation失败

我越来越

FATAL: Peer authentication failed for user "postgres" 

当我试图使Rails的Postgres工作。

这是我的pg_hba.conf ,我的database.yml和一个完整的跟踪转储 。

我在pg_hba中将身份validation更改为md5并尝试了不同的操作,但似乎没有任何效果。

我也尝试创build一个新的用户和数据库,按照Rails 3.2,致命:对用户validation失败(PG ::错误)

但他们不显示在pgadmin上,甚至当我运行sudo -u postgres psql -l

任何想法我要去哪里错了?

问题仍然是你的pg_hba.conf文件(/etc/postgresql/9.1/main/pg_hba.conf)。 这一行:

 local all postgres peer 

应该

 local all postgres md5 

修改此文件后,不要忘记重新启动PostgreSQL服务器。 如果你在Linux上,这将是sudo service postgresql restart

这些是根据关于authentication方法的官方PostgreSQL文档的两个选项的简要说明。

同行authentication

对等身份validation方法的工作原理是从内核获取客户端的操作系统用户名,并将其用作允许的数据库用户名(可选用户名映射)。 此方法仅在本地连接上受支持。

密码authentication

基于密码的身份validation方法是md5和密码。 除了通过连接发送密码的方式,这些方法的操作类似,分别是MD5哈希和纯文本。

如果你关心密码“嗅探”攻击,那么md5是首选。 如果可能,应始终避免使用普通密码。 但是,md5不能与db_user_namespacefunction一起使用。 如果连接受到SSLencryption保护,则可以安全地使用密码(但如果使用SSL,SSL证书authentication可能是更好的select)。

安装Postgresql后,我做了下面的步骤。

  1. 打开Ubuntu的文件pg_hba.conf它将在/etc/postgresql/9.x/main并更改这一行:
 本地所有postgres同行 

 当地所有postgres信任 
  1. 重新启动服务器
 sudo service postgresql restart 
  1. login到psql并设置你的密码

psql -U postgres

 ALTER USER postgres with password 'your-pass'; 
  1. 最后更改pg_hba.conf
 当地所有postgres信任 

 本地所有postgres md5 

重新启动postgresql服务器后,您可以使用自己的密码进行访问

authentication方法的详细信

信任 – 可以连接到服务器的任何人都有权访问数据库

同行使用客户端的操作系统用户名作为数据库用户名来访问它。

md5 – 基于密码的身份validation

在这里进一步的参考检查

如果通过本地主机(127.0.0.1)连接,则不应该遇到特定的问题。 我不会在pg_hba.conf中弄脏很多,但是我会调整你的连接string:

 psql -U someuser -h 127.0.0.1 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 

请享用!

  1. 转到这个/etc/postgresql/9.x/main/并打开pg_hba.conf文件

在我的情况下:

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

所以这将被改为:

通过Unix域的数据库pipe理loginsocket local local postgres peer

 # 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域的数据库pipe理loginsocket local local 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 
  1. 然后重新启动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. 

注意:如果你还没有创build你的postgres用户呢。 创build,现在你可以使用该用户凭据访问postgres服务器。

我有同样的问题。

从depa的解决scheme是绝对正确的。

只要确保你有一个用户configuration为使用PostgreSQL。

检查文件:

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

这个文件的权限应该给你注册psql的用户。

进一步。 如果你现在还不错

根据@ depa的指示更新。

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

然后进行更改。

如果你有问题,你需要find你的pg_hba.conf

find / -name 'pg_hba.conf' 2>/dev/null

并改变像图像的configuration:

Postgresql 9.3

在这里输入图像说明

Postgresql 9.4

在这里输入图像说明

之后,你应该重新启动服务postgresql

postgresql 9.3的例子

service postgresql-9.3 restart

如果您有任何问题,则需要重新设置密码:

ALTER USER db_user with password 'db_password';

我正在克隆服务器上移动数据目录,并有麻烦login为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=#

使用host=localhost连接。

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

上面的编辑工作对我来说,当我发现我需要重新启动postgres服务器后,他们。 对于Ubuntu的:

 sudo /etc/init.d/postgresql restart 

如果你想保持默认的configuration,但想要一个特定的用户/数据库连接套接字连接md5身份validation,添加一个“本地”行之前,“本地所有/所有”行:

 # TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only local username dbname 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 

下面的命令适用于我:

 psql -d myDb -U username -W 

你只需要设置METHOD来信任。

 #TYPE DATABASE USER ADDRESS METHOD local all all trust 

并重新加载postgres服务器。

 # service postgresql-9.5 reload 

pg_hba.conf中的变化不需要RESTART postgres服务器。 只是RELOAD。

将METHOD方法更改为信任 pg_hba.conf(/etc/postgresql/9.1/main/pg_hba.conf |第85行)可解决此问题。 添加md5要求input密码,因此如果要求避免使用密码,请使用trust而不是md5