首页 文章

psql:致命:用户“postgres”的身份验证失败

提问于
浏览
338

我在我的Ubuntu Karmic盒子上安装了PostgreSQL和pgAdminIII .

我能够成功使用pgAdminIII(即连接/登录),但是当我尝试使用命令行上的相同用户名/ pwd登录服务器时(使用psql),我收到错误:

psql: FATAL:  Ident authentication failed for user "postgres"

现在有人如何解决这个问题?

21 回答

  • 4

    你在pg_hba.conf中设置了正确的设置吗?

    https://help.ubuntu.com/stable/serverguide/postgresql.html怎么做 .

  • 71

    以下步骤适用于在Ubuntu 12.04上全新安装postgres 9.1 . (也在Ubuntu 14.04上为postgres 9.3.9工作过 . )

    默认情况下,postgres会创建一个名为“postgres”的用户 . 我们以她身份登录,并给她一个密码 .

    $ sudo -u postgres psql
    \password
    Enter password: ...
    ...
    

    通过键入 \qctrl+d 注销 psql . 然后我们连接为'postgres' . -h localhost 部分 is important :它告诉 psql 客户端我们希望使用TCP连接(配置为使用密码验证)连接,而不是通过PEER连接(不关心密码) .

    $ psql -U postgres -h localhost
    
  • 44

    编辑文件 /etc/postgresql/8.4/main/pg_hba.conf 并将 identpeer 替换为 md5trust ,具体取决于您是否希望它在您自己的计算机上要求输入密码 . 然后重新加载配置文件:

    /etc/init.d/postgresql reload
    
  • 8

    您收到此错误是因为您的客户端身份验证失败 . 根据错误消息,您可能具有默认的postgres配置,该配置将所有PostgreSQL连接的客户端身份验证方法设置为“IDENT” .

    您一定要阅读PostgreSQL manual中的19.1 Client Authentication部分,以便更好地了解可用的身份验证设置(对于pg_hba.conf中的每条记录),但这里有相关的代码片段来帮助解决您遇到的问题(来自version 9.5 manual):

    trust无条件地允许连接 . 此方法允许任何可以连接到PostgreSQL数据库服务器的人以他们希望的任何PostgreSQL用户身份登录,而无需密码或任何其他身份验证 . 有关详细信息,请参见第19.3.1节 . 拒绝无条件拒绝连接 . 这对于从组中“过滤掉”某些主机非常有用,例如,拒绝行可能会阻止特定主机连接,而后续行允许特定网络中的其余主机进行连接 . md5要求客户端提供双MD5哈希密码以进行身份验证 . 有关详细信息,请参见第19.3.2节 . password要求客户端提供未加密的密码以进行身份验证 . 由于密码是通过网络以明文形式发送的,因此不应在不受信任的网络上使用 . 有关详细信息,请参见第19.3.2节 . gss使用GSSAPI对用户进行身份验证 . 这仅适用于TCP / IP连接 . 有关详细信息,请参见第19.3.3节 . sspi使用SSPI对用户进行身份验证 . 这仅适用于Windows . 有关详细信息,请参见第19.3.4节 . ident通过联系客户端上的ident服务器获取客户端的操作系统用户名,并检查它是否与请求的数据库用户名匹配 . Ident身份验证只能用于TCP / IP连接 . 为本地连接指定时,将使用对等身份验证 . 有关详细信息,请参见第19.3.5节 . peer从操作系统获取客户端的操作系统用户名,并检查它是否与请求的数据库用户名匹配 . 这仅适用于本地连接 . 有关详细信息,请参见第19.3.6节 . ldap使用LDAP服务器进行身份验证 . 有关详细信息,请参见第19.3.7节 . radius使用RADIUS服务器进行身份验证 . 有关详细信息,请参见第19.3.8节 . cert使用SSL客户端证书进行身份验证 . 有关详细信息,请参见第19.3.9节 . pam使用操作系统提供的可插入身份验证模块(PAM)服务进行身份验证 . 有关详细信息,请参见第19.3.10节 .

    所以...为了解决您遇到的问题,您可以执行以下操作之一:

    • pg_hba.conf 文件中定义的身份验证方法更改为 trustmd5password (取决于您的安全性和简单性需求),以便在此处定义本地连接记录 .

    • 更新 pg_ident.conf 将操作系统用户映射到PostgreSQL用户,并根据您的需要授予他们相应的访问权限 .

    • 单独保留IDENT设置,并为您要授予访问权限的每个操作系统用户在数据库中创建用户 . 如果用户已经通过操作系统进行身份验证并登录,则PostgreSQL将不需要进一步的身份验证,并将根据在数据库中为其分配的任何权限(角色)授予对该用户的访问权限 . 这是默认配置 .

    注意: pg_hba.confpg_ident.conf 的位置取决于操作系统 .

  • 6

    只需添加 -h localhost 位就可以了

  • 6

    您可以设置环境变量 PGHOST=localhost

    $ psql -U db_user db_name
    psql: FATAL:  Peer authentication failed for user "db_user"
    
    $ export PGHOST=localhost
    $ psql -U db_user db_name
    
    Password for user mfonline:
    
  • 14

    如果以上都不适合您:

    我've done quite a few Postgres installations, but was flummoxed today on a RedHat 6.5 system (installing Postgres 9.3). My typical hba.conf configuration that Aron shows above didn'工作 . 事实证明我的系统正在使用IPV6,而忽略了IPV4配置 . 添加行:

    host    all             all             ::1/128                 password
    

    允许我成功登录

  • 7

    我发现我必须安装一个侦听端口113的身份服务器 .

    sudo apt-get install pidentd
    sudo service postgresql restart
    

    然后识别工作 .

  • 151

    在上述所有答案中,对我来说没有任何作用 . 我不得不手动更改数据库中的用户密码,它突然起作用 .

    psql -U postgres -d postgres -c "alter user produser with password 'produser';"
    

    我使用了以下设置:

    pg_hba.conf

    local   all             all                                     peer
    # IPv4 local connections:
    host    all             all             127.0.0.1/32            password  
    # IPv6 local connections:
    host    all             all             ::1/128                 password
    

    最终成功连接以下命令:

    psql -U produser -d dbname -h localhost -W
    
  • -2

    在完成以下操作之后,我有同样的问题:PostgreSQL setup for Rails development in Ubuntu 12.04

    我尝试了其他答案,但我所要做的就是: "config/database.yml"

    development:
      adapter: postgresql
      encoding: unicode
      database: (appname)_development
      pool: 5
      username: (username you granted appname database priviledges to)
      password:
    
  • 1

    如果您在CentOS上使用它,您可能需要在制定上述解决方案后重新加载postgres:

    systemctl restart postgresql-9.3.service
    
  • 175

    问题仍然是你的pg_hba.conf文件 . 这一行:您可以在/ etc / postgres / varion / main中找到此文件

    local   all             postgres                                peer
    Should be
    
    local   all             postgres                                md5
    

    根据有关身份验证方法的官方PostgreSQL文档,这些是对这两个选项的简要描述 .

    对等身份验证

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

    密码验证

    基于密码的身份验证方法是md5和密码 . 除了通过连接发送密码的方式,这些方法的操作类似,分别是MD5散列和明文 .

    如果您一直担心密码“嗅探”攻击,那么首选md5 . 如果可能,应始终避免使用普通密码 . 但是,md5不能与db_user_namespace功能一起使用 . 如果连接受SSL加密保护,则可以安全地使用密码(但如果依赖于使用SSL,则SSL证书身份验证可能是更好的选择) .

    更改此文件后,请在Linux上执行 sudo service postgresql restart.

  • 0

    我在bash shell中Mac OSX上的PostgreSQL 9.3上的解决方案是使用 sudo 进入数据文件夹,然后将必要的行附加到 pg_hba.conf 文件以允许所有用户都可信并且能够登录 . 这就是我做了:

    # in bash_profile edit PGDATA environmental variable
    open ~/.bash_profile
    
    # append this line to bash_profile
    export PGDATA="/Library/PostgreSQL/9.3/data"
    
    # reload bash_profile
    source ~/.bash_profile
    
    # open pg_hba.conf in vim
    sudo vi /Library/PostgreSQL/9.3/data/pg_hba.conf
    
    # append these two lines to the end of the pg_hba.conf file
    local   all   all                  trust
    host    all   all   127.0.0.1/32   trust
    
    # can now login as user in bash
    psql -d <db_name> -U <user_name> -W
    
  • 1

    嗯......

    如果您可以使用pgAdminIII中的用户名和密码进行连接,但无法使用 psql 连接,那么这两个程序可能会以不同方式连接到数据库 .

    [如果您要连接到不同的数据库,请先尝试连接到同一个数据库 . 见下文 . ]

    来自PostgreSQL: Documentation: 9.3: psql

    如果省略主机名,psql将通过Unix域套接字连接到本地主机上的服务器,或通过TCP / IP连接到没有Unix域套接字的机器上的localhost .

    如果您没有运行 psql ... -h host_name ... 之类的东西,并且您正在运行Ubuntu, psql 应该通过Unix域套接字进行连接,因此PostgreSQL可能未配置为允许postgres用户使用其中一种密码身份验证方法 .

    您可以通过运行来测试:

    sudo -u postgres psql

    如果上述工作正常,您的服务器可能配置为使用postgres用户进行本地连接的对等身份验证,即要求操作系统确认您的用户名是否为postgres .

    所以这可能是你的pg_hba.conf文件

    该文件的完整路径将是 like /etc/postgresql/9.3/main/pg_hba.conf . 您可以通过以下方式查看 sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more .

    如果在 psql 命令中省略主机名,则应该能够在将以下条目添加到pg_hba.conf文件时进行连接:

    # Connection type   Database   User       IP addresses   Method
    local               all        postgres                  md5
    

    [pg_hba.conf文件中的注释行以 # 开头 . ]

    如果您在 psql 命令中包含主机名 are ,请添加此条目:

    # Connection type   Database   User       IP addresses   Method
    host                all        postgres   127.0.0.1/32   md5
    

    您需要在通过 psql 为您的连接匹配任何其他条目之前输入条目 . 如果对放在哪里有疑问,只需将它放在第一个未注释的行之前 .

    更多关于pg_hba.conf的信息

    来自PostgreSQL: Documentation: 9.3: The pg_hba.conf File [大胆强调我的]:

    具有匹配的连接类型,客户端地址,请求的数据库和用户名的第一个记录用于执行身份验证 . 没有“直通”或“备份”:如果选择了一条记录且认证失败,则不考虑后续记录 . 如果没有记录匹配,则拒绝访问 .

    请注意,在身份验证方法上匹配的记录是 not . 因此,如果您的pg_hba.conf文件包含以下条目:

    # Connection type   Database   User       IP addresses   Method
    local               all        postgres                  peer
    

    然后你 won't 能够通过以下方式连接:

    psql -u postgres

    除非其中一个条目位于您的pg_hba.conf文件中 above 前一个条目:

    # Connection type   Database   User       IP addresses   Method
    local               all        postgres                  md5
    local               all        postgres                  password   # Unencrypted!
    local               all        all                       md5
    local               all        all                       password   # Unencrypted!
    
  • 1

    如果您已完成所有这些但仍然无效,请检查该用户的到期日期:

    Postgres password authentication fails

  • 396

    我花了更多的时间来解决这个我不想承认的错误 .

    我认为pg_hba.conf中的身份验证配置顺序与您的情况相关 . 默认配置文件包含vanilla安装中的几行 . 这些默认值可以与您的身份验证尝试条件相匹配,从而导致无法进行身份验证 . 无论在.conf文件末尾添加其他配置,它都会失败 .

    要检查使用哪一行配置,请确保查看消息的默认日志文件 . 你可能会看到一些东西像这样

    LOG:  could not connect to Ident server at address "127.0.0.1", port 113: Connection refused
    FATAL:  Ident authentication failed for user "acme" 
    DETAIL:  Connection matched pg_hba.conf line 82: "host     all             all             127.0.0.1/32            ident"
    

    事实证明这个默认行导致拒绝 .

    host    all             all             127.0.0.1/32            ident
    

    尝试评论出来 .

  • 4

    一个黑客就是编辑pg_hba.conf

    sudo vi /etc/postgresql/9.3/main/pg_hba.conf
    

    暂时

    # Database administrative login by Unix domain socket
    local   all             postgres                                   trust
    

    此时你已经完成了 . 为了安全起见,那就去吧

    sudo -u postgres psql template1
    ALTER USER postgres with encrypted password 'your_password';
    

    然后返回并将pg_hba.conf设置回

    # Database administrative login by Unix domain socket
    local   all             postgres                                   md5
    
  • 10

    我有类似的问题,我在 pg_hba.conf 修复了它甚至为IP6地址删除所有的身份识别方法(尽管我在机器上只有IP4) .

    host all all 127.0.0.1/32 password
    host all all ::1/128 password
    #for pgAdmin running at local network
    host all all 192.168.0.0/24 md5
    
  • 3

    在我的情况下,解决方案在这里:(对于有关人员)登录postgres:

    sudo -i -u postgres
    psql
    ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here
    

    问候

  • 0

    对于fedora26和postgres9.6

    首先,以root用户身份登录
    然后通过以下命令进入psql
    $ su postgres
    然后键入$ psql

    在psql中查找hba_file的位置==>表示pg_hba.conf

    postgres = #show hba_file;

    hba_file

    /etc/postgresql/9.6/main/pg_hba.conf
    (1排)

    在文件pg_hba.conf中更改用户对此的访问权限

    托管所有127.0.0.1/32 md5

  • 11

    这对我有用:http://tecadmin.net/fatal-ident-authentication-failed-for-user-postgres/#

    local   all             postgres                                trust
    local   all             myapp_usr                               trust
    # IPv4 local connections:
    host    all             all             127.0.0.1/32            trust
    # IPv6 local connections:
    #host    all             all             ::1/128                 trust
    

相关问题