我忘记了安装postgres时输入的密码

我忘记了Postgres默认用户的密码,或者在安装过程中输入错误。我似乎不能运行它,我得到以下错误:

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

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

我是Postgres的新手,第一次安装它。我试图使用它与Rails和我运行的Mac OS X Lion。

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

对于以下所有情况(本地和主机),复制除外 section如果你没有任何,它必须更改如下,没有MD5

. or Peer认证
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文件的进一步的阅读

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

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'的密码

如果你在窗口,你可以直接运行

net user postgres postgres

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

Windows安装时,创建Windows用户。而“psql”则使用此用户连接到端口。如果您更改了PostgreSQL用户的密码,它不会更改Windows用户的密码。 下面的命令行只有在你有权访问命令行时才有效

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

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

    local   all             postgres                                md5
    
  2. Edit the line and change md5 at the end to trust and save the file

  3. Reload the postgresql service

    $ sudo service postgresql reload
    
  4. This will load the configuration files. Now you can modify the postgres user by logging into the psql shell

    $ psql -U postgres
    
  5. Update the postgres user's password

    alter user postgres with password 'secure-passwd-here';
    
  6. Edit the file /etc/postgresql/<version>/main/pg_hba.conf and change trust back to md5 and save the file

  7. Reload the postgresql service

    $ sudo service postgresql reload
    
  8. Verify that the password change is working

    $ psql -U postgres -W
    

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

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

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

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

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

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

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

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

它将询问密码。输入admin登录密码。 这将打开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]';

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

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

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

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

到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 < / p >

现在您可以将\q留在外壳中

再次进入pg_hba.conf文件,将METHOD从trust修改为md5,并保存。

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

我只是在Windows 10上有这个问题,在我的情况下,问题是我只是运行psql,它默认试图登录与我的Windows用户名(“内森”),但没有PostgreSQL用户的名字,它没有告诉我。

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

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

  1. 编辑pg_hba.conf文件

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

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

  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

  16. \问
  17. 输入

  18. 编辑pg_hba.conf文件

  19. 切换回'md5'

  20. 重新启动服务

< p >窗口: (什么帮助了我)

这是我引用的链接: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

    Host all all::1/128 md5

    主机复制全部127.0.0.1/32 md5

    主机复制all::1/128 md5

  5. md5替换为信任:

    主机所有所有127.0.0.1/32信任

    Host all all::1/128 trust

    主机复制全部127.0.0.1/32信任

    主机复制all::1/128 trust

  6. 关闭该文件

  7. 在windows上的搜索栏中打开服务 app。找到postgres并重新启动它。 服务app图片 < / p >

  8. < p >写cd . .在CMD,然后CD bin。你的路径应该是C:\Program Files\PostgreSQL\12\bin

  9. < p >输入:psql -U postgres -h localhost

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

  11. 打开原pg_hba.conf文件,从trust修改为md5

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

将以下行添加到pg_hba.conf文件中。postgres的安装目录中会出现哪个

hostnossl    all          all            0.0.0.0/0  trust

它将开始工作。

按照步骤1找到最佳答案

*****这里是我的补充,如果你使用Windows操作系统,只遵循第1步,然后打开pgadmin或postgres在web上,点击顶部导航上的文件,然后点击重置布局,最后重新加载应用程序。不管你输入什么密码都可以,我用的是1234

我没能在文件夹C:\Program Files\PostgreSQL\14\data中找到文件pg_hba.conf,因为根本就没有文件夹data

我通过使用pgadmin创建一个新用户并赋予其超级管理员权限来解决这个问题。