Забытый пароль PostgreSQL для Windows

31

Сегодня утром я пытался подключить базу данных PostgreSQL на моем рабочем столе Windows 7 Professional.

Значением по умолчанию является «postgres», но, разумеется, я забыл, какой пароль я использовал при первоначальной установке.

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

net user postgres postgres

сбросить пароль для моей базы данных, но вместо сообщения об успехе я получаю:

«Произошла системная ошибка 5. Доступ запрещен.»

системная ошибка. Как мне избежать этой ошибки и сбросить пароль?

AKIWEB
источник

Ответы:

33

(Примечание: не многое из этого относится к читателям, использующим PostgreSQL 9.2 или более поздней версии из установщиков EDB, которые теперь имеют значительно упрощенную установку по умолчанию с использованием NETWORK SERVICE, хотя вы все равно можете настраивать другие учетные записи) .


Я использовал net user postgres postgres для сброса пароля для моей базы данных, но вместо сообщения об успехе я получаю"System error 5 has occurred. Access is denied."

Вы сбросили (или попытались сбросить) пароль учетной записи службы. PostgreSQL не будет работать от имени администратора по соображениям безопасности, и установщик обычно устанавливает его с учетной записью «postgres» в PostgreSQL 9.1 и более ранних версиях 1 . В Windows вы не можете запустить службу как пользователь, не сохранив пароль пользователя в реестре, так что это делает установщик.

Если вы измените пароль для учетной записи пользователя Windows postgres, служба PostgreSQL больше не сможет запуститься. Так что не делайте этого, вам придется исправить конфигурацию сервиса, чтобы сохранить обновленный пароль.

К счастью, я думаю, что другая ошибка помешала вам сделать это. Похоже, что вы, вероятно, запускаете командную строку без использования «Запуск от имени администратора» для непривилегированной учетной записи пользователя Windows или компьютера с UAC, поэтому он не запускается с разрешениями доступа, необходимыми для изменения пароля для postgresпользователя.

Прежде чем пытаться изменить этот пароль, убедитесь, что это действительно то, что вы хотите сделать. Какую проблему вы пытаетесь решить здесь? Вы пытаетесь установить обновление базы данных или что-то еще, запрашивающее пароль для postgresпользователя Windows?

Скорее всего, вы просто пытаетесь войти в базу данных. Для этого вы используете (к сожалению, совершенно не связанный) пароль, хранящийся в самой базе данных. Так как вы потеряли / забыли его, вам придется сбросить его:

  • Найди свой pg_hba.conf, обычно вC:\Program Files\PostgreSQL\9.1\data\pg_hba.conf
  • Если необходимо, установите разрешения для него, чтобы вы могли изменить его; Ваша учетная запись пользователя может быть не в состоянии сделать это, пока вы не используете вкладку безопасности в диалоговом окне свойств, чтобы предоставить себе это право с помощью переопределения администратора. Кроме того, найдите notepad / notepad ++ в меню «Пуск», щелкните правой кнопкой мыши, выберите «Запуск от имени администратора», затем используйте File-> Open, чтобы открыть pg_hba.confэтот путь.
  • Отредактируйте его, чтобы установить строку "host" для пользователя "postgres" на хосте "127.0.0.1/32" в значение "trust". Вы можете добавить строку, если ее там нет; просто вставьте:

    host all postgres 127.0.0.1/32 trust
    host all postgres ::1/128      trust # if IPv6 is in use
    

    перед любыми другими строчками. (Вы можете игнорировать комментарии, строки начинающиеся с #).

  • Перезапустите службу PostgreSQL из панели управления службами (start-> run-> services.msc)

  • подключиться с помощью psql или PgAdmin-III или что угодно
  • ALTER USER postgres PASSWORD 'postgres'
  • удалите добавленную вами строку pg_hba.confили измените ее обратно
  • перезапустите PostgreSQL снова.

Смотрите: Как мне сбросить пароль postgres для PostgreSQL в Windows?


1. 9.2 теперь использует NETWORKSERVICEучетную запись, которая не требует пароля, поэтому эта проблема исчезнет .

Крейг Рингер
источник
8
Вам также может понадобиться запись ip6: "host all postgres :: 1/128 trust"
Тед Эллиотт
Тем не менее у меня возникли проблемы с PostreSQL 9.6 на моей машине разработчика. Не уверены, почему люди думают, что это не поможет> 9.2
тур вниз по
@darwindave Зависит от вашей установки. Если вы установили использование NETWORKSERVICEучетной записи пользователя, пароль учетной записи servce отсутствует. Если вы установили для использования выделенную учетную запись службы, например postgresили учетную запись домена, то это может помочь.
Крейг Рингер,
Можете ли вы привести этот ответ в соответствие с версией 9.2+, показывающей оба метода для Windows?
Эван Кэрролл
1
@EvanCarroll Если вы используете NETWORK SERVICE, нет пароля для сброса. Если вы установили на 9.2+ с использованием другой учетной записи, применяется та же информация. И нет никаких изменений в части сброса пароля учетной записи базы данных postgres superuser . Так что никаких изменений не требуется.
Крейг Рингер
3

Вы должны различать пользователя вашей системы (Windows) с именем «postgres» и пользователя базы данных с тем же именем.

Найдите свой файл pg_hba.conf - он контролирует доступ к серверу PostgreSQL. Вам нужно будет отредактировать его как пользователь с правами администратора. Найдите строки, в которых упоминается пользователь «postgres», и временно установите режим «доверие». Перезапустите postgresql, и тогда вы сможете подключиться без пароля. Сбросьте пароль, затем восстановите исходные настройки файла и перезапустите PostgreSQL.

Руководство содержит подробную информацию о методах аутентификации и файле pg_hba.conf .

Ричард Хакстон
источник
0

Если кто-то еще сталкивается с этой проблемой, а также с помощью pgAdmin, я предлагаю вам взглянуть на это: http://www.homebrewandtechnology.com/blog/graphicallychangepostgresadminpassword

Ленинский Эль
источник
3
Возможно, вы захотите добавить существенные моменты статьи, на которую вы ссылаетесь, прямо в ваше сообщение, в противном случае этот ответ станет бесполезным, когда (не если ) ссылка устареет.
mustaccio