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

148

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

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

В любом случае существует ли пароль reset или как создать нового пользователя с привилегиями суперпользователя?

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

  • 0
    Я пока не могу комментировать ответы, поэтому должен сделать это так. Я сделал то, что сказал SaiyanGirl, однако мне все еще нужно было ввести пароль, который был «postgres» для входа, затем я мог сбросить пароль
Теги:
postgresql-9.1
forgot-password

11 ответов

304
Лучший ответ
  • найдите файл pg_hba.conf - он может быть расположен, например, в /etc/postgresql-9.1/pg_hba.conf.

    cd /etc/postgresql-9.1/

  • Резервное копирование

    cp pg_hba.conf pg_hba.conf-backup

  • поместите следующую строку (либо как первую строку без комментирования, либо как единственную):

    local all all trust

  • перезагрузите сервер PostgreSQL (например, в Linux:)

    sudo /etc/init.d/postgresql restart

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

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

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

    local all all trust

    к

    host all all 127.0.0.1/32 trust

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

    psql -U postgres

    или

    psql -h 127.0.0.1 -U postgres

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

  • Reset пароль

    ALTER USER my_user_name with password 'my_secure_password';

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

    cp pg_hba.conf-backup pg_hba.conf

  • перезапустите сервер, чтобы работать с безопасным pg_hba.conf

    sudo /etc/init.d/postgresql restart

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

  • 1
    Вот и все. Если возможно, сделайте это на консоли и отключите компьютер от сети, пока вы делаете это, чтобы никто не взломал его во время работы.
  • 8
    А потом начать psql ? Мне все еще предлагают ввести пароль, и я не знаю его
Показать ещё 10 комментариев
75

При подключении к postgres из командной строки не забудьте добавить -h localhost в качестве параметра командной строки. Если нет, postgres попытается подключиться с использованием режима аутентификации PEER.

Ниже приведено reset пароля, неудачный вход с аутентификацией 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=#
  • 6
    Спасибо за совет относительно опции "-h", помог мне.
  • 0
    Не требуется в Windows cmd.exe
51

Файл 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

  • 0
    Работало на windows, спасибо
  • 0
    Это не работает, потому что PgAdmin по-прежнему запрашивает текущий пароль ... Я сбросил на «доверие» и перезапустил PgAdmin. Все еще не могу сбросить без ввода в ТЕКУЩИЙ пароль ...
Показать ещё 1 комментарий
5

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

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

1
  • Отредактируйте файл /etc/postgresql/<version>/main/pg_hba.conf и найдите следующую строку:

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

  • Перезагрузите службу postgresql

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

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

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

  • Перезагрузите службу postgresql

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

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

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

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

1

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

net user postgres postgres

и войти в postgres с postgres/postgres как пользователь/пароль

0

Добавление ответа для пользователя Windows для последней версии (> 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 для его атрибутов.

0

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

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

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

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

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

-2

Вот что у меня сработало на 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-> Изменить пароль.

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню