【问题标题】:psql: FATAL: password authentication failed for userpsql:致命:用户的密码验证失败
【发布时间】:2013-11-15 17:00:09
【问题描述】:

我正在尝试使用 putty 从我的 windows pc 连接到远程 ubuntu 12.04 服务器上的 Postgresql 9.1 数据库。我已经创建了带有密码的用户,并且当我运行命令时

psql -U opentaps -d opentaps (opentaps 是我为数据库 opentaps 创建的用户) 我得到以下消息。 psql:致命:用户“opentaps”的密码验证失败 我确实尝试过 psql -U opentaps -d opentaps -h localhost 但在我提供密码后仍然是相同的消息。 我的 opentaps 用户密码是正确的。即使我尝试 psql -U postgres -d postgres 我得到同样的失败信息。

我在 pg_hba.conf 中做了一些更改,它看起来像这样

https://docs.google.com/document/d/13ymGYj9e7YPFiaffwixLzsWJygp_OfBmgBi4Axgrg5A/edit?usp=sharing

在 postgresql.conf 中我也通过取消注释进行了更改 听地址 = '*' 我知道我在这里遗漏了一些东西。需要你的帮助才能知道我需要更改哪些内容才能连接到服务器。

感谢您的帮助

【问题讨论】:

  • 这看起来不像是 pg_hba.conf 或 listen_addresses 问题。假设它是正确的密码,我会用select usename,valuntil from pg_user 检查它的有效性。如果根本无法连接,请在pg_hba.conf中将md5临时替换为trust以绕过密码。
  • 是的,我确实在信任 pg_hba.conf 的情况下更改了 md5,并重新启动了 postgresql,瞧,这次它已连接。感谢您的帮助。

标签: postgresql


【解决方案1】:

解决此问题的一个技巧是编辑 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

【讨论】:

    【解决方案2】:

    当您从命令行启动 psql 时,请确保您以用户 opentaps 的身份登录。

    您还应该使用正确的信息填写.pgpass 文件,格式如下:

    hostname:port:database:username:password
    

    如果没有创建.pgpass 文件,您应该创建一个。参看。 postgresql docs 供参考

    【讨论】:

    • 因为-U opentaps被显式传递,登录的用户名是不相关的。如果手动输入的密码被拒绝,它将同样被 .pgpass 文件拒绝。
    • 丹尼尔你是对的。我确实根据文档创建了这个文件 .pgpass 但它没有帮助我仍然收到相同的失败消息。
    【解决方案3】:

    回复有点晚,但这里是这样:

    首先,您的.pgpass 文件应该在您的Ubuntu 用户的主目录中。如果没有文件,你可以用nano ~/.pgpass创建它

    其次,您的文件应该包含这种格式hostname:port:database:username:password。不要忘记chmod 0600 ~/.pgpass,这样您就可以禁止对世界或群组的任何访问,正如它所说的here。

    现在,命令应该是这样的:psql -h localhost -w -U opentaps -d opentaps -c "select * from mytable"。地点:

    -h 是你的host。

    -w 是使用您的 .pgpass 文件,以防您不想输入密码。或者使用-W强制psql提示密码。

    -U 是您的 postgres 用户名。

    -d 是您的数据库名称。

    而-c是执行字符串sql命令。

    【讨论】:

    • 只是说密码认证失败。
    猜你喜欢
    • 1970-01-01
    • 2017-12-16
    • 2015-09-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 2017-02-06
    • 2023-04-05
    相关资源
    最近更新 更多