【问题标题】:I forgot the password I entered during postgres installation我忘记了在 postgres 安装过程中输入的密码
【发布时间】:2012-06-06 10:36:38
【问题描述】:

我忘记或输入错误(在安装过程中)Postgres 默认用户的密码。我似乎无法运行它,并收到以下错误:

psql: FATAL:  password authentication failed for user "hisham"
hisham-agil: hisham$ psql 

是否可以重置密码或如何创建具有超级用户权限的新用户?

我是 Postgres 的新手,并且是第一次安装它。我正在尝试将它与 Rails 一起使用,并且正在运行 Mac OS X Lion。

【问题讨论】:

  • 我还不能评论答案,所以必须这样做。我照SaiyanGirl说的做了,但还是需要输入密码,即'postgres'才能登录,然后我可以重设密码

标签: postgresql postgresql-9.1 forgot-password


【解决方案1】:
  1. 找到文件pg_hba.conf - 它可能位于,例如/etc/postgresql-9.1/pg_hba.conf

    cd /etc/postgresql-9.1/

  2. 备份一下

    cp pg_hba.conf pg_hba.conf-backup

  3. 放置以下行(作为第一行未注释的行,或作为唯一的行):

对于所有出现的以下(本地和主机),例如复制 如果您没有任何部分,则必须按如下方式更改,没有 MD5 或 Peer authication 应该存在。

local  all   all   trust
  1. 重新启动您的 PostgreSQL 服务器(例如,在 Linux 上:)

    sudo /etc/init.d/postgresql restart

    如果服务(守护程序)没有开始在日志文件中报告:

    此版本不支持本地连接

    你应该改变

    local all all trust

    host all all 127.0.0.1/32 trust

  2. 您现在可以以任何用户身份连接。以超级用户postgres 连接(注意,您的安装中的超级用户名可能不同。例如,在某些系统中,它称为pgsql

    psql -U postgres

    psql -h 127.0.0.1 -U postgres

    (请注意,使用第一个命令您不会总是与本地主机连接)

  3. 重置密码('将 my_user_name 替换为 postgres,因为您正在重置 postgres 用户)

    ALTER USER my_user_name with password 'my_secure_password';

  4. 恢复旧的pg_hba.conf,因为保留它非常危险

    cp pg_hba.conf-backup pg_hba.conf

  5. 重启服务器,以安全运行pg_hba.conf

    sudo /etc/init.d/postgresql restart

进一步阅读关于那个 pg_hba 文件:http://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf.html

【讨论】:

  • 然后开始psql?我仍然收到提示输入密码,我不知道它
  • 这个答案对我不起作用,在我执行第 3 步之后,服务将无法启动,我不知道,也许它是操作系统(W8),它只是不会.
  • 有人使用 Windows 吗?
  • 记住 pg_hba.conf 中的条目顺序很重要。如果您在文件末尾添加“local all all tr​​ust”,它将无法按预期工作,因为之前的记录将首先匹配。所以把它放在文件的顶部有你所期望的。
  • 如果您在 Windows 上出现此错误,请继续滚动到 @SaiyanGirl 的答案。只需将现有条目的 METHOD 列修改为“信任”,然后在完成后将其改回
【解决方案2】:

从命令行连接到 postgres 时,不要忘记添加 -h localhost 作为命令行参数。如果没有,postgres 将尝试使用 PEER 身份验证模式进行连接。

下图显示了密码重置、使用 PEER 身份验证登录失败和使用 TCP 连接成功登录。

# sudo -u postgres psql
could not change directory to "/root"
psql (9.1.11)
Type "help" for help.

postgres=# \password
Enter new password:
Enter it again:
postgres=# \q

失败:

# psql -U postgres -W
Password for user postgres:
psql: FATAL:  Peer authentication failed for user "postgres"

使用-h localhost

# psql -U postgres -W  -h localhost
Password for user postgres:
psql (9.1.11)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.

postgres=#

【讨论】:

  • 感谢有关“-h”选项的提示,帮助了我。
  • Windows cmd.exe 上不需要
  • mac 的最佳答案
【解决方案3】:

在给出这些答案后,pg_hba.conf (C:\Program Files\PostgreSQL\9.3\data) 文件已更改。在 Windows 中对我有用的是打开文件并将 METHODmd5 更改为 trust

# TYPE  DATABASE        USER            ADDRESS                 METHOD

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

然后,使用 pgAdmin III,我使用无密码登录并通过转到 File -> Change Password 更改用户 postgres' 密码

【讨论】:

  • 这不起作用,因为 PgAdmin 仍然要求输入当前密码...我重置为“信任”并重新启动 PgAdmin。不输入当前密码仍然无法重置...
  • 将方法更改为trust后,您可以关注this并在cmd中更改密码
  • 有趣的提示: 在 Windows 上运行 PostgreSQL Server 13,即使进行了上述更改,服务器在尝试连接时仍会提示输入密码(使用 pgAdmin 时)。您只需点击“确定”(无需指定密码),服务器就会让您进入。我没想到会提示。
  • 只是为了添加到上面有趣的注释,我不得不点击“取消”;单击“确定”只是再次要求输入密码。每当我尝试实际做任何事情时,我都会得到进一步的要求,所以并没有多大帮助。
  • 谢谢它对我有用。
【解决方案4】:

请注意,在 Linux 上,您只需运行 sudo su - postgres 即可成为 postgres 用户,然后使用 psql 更改所需内容。

【讨论】:

  • 运行psql后还需要密码
  • 这帮助很大,谢谢
【解决方案5】:

我只是在 Windows 10 上遇到了这个问题,我的问题是我只是在运行 psql 并且默认尝试使用我的 Windows 用户名(“Nathan”)登录,但没有具有该名称的 PostgreSQL 用户,但它并没有告诉我。

所以解决方案是运行psql -U postgres 而不仅仅是psql,然后我在安装时输入的密码就起作用了。

【讨论】:

    【解决方案6】:
    1. 编辑文件/etc/postgresql/<version>/main/pg_hba.conf并找到以下行:

      local   all             postgres                                md5
      
    2. 编辑该行并将末尾的md5更改为trust并保存文件

    3. 重新加载postgresql服务

      $ sudo service postgresql reload
      
    4. 这将加载配置文件。现在您可以通过登录psql shell 来修改postgres 用户

      $ psql -U postgres
      
    5. 更新postgres用户密码

      alter user postgres with password 'secure-passwd-here';
      
    6. 编辑文件/etc/postgresql/<version>/main/pg_hba.conf并将trust改回md5并保存文件

    7. 重新加载postgresql服务

      $ sudo service postgresql reload
      
    8. 验证密码更改是否有效

      $ psql -U postgres -W
      

    【讨论】:

    • 给出一个Windows解决方案就这么难吗?不是每个人都使用带有 sudo 的 Linux。我将如何在 Windows 上执行此操作??
    • 更好地切换到 Linux。我什至不知道你为什么使用 Windows。
    【解决方案7】:

    对于 Windows: (对我有什么帮助)

    这是我指的链接:https://qsartoolbox.org/content/documents/ResettingPostgreSQLPassword.pdf

    1. 打开你的cmd并转到C:\Program Files\PostgreSQL\12\data 这通常是正确的道路。您可能将其存储在其他地方。注意,如果你有不同的 postgresql 版本,会有不同的数字。没关系。

    2. 找到一个 pg_hba.conf 文件并将其复制到其他地方(这样您将拥有该文件的未修改版本,因此您可以在我们进行一些更改后查看它)

    3. 打开 pg_hba.conf 文件(不是备份,而是原始文件)

    4. 在文件底部附近找到以 host 开头的多行:

      托管所有 127.0.0.1/32 md5

      托管所有所有 ::1/128 md5

      主机复制全部 127.0.0.1/32 md5

      主机复制全部 ::1/128 md5

    5. md5 替换为 trust

      托管所有 127.0.0.1/32 信任

      托管所有所有 ::1/128 信任

      主机复制所有 127.0.0.1/32 信任

      主机复制所有 ::1/128 信任

    6. 关闭此文件

    7. 转到 Windows 上的搜索栏并打开 服务 应用。找到 postgres 并重新启动它。 picture of services app

    8. 在 cmd 中写入 cd..,然后在 cd bin 中写入。你的路径应该是C:\Program Files\PostgreSQL\12\bin

    9. 输入:psql -U postgres -h localhost

    10. 输入:ALTER USER postgres with password '<your new password>';确保包含 ;最后 应该显示“ALTER ROLE”作为上一行成功执行的指示

    11. 打开原始 pg_hba.conf 文件并从 trust 改回 md5

    12. 像以前一样使用服务应用重新启动服务器

    【讨论】:

      【解决方案8】:

      为 Windows 用户添加最新 postgres 版本 (>10) 的答案,

      转到您的 postgres 安装位置,然后搜索 pg_hba.conf, 你会发现它在..\postgres\data\pg_hba.conf

      用记事本打开那个文件,找到这一行,

      # TYPE  DATABASE        USER            ADDRESS                 METHOD
      
      # IPv4 local connections: 
      host    all             all             127.0.0.1/32            md5
      # IPv6 local connections:
      host    all             all             ::1/128                 md5
      #..
      

      将方法从md5改为trust,

      # TYPE  DATABASE        USER            ADDRESS                 METHOD
      
      # IPv4 local connections: 
      host    all             all             127.0.0.1/32            trust
      # IPv6 local connections:
      host    all             all             ::1/128                 trust
      # ...
      

      现在转到您的 SQL Shell(PSQL) 并将所有内容留空,

      Server [localhost]:
      Database [postgres]:
      Port [8000]:
      Username [postgres]: 
      

      这次不会要求密码了,你就可以登录了,

      现在运行这一行, ALTER USER yourusername WITH SUPERUSER

      现在你可以用 \q 离开 shell

      再次转到文件 pg_hba.conf 并再次将 METHOD 从 trust 更改为 md5,然后保存。

      现在使用您的新用户和密码登录,您可以检查 \du 的属性。

      【讨论】:

        【解决方案9】:

        我为解决同样的问题所做的是:

        从终端用 gedit 编辑器打开 pg_hba.conf 文件:

        sudo gedit /etc/postgresql/9.5/main/pg_hba.conf
        

        它会要求输入密码。输入您的管理员登录密码。 这将使用该文件打开 gedit。粘贴以下行:

        host  all   all  127.0.0.1/32  trust
        

        就在下面-

        # Database administrative login by Unix domain socket
        

        保存并关闭它。 关闭终端并再次打开并运行以下命令:

        psql -U postgres
        

        您现在将进入 psql 控制台。 现在通过输入以下内容更改密码:

        ALTER USER [your prefered user name] with password '[desired password]';
        

        如果它说用户不存在,则使用ALTER 代替CREATE

        最后,删除您粘贴在 pg_hba 中的那一行并保存。

        【讨论】:

          【解决方案10】:

          对于 Windows 安装,会创建一个 Windows 用户。而“psql”使用这个用户连接到端口。如果您更改 PostgreSQL 用户的密码,它不会更改 Windows 密码。 仅当您有权访问命令行时,下面的命令行才有效。

          您可以改为使用 Windows GUI 应用程序“c:\Windows\system32\lusrmgr.exe”。此应用程序管理由 Windows 创建的用户。所以你现在可以修改密码了。

          【讨论】:

            【解决方案11】:

            如果你在 Windows 中,你可以运行

            net user postgres postgres
            

            并使用 postgres/postgres 作为用户/密码登录 postgres

            【讨论】:

              【解决方案12】:

              用户主目录中的 .pgpass 文件或 PGPASSFILE 引用的文件可以包含要在连接需要密码时使用的密码(否则未指定密码)。在 Microsoft Windows 上,该文件名为 %APPDATA%\postgresql\pgpass.conf(其中 %APPDATA% 是指用户配置文件中的应用程序数据子目录)。

              此文件应包含以下格式的行:

              主机名:端口:数据库:用户名:密码

              (您可以通过复制上面的行并在其前面加上 # 来向文件添加提醒注释。)前四个字段中的每一个都可以是文字值或 *,它可以匹配任何内容。将使用第一行中与当前连接参数匹配的密码字段。 (因此,当您使用通配符时,首先放置更具体的条目。)如果条目需要包含 : 或 \,请使用 . 转义该字符。 localhost 的主机名匹配来自本地计算机的 TCP(主机名 localhost)和 Unix 域套接字(pghost 为空或默认套接字目录)连接。在备用服务器中,复制的数据库名称与与主服务器建立的流复制连接相匹配。数据库字段的用处有限,因为用户对同一集群中的所有数据库都具有相同的密码。

              在 Unix 系统上,.pgpass 的权限必须禁止对世界或组的任何访问;通过命令 chmod 0600 ~/.pgpass 实现这一点。如果权限不那么严格,则该文件将被忽略。在 Microsoft Windows 上,假定文件存储在安全的目录中,因此不进行特殊权限检查。

              【讨论】:

              • 这对我有用,路径扩展为 C:\Users\\AppData\Roaming\postgresql\pgpass.conf。关闭和打开 PostgreSQL 服务器似乎也有帮助。
              【解决方案13】:

              如果你在 mac os 上运行 postgresql,试试these:

              1. 编辑 pg_hba.conf 文件

              2. sudo vi /Library/PostgreSQL/9.2/data/pg_hba.conf

              3. 将所有用户的“md5”方法更改为文件底部附近的“信任”

              4. 查找服务名称

              5. ls /Library/LaunchDaemons

              6. 寻找postgresql

              7. 停止 postgresql 服务

              8. sudo launchctl stop com.edb.launchd.postgresql-9.2

              9. 启动postgresql服务

              10. sudo launchctl start com.edb.launchd.postgresql-9.2

              11. 以 postgres 身份启动 psql 会话

              12. psql -U postgres

              13. (由于“信任”设置,不应要求输入密码)

              14. 在 psql 会话中键入重置密码

              15. 使用密码“secure-new-password”更改用户 postgres;

              16. \q
              17. 输入

              18. 编辑 pg_hba.conf 文件

              19. 将其切换回“md5”

              20. 再次重启服务

              【讨论】:

                【解决方案14】:

                将下面的行添加到您的 pg_hba.conf 文件中。这将出现在 postgres 的安装目录中

                hostnossl    all          all            0.0.0.0/0  trust   
                

                它将开始工作。

                【讨论】:

                  【解决方案15】:

                  这在 Windows 上对我有用:

                  编辑位于 C:\Program Files\PostgreSQL\9.3\data 的 pg_hba.conf 文件。

                  # IPv4 local connections: host all all 127.0.0.1/32 trust

                  将方法从trust改为md5,在​​windows上重启postgres服务。

                  之后,您可以使用 pgadmin 使用 postgres 用户登录,无需密码。您可以使用 File->Change password 更改密码。

                  如果 postgres 用户没有超级用户权限,则不能更改密码。在这种情况下,使用具有超级用户访问权限的另一个用户(pgsql)登录,并通过右键单击用户并选择属性->角色权限来为其他用户提供权限。

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2018-03-12
                    • 2023-03-14
                    • 2020-05-03
                    • 2013-06-03
                    • 2016-09-28
                    • 1970-01-01
                    相关资源
                    最近更新 更多