我忘了或错误输入(在安装过程中)密码给Postgres的默认用户。我似乎无法运行它,我收到以下错误:
psql: FATAL: password authentication failed for user "hisham"
hisham-agil: hisham$ psql
是否有重置密码或如何创建具有超级用户权限的新用户?
我是Postgres的新手,刚刚第一次安装它。我正在尝试使用它与Rails,我正在运行Mac OS X Lion。
pg_hba.conf
- 它可能位于,例如在/etc/postgresql-9.1/pg_hba.conf
。
cd /etc/postgresql-9.1/
cp pg_hba.conf pg_hba.conf-backup
对于所有下面的(本地和主机),exepct复制部分,如果你没有任何必须如下更改,则不应该存在MD5或Peer autehication。
`local all all trust`
sudo /etc/init.d/postgresql restart
如果服务(守护程序)未在日志文件中开始报告:
此版本不支持本地连接
你应该改变
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
我为解决同样的问题所做的是:
使用终端的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中粘贴的某一行并保存。
用户主目录中的文件.pgpass或PGPASSFILE引用的文件可以包含在连接需要密码时使用的密码(否则未指定密码)。在Microsoft Windows上,该文件名为%APPDATA%\ postgresql \ pgpass.conf(其中%APPDATA%指的是用户配置文件中的Application Data子目录)。
此文件应包含以下格式的行:
主机名:端口:数据库:用户名:密码
(您可以通过复制上面的行并在其前面添加#来为文件添加提醒注释。)前四个字段中的每一个都可以是字面值,或*,它匹配任何内容。将使用第一行中与当前连接参数匹配的密码字段。 (因此,在使用通配符时首先输入更具体的条目。)如果条目需要包含:或\,请使用转义此字符。 localhost的主机名与来自本地计算机的TCP(主机名localhost)和Unix域套接字(pghost empty或默认套接字目录)连接相匹配。在备用服务器中,复制的数据库名称与对主服务器建立的流复制连接相匹配。数据库字段的用途有限,因为用户对同一群集中的所有数据库具有相同的密码。
在Unix系统上,.pgpass上的权限必须禁止对世界或组的任何访问;通过命令chmod 0600~ / .pgpass实现此目的。如果权限不如此严格,则将忽略该文件。在Microsoft Windows上,假定该文件存储在安全的目录中,因此不会进行特殊权限检查。
这对我在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)登录,并通过右键单击用户并选择属性 - >角色权限为其他用户提供权限。
从命令行连接到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中,对我来说有用的是打开文件并将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,我使用无密码登录,并通过访问postgres'
更改用户File -> Change Password
密码
只需注意,在Linux上你可以简单地运行sudo su - postgres
成为postgres用户,并从那里改变使用psql所需的内容。
/etc/postgresql/<version>/main/pg_hba.conf
并找到以下行:
local all postgres md5
md5
最后更改为trust
并保存文件$ sudo service postgresql reload
postgres
shell来修改psql
用户
$ psql -U postgres
postgres
用户的密码
alter user postgres with password 'secure-passwd-here';
/etc/postgresql/<version>/main/pg_hba.conf
并将trust
更改回md5
并保存文件$ sudo service postgresql reload
$ psql -U postgres -W
我刚刚在Windows 10上遇到这个问题,在我的情况下问题是我只是运行psql
而且它默认尝试使用我的Windows用户名(“Nathan”)登录,但是没有PostgreSQL用户使用该名称,它并没有告诉我。
因此解决方案是运行psql -U 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
现在你可以用\ q留下shell
再次转到文件pg_hba.conf并再次将METHOD从trust更改为md5,然后保存。
现在使用您的新用户和密码登录,您可以检查\ du的属性。
如果你在窗户,你可以跑
net user postgres postgres
并使用postgres / postgres作为用户/密码登录postgres
对于Windows安装,将创建Windows用户。并且“psql”使用此用户连接到端口。如果更改PostgreSQL用户的密码,它将不会更改Windows密码。只有在您可以访问命令行时,下面的命令行juste才有效。
相反,您可以使用Windows GUI应用程序“c:\ Windows \ system32 \ lusrmgr.exe”。此应用管理由Windows创建的用户。所以你现在可以修改密码了。