我忘记了我在postgres安装期间input的密码
我忘了或错误(在安装过程中)将密码input到Postgres的默认用户。 我似乎无法运行它,我得到以下错误:
psql: FATAL: password authentication failed for user "hisham" hisham-agil: hisham$ psql
有无论如何重置密码,或者如何创build一个超级用户权限的新用户?
我是Postgres的新手,只是第一次安装它。 我正在尝试使用它与Rails和我正在运行的Mac OS X狮子。
-
find文件
pg_hba.conf
– 它可能位于/etc/postgresql-9.1/pg_hba.conf
。cd /etc/postgresql-9.1/
-
把它备份
cp pg_hba.conf pg_hba.conf-backup
-
放置以下行(作为第一个未注释的行,或作为唯一的行):
local all all trust
-
重新启动你的PostgreSQL服务器(例如,在Linux上)
sudo /etc/init.d/postgresql restart
如果服务(守护进程)不在日志文件中开始报告:
本地连接不受此构build的支持
你应该改变
local all all trust
至
host all all 127.0.0.1/32 trust
-
你现在可以连接任何用户。 以超级用户
postgres
连接(请注意, 超级用户名可能与您的安装不同,在某些系统中,它被称为pgsql
)。psql -U postgres
要么
psql -h 127.0.0.1 -U postgres
(请注意,第一个命令不会总是与本地主机连接)
-
重设密码
ALTER USER my_user_name with password 'my_secure_password';
-
恢复旧的
pg_hba.conf
因为这是非常危险的cp pg_hba.conf-backup pg_hba.conf
-
重新启动服务器,以便使用安全的
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.conf
( C:\Program Files\PostgreSQL\9.3\data
)文件已经更改。 在Windows中,对我有用的是打开文件并将METHOD
从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
然后,使用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的用户。 所以你现在可以修改密码。
-
编辑文件
/etc/postgresql/<version>/main/pg_hba.conf
并find以下行:local all postgres md5
-
编辑行并在最后更改
md5
以trust
并保存文件 -
重新加载postgresql服务
$ sudo service postgresql reload
-
这将加载configuration文件。 现在你可以通过login到
psql
shell来修改postgres
用户$ psql -U postgres
-
更新
postgres
用户的密码alter user postgres with password 'secure-passwd-here';
-
编辑文件
/etc/postgresql/<version>/main/pg_hba.conf
并将trust
更改回md5
并保存文件 -
重新加载postgresql服务
$ sudo service postgresql reload
-
确认密码更改正在工作
$ 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中粘贴的那一行并保存。