我忘记了在Postgres安装过程中输入的密码


205

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

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

无论如何,是否有重置密码或如何创建具有超级用户特权的新用户?

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


1
我还不能对答案发表评论,所以必须这样做。我按照SaiyanGirl所说的做了,但是我仍然需要输入密码,即“ postgres”才能登录,然后我可以重设密码
Pascale

Answers:


359
  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. 重置密码(“替换为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


9
然后开始psql?我仍然收到提示输入密码的提示,但我不知道该密码
CodyBugstein 2014年

4
这个答案对我不起作用,在执行完第3步之后,该服务将无法启动,我不知道,也许是OS(W8),只是无法使用。
Scaramouche

3
任何Windows用户?
Mahesha999 '16

2
请记住pg_hba.conf中条目的顺序很重要。如果在文件末尾添加“ local all all tr​​ust”,那么它将无法按预期工作,因为先前的记录将首先匹配。因此,将其放在文件的顶部即可拥有所需的内容。
塔加尔

6
如果您在Windows上出现此错误,请继续滚动到@SaiyanGirl的答案。只需将现有条目的METHOD列修改为“ trust”,然后在完成后将其更改回即可
sean.hudson

99

从命令行连接到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=#

7
感谢您提供有关“ -h”选项的提示,对我有所帮助。
Bunkerbewohner 2014年

Windows不需要cmd.exe
Fabien Haddadi

1
Mac的最佳答案
Muhammad Umar

72

自给出这些答案以来,pg_hba.confC:\Program Files\PostgreSQL\9.3\data)文件已更改。什么工作对我来说,在Windows中,是打开文件并更改METHODmd5trust

# 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


这不起作用,因为PgAdmin仍要求输入当前密码...我重设为“信任”并重新启动PgAdmin。如果不输入当前密码,仍然无法重置...
基因b。

1
一旦你改变了方法,trust你可以按照这个在cmd中和旧密码
吉拉德·格林

12

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


3
在运行psql之后,您仍然需要密码

8
  1. 编辑文件/etc/postgresql/<version>/main/pg_hba.conf并找到以下行:

    local   all             postgres                                md5
  2. 编辑线和变化md5在年底trust和保存文件

  3. 重新加载postgresql服务

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

    $ 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

提供Windows解决方案是如此难吗?并非所有人都将Linux与sudo一起使用。在Windows上我该怎么做?
基因b。

7

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

因此解决方案是运行,psql -U postgres而不只是运行psql,然后我在安装时输入的密码起作用。


5

为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离开外壳

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

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


1

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

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


1

我为解决同一问题所做的事情是:

从终端用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中的那一行并保存。


0

如果您在Windows中,则可以运行

net user postgres postgres

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


0

如果连接需要密码(并且未指定其他密码),则用户主目录中的文件.pgpass或PGPASSFILE引用的文件可以包含要使用的密码。在Microsoft Windows上,文件名为%APPDATA%\ postgresql \ pgpass.conf(其中%APPDATA%指用户配置文件中的Application Data子目录)。

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

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

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

在Unix系统上,对.pgpass的许可必须禁止任何对world或group的访问。通过命令chmod 0600〜/ .pgpass来实现。如果权限不严格,则该文件将被忽略。在Microsoft Windows上,假定该文件存储在安全的目录中,因此不进行特殊权限检查。


这对我有用,其中路径扩展为C:\ Users \ <用户> \ AppData \ Roaming \ postgresql \ pgpass.conf。另外,关闭和打开PostgreSQL服务器似乎也有帮助。
geodata,

0

如果您在Mac OS上运行postgresql,请尝试以下操作

  1. 编辑pg_hba.conf文件

  2. 须藤vi /Library/PostgreSQL/9.2/data/pg_hba.conf

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

  4. 查找服务名称

  5. ls /图书馆/启动守护程序

  6. 寻找PostgreSQL

  7. 停止PostgreSQL服务

  8. sudo launchctl停止com.edb.launchd.postgresql-9.2

  9. 启动PostgreSQL服务

  10. sudo launchctl启动com.edb.launchd.postgresql-9.2

  11. 作为postgres启动psql会话

  12. psql -U postgres

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

  14. 通过键入以下内容来重置psql会话中的密码

  15. ALTER USER postgres,密码为“ secure-new-password”;

  16. \ q
  17. 输入

  18. 编辑pg_hba.conf文件

  19. 切换回“ md5”

  20. 重新启动服务


-1

这是在Windows上对我有用的东西:

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

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

将方法从trust更改为md5,然后在Windows上重新启动postgres服务。

之后,您可以使用pgadmin使用没有密码的postgres用户登录。您可以使用文件->更改密码来更改密码。

如果postgres用户没有超级用户特权,那么您将无法更改密码。在这种情况下,请使用具有超级用户访问权限的另一个用户(pgsql)登录,并通过右键单击用户并选择properties-> Role特权来向其他用户提供特权。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.