Я забыл пароль, который ввел при установке postgres

205

Я либо забыл, либо набрал (во время установки) пароль для пользователя по умолчанию в Postgres. Кажется, я не могу его запустить и получаю следующую ошибку:

psql: FATAL:  password authentication failed for user "hisham"
hisham-agil: hisham$ psql 

Есть ли способ сбросить пароль или как создать нового пользователя с привилегиями суперпользователя?

Я новичок в Postgres и только что установил его впервые. Я пытаюсь использовать его с Rails, и я использую Mac OS X Lion.

hilarl
источник
1
Я пока не могу комментировать ответы, поэтому должен сделать это так. Я сделал то, что сказал SaiyanGirl, однако мне все еще нужно было ввести пароль, который был «postgres» для входа, затем я мог сбросить пароль
Pascale

Ответы:

359
  1. найти файл pg_hba.conf- он может быть расположен, например, в /etc/postgresql-9.1/pg_hba.conf.

    cd /etc/postgresql-9.1/

  2. Поддержите это

    cp pg_hba.conf pg_hba.conf-backup

  3. поместите следующую строку (в качестве первой строки без комментариев или в качестве единственной):

Для всех случаев, описанных ниже (локальный и хост), в разделе репликации exepct, если у вас его нет, его необходимо изменить следующим образом, не должно присутствовать никакого подтверждения MD5 или Peer.

local  all   all   trust
  1. перезапустите сервер PostgreSQL (например, в Linux :)

    sudo /etc/init.d/postgresql restart

    Если служба (демон) не запускает отчеты в файле журнала:

    локальные соединения не поддерживаются этой сборкой

    ты должен измениться

    local all all trust

    в

    host all all 127.0.0.1/32 trust

  2. Теперь вы можете подключиться как любой пользователь. Подключитесь как суперпользователь postgres(обратите внимание, что имя суперпользователя может отличаться в вашей установке. pgsqlНапример, в некоторых системах оно называется . )

    psql -U postgres

    или

    psql -h 127.0.0.1 -U postgres

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

  3. Сбросить пароль ('замените my_user_name на postgres, так как вы сбрасываете пользователя postgres )

    ALTER USER my_user_name with password 'my_secure_password';

  4. Восстановите старое, так pg_hba.confкак держать его очень опасно

    cp pg_hba.conf-backup pg_hba.conf

  5. перезагрузите сервер, чтобы запустить с сейфом pg_hba.conf

    sudo /etc/init.d/postgresql restart

Дополнительная информация об этом файле pg_hba: http://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf.html.

Arsen7
источник
9
А потом начать psql? Мне все еще предлагают
ввести
4
этот ответ НЕ работал для меня, после того, как я выполню шаг 3, служба не запустится, я не знаю, может быть, это ОС (W8), просто она не будет.
Скарамуш
3
кто-нибудь для Windows?
Mahesha999
2
Помните, что порядок записей в pg_hba.conf важен. Если вы добавите «local all all trust» в конец файла, он не будет работать так, как вы ожидаете, так как предыдущие записи будут сопоставляться первыми. Поэтому поместите это в начало файла, чтобы получить то, что вы ожидаете.
Тагар
6
Если вы находитесь в Windows с этой ошибкой, продолжайте прокручивать до ответа @SaiyanGirl. Просто измените столбцы METHOD существующих записей на «trust», а затем измените его обратно, когда закончите
sean.hudson
99

При подключении к 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=#
SAEx
источник
7
Спасибо за совет относительно опции "-h", помог мне.
Bunkerbewohner
Не требуется в Windows cmd.exe
Фабьен Хаддади
1
Лучший ответ для Mac
Мухаммед Умар
72

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

SaiyanGirl
источник
Это не работает, потому что PgAdmin по-прежнему запрашивает текущий пароль ... Я сбросил на «доверие» и перезапустил PgAdmin. Все еще не могу сбросить, не введя ТЕКУЩИЙ пароль ...
ген b.
1
После того, как вы измените метод, trustвы можете следовать этому и изменить пароль в cmd
Гилад Грин
12

Просто примечание, в Linux Вы можете просто запустить, sudo su - postgresчтобы стать пользователем postgres, и оттуда изменить то, что требуется с помощью psql.

Даниил
источник
3
вам все еще нужен пароль после запуска psql
Snow
8
  1. Отредактируйте файл /etc/postgresql/<version>/main/pg_hba.confи найдите следующую строку:

    local   all             postgres                                md5
  2. Отредактируйте строку и md5в конце измените на trustи сохраните файл

  3. Перезагрузите сервис postgresql

    $ sudo service postgresql reload
  4. Это загрузит файлы конфигурации. Теперь вы можете изменить postgresпользователя, войдя в psqlоболочку

    $ psql -U postgres
  5. Обновите postgresпароль пользователя

    alter user postgres with password 'secure-passwd-here';
  6. Отредактируйте файл /etc/postgresql/<version>/main/pg_hba.confи trustвернитесь обратно md5и сохраните файл

  7. Перезагрузите сервис postgresql

    $ sudo service postgresql reload
  8. Убедитесь, что смена пароля работает

    $ psql -U postgres -W
Рэй Хантер
источник
Разве так сложно дать решение для Windows? Не все используют Linux с sudo. Как бы я сделал это на Windows?
ген б.
7

У меня просто была эта проблема в Windows 10, и проблема в моем случае заключалась в том, что я просто работал, psqlи по умолчанию он пытался войти в систему с моим именем пользователя Windows («Натан»), но не было пользователя PostgreSQL с таким именем, и это не говорило мне об этом.

Таким образом, решение состояло в том, чтобы запустить, psql -U postgresа не просто psql, и тогда пароль, который я ввел при установке, работал.

Натан Уэйлс
источник
5

Добавление ответа для пользователя Windows для последней версии postgres (> 10),

Перейдите к месту установки 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 на доверие,

# 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

Снова перейдите в файл pg_hba.conf, снова измените МЕТОД с доверия на md5 и сохраните его.

Теперь войдите под своим новым пользователем и паролем, и вы можете проверить \ du для его атрибутов.

Бидхан Маджхи
источник
1

Для установки Windows создается пользователь Windows. И «psql» использует этого пользователя для подключения к порту. Если вы измените пароль пользователя PostgreSQL, он не изменит пароль Windows. Командная строка juste ниже работает, только если у вас есть доступ к командной строке.

Вместо этого вы можете использовать приложение Windows GUI "c: \ Windows \ system32 \ lusrmgr.exe". Это приложение для управления пользователями, созданными Windows. Теперь вы можете изменить пароль.

cpunky
источник
1

Что я сделал, чтобы решить ту же проблему:

Откройте файл pg_hba.conf с помощью редактора gedit из терминала:

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, и сохраните ее.

Inconnu
источник
0

Если вы находитесь в Windows, вы можете просто запустить

net user postgres postgres

и войдите в postgres с помощью postgres / postgres в качестве пользователя / пароля

ivofernandes
источник
0

Файл .pgpass в домашнем каталоге пользователя или файл, на который ссылается PGPASSFILE, может содержать пароли, которые должны использоваться, если для соединения требуется пароль (и в противном случае пароль не был указан). В Microsoft Windows файл называется% APPDATA% \ postgresql \ pgpass.conf (где% APPDATA% относится к подкаталогу Application Data в профиле пользователя).

Этот файл должен содержать строки следующего формата:

Имя хоста: порт: база данных: имя пользователя: пароль

(Вы можете добавить комментарий напоминания в файл, скопировав строку выше и поставив перед ней знак #.) Каждое из первых четырех полей может быть буквальным значением или *, что соответствует чему угодно. Будет использовано поле пароля из первой строки, соответствующее текущим параметрам соединения. (Поэтому при использовании подстановочных знаков ставьте сначала более конкретные записи.) Если запись должна содержать: или \, экранируйте этот символ с помощью. Имя хоста localhost совпадает с соединениями TCP (имя хоста localhost) и сокета домена Unix (pghost empty или каталог сокета по умолчанию), поступающими с локального компьютера. На резервном сервере имя базы данных репликации соответствует подключению потоковой репликации к главному серверу. Поле базы данных имеет ограниченную полезность, поскольку пользователи имеют одинаковый пароль для всех баз данных в одном кластере.

В системах Unix разрешения на .pgpass должны запрещать любой доступ к миру или группе; достигните этого командой chmod 0600 ~ / .pgpass. Если разрешения менее строгие, чем этот, файл будет игнорироваться. В Microsoft Windows предполагается, что файл хранится в безопасном каталоге, поэтому никаких специальных проверок разрешений не производится.

rahulnikhare
источник
Это сработало для меня, когда путь расширился до C: \ Users \ <user> \ AppData \ Roaming \ postgresql \ pgpass.conf. Также помогло выключение и включение сервера PostgreSQL.
Геоданные
0

Если вы работаете в PostgreSQL на Mac OS, попробуйте это :

  1. Отредактируйте файл pg_hba.conf

  2. sudo vi /Library/PostgreSQL/9.2/data/pg_hba.conf

  3. Измените метод «md5» для всех пользователей на «доверие» внизу файла

  4. Найти название сервиса

  5. ls / Библиотека / LaunchDaemons

  6. Ищите postgresql

  7. Остановите службу postgresql

  8. sudo launchctl stop com.edb.launchd.postgresql-9.2

  9. Запустите сервис postgresql

  10. sudo launchctl start com.edb.launchd.postgresql-9.2

  11. Начать psql сессию как postgres

  12. psql -U postgres

  13. (не следует запрашивать пароль из-за настройки доверия)

  14. Сбросить пароль в сессии psql, набрав

  15. ALTER USER postgres с паролем 'secure-new-password';

  16. \ д
  17. войти

  18. Отредактируйте файл pg_hba.conf

  19. Переключите его обратно на «md5»

  20. Перезапустите сервисы снова

Дэвид
источник
-1

Вот что у меня сработало на windows:

Отредактируйте файл pg_hba.conf, расположенный в C: \ Program Files \ PostgreSQL \ 9.3 \ data.

# IPv4 local connections: host all all 127.0.0.1/32 trust

Измените метод с доверия на md5 и перезапустите службу postgres в Windows.

После этого вы можете войти, используя postgres, без пароля, используя pgadmin. Вы можете изменить пароль, используя File-> Change password.

Если пользователь postgres не имеет привилегий суперпользователя, вы не можете изменить пароль. В этом случае войдите в систему с другим пользователем (pgsql) с правами суперпользователя и предоставьте привилегии другим пользователям, щелкнув правой кнопкой мыши по пользователям и выбрав Свойства-> Ролевые привилегии.

Четан
источник