PostgreSQL: смена пароля для пользователя не работает

9
  • Я установил PostgreSQLна EC2машину, и теперь я хочу изменить пароль пользователя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
daydreamer

Ответы:

9

Как сказал Уилглинн, это, вероятно, ваш файл pg_hba.conf.

Если у вас есть следующая строка:

local   all    all     peer

затем измените его на:

local   all    all     md5

Это должно позволить вам войти с новым паролем (при условии, что вы правильно его указали) :)

Дэвид С
источник
Привет, @David, я пробовал, как ты упоминал, но все равно не получается, пожалуйста, проверь мое обновление как то, что я сделал, спасибо
daydreamer
Еще есть peerстрока, которая применяется к локальным (доменные сокеты UNIX) соединениям от postgresпользователя. Это не получится, если удаленный конец не будет работать от имени postgresпользователя ОС . Смотрите документацию pg_hba.conf для лучшего понимания.
Несмотря на то, что я смог запустить django manage.py syncdb, я все равно буду читать о pg_hba.confдокументации, которую вы упомянули, большое спасибо за вашу помощь
daydreamer
Мне просто нужно было добавить-h localhost
Майк
5

Я просто хотел добавить это в дополнение к изменению pg_hba.confфайла из

local   all    all     peer

в

local   all    all     md5

Согласно принятому ответу, единственный способ, с помощью которого я мог войти в систему после выполнения того же действия, которое выполнял OP, - это пропуск -hфлага при попытке входа в систему.

$ psql -U postgres -h localhost

Надеюсь, это поможет кому-то в будущем. Это сводило меня с ума!

JTG
источник
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 ... reloadилиselect pg_reload_conf()
a_horse_with_no_name
Просто перезагрузите ... я не знал ... спасибо
Израиль L Rosas
-1

Для тех, кто сходит с ума после многократного изменения пароля и пробует все упомянутое здесь, не забудьте проверить истечение срока действия пользователя. Вы можете установить «никогда не истек», как это в psql 9.x:

ALTER ROLE <username> VALID UNTIL 'infinity';
kirpit
источник