253

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

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

无论如何要重置密码或如何创建具有超级用户权限的新用户?

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

4

15 回答 15

413
  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 或对等身份验证。

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. 重置密码('replace 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

于 2012-06-01T07:42:08.513 回答
120

从命令行连接到 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=#
于 2014-02-02T10:21:31.460 回答
79

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

# 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,我使用无密码登录并postgres'通过转到更改用户密码File -> Change Password

于 2014-09-19T22:26:11.643 回答
16

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

于 2018-03-12T12:58:26.843 回答
13
  1. 编辑文件/etc/postgresql/<version>/main/pg_hba.conf并找到以下行:

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

  3. 重新加载postgresql服务

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

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

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

  7. 重新加载postgresql服务

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

    $ psql -U postgres -W
    
于 2017-08-17T02:55:49.950 回答
13

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

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

于 2019-06-26T21:29:30.623 回答
12

对于 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 并重新启动它。 服务应用程序的图片

  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. 像以前一样使用服务应用程序重新启动服务器

于 2020-11-15T22:14:14.267 回答
7

为 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 的属性。

于 2019-02-03T13:40:40.790 回答
2

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

从终端使用 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]';

如果它说 user 不存在,那么而不是ALTERuse CREATE

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

于 2017-11-14T12:08:38.800 回答
1

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

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

于 2017-03-21T15:31:14.680 回答
0

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

net user postgres postgres

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

于 2016-06-07T16:36:11.320 回答
0

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

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

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

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

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

于 2017-09-20T08:58:27.030 回答
0

如果你在 mac os 上运行 postgresql,试试这些

  1. 编辑 pg_hba.conf 文件

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

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

  4. 查找服务名称

  5. ls /库/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. 再次重启服务

于 2020-03-16T15:22:19.410 回答
-1

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

hostnossl    all          all            0.0.0.0/0  trust   

它将开始工作。

于 2021-02-26T10:47:58.690 回答
-2

这就是在 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)登录,并通过右键单击用户并选择属性-> 角色权限来为其他用户提供权限。

于 2018-11-21T08:23:58.500 回答