提问



我越来越


FATAL: Peer authentication failed for user "postgres"


当我尝试使用Rails进行postgres时。


这是我的pg_hba.conf,我的database.yml,以及完整痕迹的转储。[57] [58] [59]


我在pg_hba中将身份验证更改为md5并尝试了不同的操作,但似乎都没有。


我还尝试按照Rails 3.2创建新的用户和数据库,致命:用户的同行认证失败(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


这些是根据官方PostgreSQL文档关于身份验证方法的两个选项的简要描述。[61]


对等身份验证




  对等身份验证方法通过获取客户端来实现
  来自内核的操作系统用户名并将其用作允许的
  数据库用户名(带有可选的用户名映射)。这个方法是
  仅在本地连接上受支持。



密码验证




  基于密码的身份验证方法是md5和密码。这些
  除了密码发送的方式之外,方法的操作类似
  跨越连接,分别是MD5-hashed和clear-text。

  
  如果你在关注密码嗅探攻击,那么md5
  是优选的。如果可能,应始终避免使用普通密码。
  但是,md5不能与db_user_namespace功能一起使用。如果
  连接受SSL加密保护,然后可以使用密码
  安全(虽然SSL证书认证可能是更好的选择
  如果一个人依赖于使用SSL)。



pg_hba.conf的样本位置



  /etc/postgresql/9.1/main/pg_hba.conf


其它参考1


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



  1. 打开Ubuntu的文件pg_hba.conf,它将在/etc/postgresql/9.x/main中并更改此行:



local   all             postgres                                peer





local   all             postgres                                trust



  1. 重新启动服务器




sudo service postgresql restart




  1. 登录psql并设置密码




  psql -U postgres



ALTER USER postgres with password 'your-pass';



  1. 最后从
  2. 更改pg_hba.conf


local   all             postgres                                trust





local   all             postgres                                md5


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


验证方法细节:



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

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

  
  md5 - 基于密码的身份验证



进一步参考检查[62]

其它参考2


如果您通过localhost(127.0.0.1)连接,则不应该遇到这个特定问题。我不会对pg_hba.conf进行多次调整,而是调整连接字符串:


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


请享用!

其它参考3


这对我有用!!


sudo -u postgres psql

其它参考4



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



就我而言:


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



  1. 同行替换为 md5



所以这将改为:


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



  1. 然后重启pg服务器:


    $> sudo service postgresql restart



以下是用于连接postgres的METHODS列表:


# 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服务器。

其它参考5


如果您有问题,需要找到pg_hba.conf


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


并更改配置文件:


Postgresql 9.3





Postgresql 9.4


[63]


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


postgresql 9.3的示例


service postgresql-9.3 restart


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


ALTER USER db_user with password 'db_password';

其它参考6


我有同样的问题。


来自depa的解决方案绝对正确。


只需确保您已将用户配置为使用PostgreSQL。


检查文件:


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


该文件的权限应该提供给您已注册psql的用户。


进一步。如果你现在好,..


根据@depa的说明更新。





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


然后进行更改。

其它参考7


在我发现我需要在制作后重新启动postgres服务器之后,上面的编辑对我有用。
对于ubuntu:


sudo /etc/init.d/postgresql restart

其它参考8


如果要保留默认配置但希望对一个特定用户/数据库连接使用套接字连接进行md5身份验证,请在本地所有/所有行之前添加本地行:


# 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

其它参考9


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

其它参考10


连接时使用host=localhost


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

其它参考11


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

其它参考12


以下命令对我有用:


psql -d myDb -U username -W

其它参考13


你只需要设置METHOD来信任。


#TYPE  DATABASE        USER            ADDRESS                 METHOD
local    all             all                                     trust


并重新加载postgres服务器。


# service postgresql-9.5 reload


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

其它参考14


许多其他答案与各种配置文件中的设置有关,与pg_hba.conf相关的答案确实适用且100%正确。但是,请确保您修改正确的配置文件


正如其他人所提到的,可以使用主配置文件中的各种设置覆盖配置文件位置,以及使用-D选项在命令行上提供主配置文件的路径。


您可以在psql会话中使用以下命令来显示正在读取配置文件的位置(假设您可以启动psql)。这只是一个可以帮助某些人的故障排除步骤:


select * from pg_settings where setting~'pgsql';  


您还应该确保postgres用户的主目录是您期望的。我这样说是因为很容易忽略这一点,因为你的提示会显示~而不是你主目录的实际路径,这使得它不那么明显。许多安装将postgres用户主目录默认为/var/lib/pgsql


如果未设置为它应该是什么,请停止postgresql服务并以root用户身份登录时使用以下命令。还要确保postgres用户没有登录到另一个会话:


usermod -d /path/pgsql postgres


最后输入echo $PGDATA确保你的PGDATA变量设置正确,输出类似于:


/path/pgsql/data


如果未设置,或显示与预期不同的内容,请检查启动或RC文件,例如.profile或.bash.rc - 这将根据您的操作系统和shell而有很大差异。确定机器的正确启动脚本后,可以插入以下内容:


export PGDATA=/path/pgsql/data


对于我的系统,我将其放在/etc/profile.d/profile.local.sh中,以便所有用户都可以访问它。


你现在应该像往常一样初始化数据库,你的所有psql路径设置应该是正确的!

其它参考15


我的问题是我没有输入任何服务器。我认为这是一个默认因为占位符,但是当我键入localhost时它确实有效。

其它参考16


如果您尝试在Cloud 9中找到此文件,则可以执行此操作


sudo vim /var/lib/pgsql9/data/pg_hba.conf


I编辑/插入,按ESC 3次,然后键入:wq将保存文件并退出

其它参考17


如果您在使用rails时遇到此问题,并且您知道已经使用密码创建了该用户名以及正确的权限,那么您只需要在database.yml文件的末尾添加以下内容即可。


host: localhost


整体文件如下所示


development:
  adapter: postgresql
  encoding: unicode
  database: myapp_development
  pool: 5
  username: root
  password: admin
  host: localhost


您根本不需要触摸pg_hba.conf文件。快乐的编码