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

Як сказав Willglynn, це, ймовірно, ваш файл 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

Відповідно до прийнятої відповіді, єдиний спосіб, коли я міг увійти, зробивши те саме, що робив ОП, - це передати -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 ... reloadабоselect pg_reload_conf()
— a_horse_with_no_name

Просто перезавантажте ... я не знав ... дякую
— Ізраїль L Росас

-1

Для тих, хто божевільний після того, як багато разів змінив пароль і спробував усе, що згадується тут, не забудьте перевірити термін дії користувача. Ви можете встановити його "ніколи не закінчується", як це в psql 9.x:

ALTER ROLE <username> VALID UNTIL 'infinity';

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.