Postgresql:当我无法访问postgresql数据库时,如何为用户“postgres”设置密码?

3
我正在Ubuntu 18.04上运行postgresql 10.12。
我想尝试使用一个使用postgres的软件包。这意味着我需要弄清如何在postgres下设置用户、密码和数据库。
Postgres正在运行,但没有办法登录它。我相信有一个名为“postgres”的用户。
未提供密码时,以此用户身份登录失败。同时,尝试使用“postgres”或“root”密码也会失败。
我如何在无法访问数据库的情况下更改用户“postgres”的密码?

1
通常情况下,操作系统用户postgres可以无需密码登录。请参阅手册中的客户端身份验证 - user330315
1个回答

22

这是一个适用于 Linux 上所有新安装的 PostgreSQL 的初学者级别的重置超级用户密码的教程。

  1. 进入 shell 并切换用户到 postgres

    (在用户 shell 中)sudo su - postgres
    
  2. postgres 用户身份连接到 postgres 数据库

    (在 postgres shell 中)psql postgres postgres
    
  3. 现在您可以重置 postgres 用户的密码

    (在 postgres psql 中)ALTER USER postgres PASSWORD 'newsecret';
    
  4. 退出 psql

    (在 postgres psql 中)\q
    
  5. 退出 postgres shell

    (在 postgres shell 中)exit
    
  6. 使用新密码测试连接

    (在用户 shell 中)psql -h localhost postgres postgres
    

关于远程Postgres服务器的注意事项

在上面的第1步中,如果您具有此类shell访问权限,可以使用sshkubectl execaws ssm或类似工具。

最佳实践说明

尽管上述方法(虽然回答了OP的问题)是可行的,但并不是最佳实践。最好的方法是:

  1. 阅读并理解客户端认证 -> https://www.postgresql.org/docs/current/client-authentication.html

  2. 不要使用 postgres 数据库用户(或任何其他超级用户!)用于应用程序/开发。 相反,请创建您自己的用户。对于最简单的设置,请使用以下内容:

    (在 psql shell 中)
    CREATE USER myapp PASSWORD 'secret';
    CREATE DATABASE myapp;
    ALTER DATABASE myapp OWNER TO myapp;
    -- 如果您想保留默认所有权,则可以选择以下替代方法:
    -- GRANT ALL ON DATABASE myapp TO myapp;
    

    这应该代替修改 postgres 用户和/或 postgres 数据库。

关于托管的PostgreSQL解决方案的注意事项

本答案仅适用于自我管理的PostgreSQL,您需要具备超级用户Shell访问权限。对于像Aurora、CloudSQL或类似的托管解决方案,它将无法工作 - 在这种情况下,请使用云提供商工具重置数据库密码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接