PostgreSQL:更改用户密码无效


9
  • 我安装PostgreSQLEC2计算机上,现在我想更改用户密码postgres
  • 我做
$ sudo -u postgres psql
psql (9.1.5)
Type "help" for help.

postgres=# ALTER USER postgres WITH PASSWORD 'newpasswd';
ALTER ROLE
  • 然后我退出外壳并尝试使用新密码登录
$ psql -U postgres -W
Password for user postgres: 
psql: FATAL:  Peer authentication failed for user "postgres"

我的PostgreSQL版本是

$ psql --version
psql (PostgreSQL) 9.1.5
contains support for command-line editing

我做错了什么?

谢谢

我进行了更新pg_hba.conf,这就是现在的样子

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
#local   all             all                                     peer
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

然后我重新启动了 postgres

$ sudo /etc/init.d/postgresql restart
 * Restarting PostgreSQL 9.1 database server                                                                                                                                               [ OK ] 

我尝试再次登录,但失败

$ psql -U postgres -W
Password for user postgres: 
psql: FATAL:  Peer authentication failed for user "postgres"

旧密码可能仍存储在〜/ .pgpass文件中。

不,那里有密码提示。我在考虑以pg_hba.conf不接受密码身份验证的方式进行设置。

@willglynn,请检查我的更新,它再次,即使在更改后失败pg_hba.conf
做白日梦的人

Answers:


9

就像willglynn所说的,可能是您的pg_hba.conf文件。

如果您有以下一行:

local   all    all     peer

然后将其更改为:

local   all    all     md5

然后,您应该可以使用新密码登录(假设您正确输入了密码):)


嗨@大卫,我想你所说的,但它仍然失败,请检查我的更新为我做什么,谢谢
做白日梦的人

仍然有一条peer线适用于用户的本地(UNIX域套接字)连接postgres。除非远端以OS postgres用户身份运行,否则它将失败。请参阅pg_hba.conf文档以获得更好的理解。

尽管我能够跑步django manage.py syncdb,但仍会阅读pg_hba.conf您提到的文档,非常感谢您的帮助
做白日梦的人2012年

我只需要添加-h localhost
Mike

5

除了更改pg_hba.conf文件从

local   all    all     peer

local   all    all     md5

根据公认的答案,在执行OP相同的操作后,我唯一的登录方法是-h尝试登录时传递该标志。

$ psql -U postgres -h localhost

希望这会在将来对某人有所帮助。真让我发疯!


0

你有这个...

# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
#local   all             all                                     peer
local   all             all                                     md5

通过此更改:

# Database administrative login by Unix domain socket
local   all             postgres                                md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
#local   all             all                                     md5

并通过重新启动postgresql服务

sudo /etc/init.d/posgresql restart

这项工作对我来说


更改时,pg_hba.conf您无需重新启动Postgres。重新加载配置就足够了。例如pg_ctl ... reloadselect pg_reload_conf()
a_horse_with_no_name

只是重新加载...我不知道...谢谢
以色列L Rosas

-1

对于那些在多次更改密码并尝试此处提到的所有内容后会发疯的人,请记住检查用户的有效期限。您可以像在psql 9.x中那样将其设置为“永不过期”:

ALTER ROLE <username> VALID UNTIL 'infinity';

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.