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

时间:2012-06-01 07:14:50

标签: postgresql postgresql-9.1 forgot-password

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

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

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

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

15 个答案:

答案 0 :(得分:313)

  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. 放置以下行(作为第一个未注释的行,或作为唯一的行):

  4.   

    对于所有出现的以下(本地和主机),exepct复制   部分,如果你没有,它必须改变如下,没有MD5   应该存在Peer autehication。

    `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

    6. 关于该pg_hba文件的

      进一步阅读http://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf.html

答案 1 :(得分:77)

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

答案 2 :(得分:61)

自提供这些答案后,pg_hba.confC:\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,我使用无密码登录,并通过转到postgres'更改用户File -> Change Password密码

答案 3 :(得分:9)

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

答案 4 :(得分:3)

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

    local   all             postgres                                md5
    
  2. 修改该行并将md5更改为trust并保存文件

  3. 重新加载 postgresql 服务

    $ sudo service postgresql reload
    
  4. 这将加载配置文件。现在,您可以通过登录postgres shell

    来修改psql用户
    $ 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
    

答案 5 :(得分:2)

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

答案 6 :(得分:2)

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

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

答案 7 :(得分:1)

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

net user postgres postgres

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

答案 8 :(得分:1)

对于Windows安装,将创建Windows用户。并且“psql”使用此用户连接到端口。如果更改PostgreSQL用户的密码,它将不会更改Windows密码。 只有在您可以访问命令行时,下面的命令行juste才有效。

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

答案 9 :(得分: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中粘贴的某一行并保存。

答案 10 :(得分:0)

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

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

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

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

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

答案 11 :(得分:0)

如果您在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. 通过键入

  15. 在psql会话中重置密码
  16. ALTER USER postgres,密码为“ secure-new-password”;

  17. \ q
  18. 输入

  19. 编辑pg_hba.conf文件

  20. 将其切换回“ md5”

  21. 重新启动服务

答案 12 :(得分:0)

对于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:1128 md5

    主机复制全部127.0.0.1/32 md5

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

  5. trust 替换 md5

    托管所有127.0.0.1/32信任

    托管所有::: / 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文件,然后从信任状态更改回md5

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

答案 13 :(得分:-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特权来向其他用户提供特权。

答案 14 :(得分:-1)

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

hostnossl    all          all            0.0.0.0/0  trust   

它将开始工作。