首页 文章

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

提问于
浏览
528

我收到了错误:

FATAL: Peer authentication failed for user "postgres"

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

这是我的pg_hba.conf,我的database.ymldump of the full trace .

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

我也尝试按照Rails 3.2, FATAL: Peer authentication failed for user (PG::Error)创建新用户和数据库

但是他们没有出现在pgadmin上,甚至没有出现在 sudo -u postgres psql -l 上 .

知道我哪里错了吗?

18 回答

  • 775

    以下命令对我有用:

    psql -d myDb -U username -W
    
  • 6

    如果您通过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
    

    请享用!

  • 14

    我有同样的问题 .

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

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

    检查文件:

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

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

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

    根据@depa的说明更新 .

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

    然后进行更改 .

  • 10

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

  • 6

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

    sudo /etc/init.d/postgresql restart
    
  • 139

    连接使用 host=localhost .

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

    许多其他答案与各种配置文件中的设置有关,与 pg_hba.conf 相关的答案适用并且100%正确 . 但是,请确保您是 modifying the correct config files .

    正如其他人所提到的,可以使用主配置文件中的各种设置覆盖配置文件位置,以及使用 -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路径设置应该是正确的!

  • 1

    如果要保留默认配置但希望对一个特定用户/数据库连接使用套接字连接进行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
    
  • 4

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

    local   all             postgres                                peer
    

    应该

    local   all             postgres                                md5
    

    *如果找不到此文件,运行 locate pg_hba.conf 应显示文件的位置 .

    更改此文件后,请在Linux上,这将是 sudo service postgresql restart .

    这些是根据official PostgreSQL docs on authentication methods对这两个选项的简要描述 .

    对等身份验证

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

    密码验证

    基于密码的身份验证方法是md5和密码 . 除了通过连接发送密码的方式,这些方法的操作类似,分别是MD5散列和明文 . 如果您一直担心密码“嗅探”攻击,那么首选md5 . 如果可能,应始终避免使用普通密码 . 但是,md5不能与db_user_namespace功能一起使用 . 如果连接受SSL加密保护,则可以安全地使用密码(但如果依赖于使用SSL证书身份验证可能是更好的选择SSL) .

    pg_hba.conf 的样本位置

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

  • 259

    在pg_hba.conf中更改METHOD peertrust (/etc/postgresql/9.1/main/pg_hba.conf |第85行)解决了这个问题 . 添加md5要求输入密码,因此如果需要避免使用密码,请使用 trust 而不是 md5 .

  • 13

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

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

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

  • 5

    如果您遇到问题,则需要找到 pg_hba.conf . 命令是:

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

    然后更改配置文件:

    Postgresql 9.3

    Postgresql 9.3

    Postgresql 9.4

    下一步是:重新启动数据库实例:

    service postgresql-9.3 restart

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

    ALTER USER db_user with password 'db_password';

  • 2

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

  • 6

    你只需要设置METHOD来信任 .

    #TYPE  DATABASE        USER            ADDRESS                 METHOD
    local    all             all                                     trust
    

    并重新加载postgres服务器 .

    # service postgresql-9.5 reload
    

    Changes in pg_hba.conf dont require RESTART postgres server. just RELOAD.

  • 2

    这对我有用!!

    sudo -u postgres psql
    
  • 21
    • 转到此 /etc/postgresql/9.x/main/ 并打开 pg_hba.conf 文件

    就我而言:

    $>  sudo nano /etc/postgresql/9.3/main/pg_hba.conf
    
    • peer 替换为 md5

    So this will be changed to:

    数据库管理登录由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
    

    This:

    数据库管理登录由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 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.
    

    Note: 如果您尚未创建postgres用户 . 创建它,现在您可以使用该用户凭据访问postgres服务器 .

    TIP: 如果在postgres重启后它不起作用,则关闭终端并再次打开 .

  • 3

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

    host: localhost
    

    整体文件如下所示

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

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

  • 7

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

    • 为Ubuntu打开文件 pg_hba.conf 它将在 /etc/postgresql/9.x/main 并更改此行:
    local   all             postgres                                peer
    

    local   all             postgres                                trust
    
    • 重启服务器

    sudo service postgresql restart

    • 登录psql并设置密码

    psql -U postgres

    ALTER USER postgres with password 'your-pass';
    
    • 最后更改 pg_hba.conf
    local   all             postgres                                trust
    

    local   all             postgres                                md5
    

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

    验证方法细节:

    trust - 任何可以连接到服务器的人都有权访问数据库对等 - 使用客户端的操作系统用户名作为数据库用户名来访问它 . md5 - 基于密码的身份验证

    供进一步参考check here

相关问题