我忘记了我在postgres安装期间input的密码

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

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

有无论如何重置密码,或者如何创build一个超级用户权限的新用户?

我是Postgres的新手,只是第一次安装它。 我正在尝试使用它与Rails和我正在运行的Mac OS X狮子。

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

    local all all trust

  4. 重新启动你的PostgreSQL服务器(例如,在Linux上)

    sudo /etc/init.d/postgresql restart

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

    本地连接不受此构build的支持

    你应该改变

    local all all trust

    host all all 127.0.0.1/32 trust

  5. 你现在可以连接任何用户。 以超级用户postgres连接(请注意, 超级用户名可能与您的安装不同,在某些系统中,它被称为pgsql )。

    psql -U postgres

    要么

    psql -h 127.0.0.1 -U postgres

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

  6. 重设密码

    ALTER USER my_user_name with password 'my_secure_password';

  7. 恢复旧的pg_hba.conf因为这是非常危险的

    cp pg_hba.conf-backup pg_hba.conf

  8. 重新启动服务器,以便使用安全的pg_hba.conf运行

    sudo /etc/init.d/postgresql restart

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

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

下面显示密码重置,使用PEER身份validationlogin失败以及使用TCP连接成功login。

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

如果你在窗户,你可以运行

 net user postgres postgres 

并以postgres / postgres作为用户/密码loginpostgres

对于Windows安装,将创build一个Windows用户。 和“psql”使用这个用户连接到端口。 如果您更改PostgreSQL用户的密码,它将不会更改Windows。 只有当你有权访问命令行时,下面的命令行才能工作。

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

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

     local all postgres md5 
  2. 编辑行并在最后更改md5trust并保存文件

  3. 重新加载postgresql服务

     $ sudo service postgresql reload 
  4. 这将加载configuration文件。 现在你可以通过login到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 

用户主目录中的.pgpass文件或PGPASSFILE引用的文件可以包含连接需要密码(并且没有指定密码)的密码。 在Microsoft Windows上,文件名为%APPDATA%\ postgresql \ pgpass.conf(其中%APPDATA%是指用户configuration文件中的Application Data子目录)。

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

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

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

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

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

用terminal上的gedit编辑器打开pg_hba.conf文件:

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

它会要求input密码。 input您的pipe理员login密码。 这将打开与文件gedit。 粘贴以下行:

 host all all 127.0.0.1/32 trust 

略低于 –

 # Database administrative login by Unix domain socket 

保存并closures它。 closuresterminal并再次打开并运行以下命令:

 psql -U postgres 

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

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

如果它说,用户不存在,那么而不是ALTER使用CREATE

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