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.