PostgreSQL: Як змінити пароль користувача PostgreSQL?


Відповіді:


1402

Для пароля, менший за вхід:

sudo -u user_name psql db_name

Щоб скинути пароль, якщо ви забули:

ALTER USER user_name WITH PASSWORD 'new_password';

126
Це дозволить очистити пароль в історії команд postgresql користувача.
greg

118
@greg: так видаліть його:rm ~/.psql_history
RickyA

43
поза темою, але якщо хтось шукає "як змінити ім'я користувача", ніж це зробити ALTER USER myuser RENAME TO newname;... чомусь google вказував мені тут, коли я гуглю, що :)
рівнозначно

10
Чому ви використовуєте і ", і" лапки? Я маю на увазі різницю, і в запиті DML ви повинні використовувати ", коли маєте справу з рядками, але чи є особлива причина використовувати обидва тут?
Boyan

7
Користувач - це об'єкт, а не рядок. Порівняйте з ALTER TABLE "table_name" або навіть SELECT * FROM "table_name". Ви не можете використовувати одиничні лапки в цих контекстах з таблицями, і це те ж саме з користувачами / ролями.
P тато

630

Потім введіть:

$ sudo -u postgres psql

Тоді:

\password postgres

Потім вийти psql:

\q

Якщо це не працює, переконфігуруйте аутентифікацію.

Редагувати /etc/postgresql/9.1/main/pg_hba.conf(шлях буде відрізнятися) та змінити:

    local   all             all                                     peer

до:

    local   all             all                                     md5

Потім перезавантажте сервер:

$ sudo service postgresql restart

3
що пароль за замовчуванням для postgres? змінив це випадково; можливо скинути?
Саад

2
(на psql 9.2) якщо я ввожу \p, він надає мені пароль; якщо я \password postgres\p extra argument "assword" ignored; \p extra argument "postgres" ignored
набираю

1
Це набагато краще, ніж залишати пароль в історії команд SQL.
отокан

1
@ZacharyScott Що ти кажеш?
TheRealChx101

2
Щоб змінити пароль користувача postgres в Linux:sudo passwd postgres
Punnerud,

88

Ви можете та маєте зашифровувати пароль користувачів:

ALTER USER username WITH ENCRYPTED PASSWORD 'password';

45
Це ключове слово не має значення для поточної версії. З повідомлення postgresql.org/docs/current/static/sql-createrole.html The password is always stored encrypted in the system catalogs. The ENCRYPTED keyword has no effect, but is accepted for backwards compatibility.
John29

5
Остерігайся! @ John29 коментар вірний лише від Postgresql 10 і вище. Для всіх інших версій прапор ВИМОГАНИЙ має значення.
феп

51

Я вважаю, що найкращим способом зміни пароля є просто використання:

\password

в консолі Postgres.

Джерело:

Необхідно бути обережними, вказуючи незашифрований пароль за допомогою цієї команди. Пароль буде переданий серверу в явному тексті, а також він може бути введений в історію команд клієнта або в журнал сервера. psql містить команду \ пароль, яку можна використовувати для зміни пароля ролі, не виставляючи пароль ясного тексту.

з https://www.postgresql.org/docs/9.0/static/sql-alterrole.html .


8
Це також можна використовувати для зміни паролів для інших користувачів:\password username
Мартін

34

Щоб змінити пароль за допомогою командного рядка Linux, використовуйте:

sudo -u <user_name> psql -c "ALTER USER <user_name> PASSWORD '<new_password>';"

5
Просто пам’ятайте, що це, ймовірно, збереже пароль користувача db у вашій історії команд.
Педро Кордейро

2
чи можете ви тут використовувати змінні середовища? Я хочу автоматизувати це в сценарії розгортання
TheRealChx101

26

Щоб змінити пароль

 sudo -u postgres psql

тоді

\password postgres

тепер введіть новий пароль і підтвердьте

потім \qдля виходу


1
ця відповідь допоможе мені. спасибі
mohammad jawad Barati

24

Перейдіть до свого Postgresql Config та відредагуйте pg_hba.conf

sudo vim /etc/postgresql/9.3/main/pg_hba.conf

Потім змініть цей рядок:

Database administrative login by Unix domain socket
local      all              postgres                                md5

до:

Database administrative login by Unix domain socket
local   all             postgres                                peer

потім перезапустіть службу PostgreSQL за допомогою команди SUDO

psql -U postgres

Ви будете введені і побачите термінал Postgresql

потім введіть

\password

і введіть НОВИЙ пароль для користувача за замовчуванням Postgres. Після успішної зміни пароля знову перейдіть до pg_hba.conf і поверніть зміну до "md5"

тепер ви будете ввійти як

psql -U postgres

з новим паролем.

Повідомте мене, якщо ви знайдете в ньому якісь проблеми.


Це не працює:user@user-NC10:~$ psql -U postgres psql: FATAL: Peer authentication failed for user "postgres"
GM

Гаразд, зробіть інший метод sudo su - postgres psql Ви ввійдете в термінал, а потім зміните пароль. Це альтернативний спосіб для цього. Повідомте мене, чи працює це для вас чи вам потрібно повне пояснення
Муртаза Канчвала

мм я спробував, але у мене є ще одна помилка: / usr / bin / psql: рядок 19: використання: команда не знайдена / usr / bin / psql: рядок 21: використання: команда не знайдена / usr / bin / psql: рядок 23: використання: команда не знайдена / usr / bin / psql: рядок 24: використання: команда не знайдена / usr / bin / psql: psql: рядок 26: помилка синтаксису біля несподіваного токена $version,' /usr/bin/psql: psql: line 26: my ($ версія, $ cluster, $ db, $ port , $ хост); ' спасибі за вашу допомогу!
GM

11

Щоб запросити новий пароль для користувача postgres (не показуючи його в команді):

sudo -u postgres psql -c "\password"

9

Конфігурація, яку я отримав на своєму сервері, була настроєна дуже багато, і мені вдалося змінити пароль лише після встановлення автентифікації довіри у pg_hba.confфайлі :

local   all   all   trust

Не забудьте змінити цей пароль на пароль або md5


1
Вам також потрібно перезапустити послугу sudo systemctl restart postgresql.service
Postgres,

куди повинен піти цей файл pg_hba.conf?
JMStudios.jrichardson

8

Це був перший результат у Google, коли я шукав, як перейменувати користувача, так:

ALTER USER <username> WITH PASSWORD '<new_password>';  -- change password
ALTER USER <old_username> RENAME TO <new_username>;    -- rename user

Кілька інших команд, корисних для управління користувачем:

CREATE USER <username> PASSWORD '<password>' IN GROUP <group>;
DROP USER <username>;

Переміщення користувача до іншої групи

ALTER GROUP <old_group> DROP USER <username>;
ALTER GROUP <new_group> ADD USER <username>;

7

У моєму випадку на Ubuntu 14.04, встановлений з postgres 10.3. Мені потрібно виконати наступні кроки

  • su - postgres щоб переключити користувача на postgres
  • psql щоб ввести оболонку постгресів
  • \password потім введіть свій пароль
  • \q щоб вийти з сеансу оболонки
  • Потім ви переходите назад до root, виконуючи exitта налаштовуючи pg_hba.conf(мій знаходиться на /etc/postgresql/10/main/pg_hba.conf), переконуючись, що у вас є наступний рядок

    local all postgres md5

  • Перезавантажте послугу postgres за допомогою service postgresql restart
  • Тепер перейдіть до postgresкористувача та знову введіть оболонку постгрес. Він підкаже вам пароль.

Я не думаю, що вам дійсно не потрібно перезапускати службу postgresql після зміни пароля. Я зміг скинути пароль, перезавантаживши його. \ пароль - найшвидший спосіб. Або вам потрібна команда ALTER USER.
Архит Капур

3

використовуй це:

\password

введіть новий пароль, який ви хочете для цього користувача, а потім підтвердіть його. Якщо ви не пам’ятаєте пароль і хочете його змінити, ви можете увійти як постгрес, а потім скористатися цим:

ALTER USER 'the username' WITH PASSWORD 'the new password';

3

Подібно до інших відповідей у ​​синтаксисі, але слід знати, що ви також можете передати md5 пароля, щоб не передати звичайний текстовий пароль.

Ось кілька сценаріїв ненавмисних наслідків зміни пароля користувачів у простому тексті.

  1. Якщо у вас немає SSL і ви віддалено змінюєте, ви передаєте звичайний текстовий пароль по всій мережі.
  2. Якщо у вас налаштування журналу встановлено для реєстрації виписок DDL log_statement = ddl або вище, ваш звичайний текстовий пароль відображатиметься у ваших журналах помилок.
    1. Якщо ви не захищаєте ці журнали, це проблема.
    2. Якщо ви збираєте ці журнали / ETL їх і відображаєте їх там, де інші мають доступ, вони можуть побачити цей пароль тощо.
    3. Якщо ви дозволите користувачеві керувати своїм паролем, він несвідомо розкриває пароль адміністратору або співробітнику низького рівня, якому доручено переглядати журнали.

З урахуванням сказаного ось як ми можемо змінити пароль користувача, побудувавши md5 пароля.

  • Postgres, коли має хеш-пароль як md5, солює пароль із іменем користувача, після чого додає текст "md5" до отриманого хешу.
  • напр .: "md5" + md5 (пароль + ім'я користувача)

  • В bash:

    ~$ echo -n "passwordStringUserName" | md5sum | awk '{print "md5"$1}'
    md5d6a35858d61d85e4a82ab1fb044aba9d
  • В PowerShell:
    [PSCredential] $Credential = Get-Credential

    $StringBuilder = New-Object System.Text.StringBuilder

    $null = $StringBuilder.Append('md5');

    [System.Security.Cryptography.HashAlgorithm]::Create('md5').ComputeHash([System.Text.Encoding]::ASCII.GetBytes(((ConvertFrom-SecureStringToPlainText -SecureString $Credential.Password) + $Credential.UserName))) | ForEach-Object {
        $null = $StringBuilder.Append($_.ToString("x2"))
    }

    $StringBuilder.ToString();

    ## OUTPUT
    md5d6a35858d61d85e4a82ab1fb044aba9d
  • Тож нарешті ALTER USERбуде виглядати наша команда
    ALTER USER UserName WITH PASSWORD 'md5d6a35858d61d85e4a82ab1fb044aba9d';
  • Відповідні посилання (Примітка. Я посилатимусь лише на останні версії документів для старих, деякі змінили, але md5 все ще підтримує шляхи повернення.)
  • створити роль
  • Пароль завжди зберігається зашифрованим у системних каталогах. Ключове слово ENCRYPTED не впливає, але воно прийняте для зворотної сумісності. Спосіб шифрування визначається параметром конфігурації password_encryption. Якщо представлений рядок пароля вже в зашифрованому MD5 або зашифрованому SCRAM форматі, він зберігається як-незалежно від пароля_кодування (оскільки система не може розшифрувати вказаний зашифрований рядок пароля, щоб зашифрувати його в іншому форматі). Це дозволяє перезавантажити зашифровані паролі під час скидання / відновлення.

  • налаштування конфігурації для пароля_кодування
  • postgres автентифікація пароля doc
  • побудова пароля postgres md5

1

Як правило, просто використовуйте інтерфейс адміністратора pg для здійснення діяльності, пов’язаної з db.

Якщо замість цього, ви більше зосереджуєтесь на автоматизації налаштування бази даних для вашого локального розвитку, або CI тощо ...

Наприклад, ви можете використовувати просту комбо, як це.

(a) Створіть фіктивного суперкористувача через jenkins командою, подібною до цієї:

docker exec -t postgres11-instance1 createuser --username=postgres --superuser experiment001

це створить супер користувача під назвою експеримент001 у вашому postgres db.

(b) Дайте цьому користувачеві пароль, виконавши команду NON-Interactive SQL.

docker exec -t postgres11-instance1 psql -U experiment001 -d postgres -c "ALTER USER experiment001 WITH PASSWORD 'experiment001' "

Postgres - це, мабуть, найкраща база даних для інструментального командного рядка (неінтерактивного). Створення користувачів, запуск SQL, створення резервних копій баз даних і т.д. ... Взагалі це все досить просто з postgres, і взагалі досить тривіально інтегрувати це у свої сценарії налаштування розробки або в автоматизовану конфігурацію CI.


1

і повністю автоматизований спосіб з bash and очікуванням ( у цьому прикладі ми надаємо новий адмістр postgres з нещодавно передбаченими postgres pw як на OS, так і на рівні виконання postgres)

  # the $postgres_usr_pw and the other bash vars MUST be defined 
  # for reference the manual way of doing things automated with expect bellow
  #echo "copy-paste: $postgres_usr_pw"
  #sudo -u postgres psql -c "\password"
  # the OS password could / should be different
  sudo -u root echo "postgres:$postgres_usr_pw" | sudo chpasswd

  expect <<- EOF_EXPECT
     set timeout -1
     spawn sudo -u postgres psql -c "\\\password"
     expect "Enter new password: "
     send -- "$postgres_usr_pw\r"
     expect "Enter it again: "
     send -- "$postgres_usr_pw\r"
     expect eof
EOF_EXPECT

  cd /tmp/
  # at this point the postgres uses the new password
  sudo -u postgres PGPASSWORD=$postgres_usr_pw psql \
    --port $postgres_db_port --host $postgres_db_host -c "
  DO \$\$DECLARE r record;
     BEGIN
        IF NOT EXISTS (
           SELECT
           FROM   pg_catalog.pg_roles
           WHERE  rolname = '"$postgres_db_useradmin"') THEN
              CREATE ROLE "$postgres_db_useradmin" WITH SUPERUSER CREATEROLE
              CREATEDB REPLICATION BYPASSRLS 
 PASSWORD '"$postgres_db_useradmin_pw"' LOGIN ;
        END IF;
     END\$\$;
  ALTER ROLE "$postgres_db_useradmin" WITH SUPERUSER CREATEROLE
  CREATEDB REPLICATION BYPASSRLS 
PASSWORD  '"$postgres_db_useradmin_pw"' LOGIN ;
 "

0

TLDR:

У багатьох системах в обліковому записі користувача часто міститься період або певний пункт (користувач: john.smith, horise.johnson). У цих випадках потрібно буде внести зміни до прийнятої відповіді вище. Зміна вимагає подвійного котирування імені користувача.

Example:

ALTER USER "username.lastname" WITH PASSWORD 'password'; 

Раціональний:

Postgres досить прискіпливий до того, коли використовувати "подвійну цитату" та коли використовувати "єдину цитату". Зазвичай при наданні рядка ви використовуєте одну пропозицію.

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