PostgreSQL: Wie ändere ich das PostgreSQL-Benutzerkennwort?

Antworten:

1406

Für passwortloses Login:

sudo -u user_name psql db_name

So setzen Sie das Passwort zurück, wenn Sie es vergessen haben:

ALTER USER user_name WITH PASSWORD 'new_password';
solaimuruganv
quelle
126
Dadurch wurde das Kennwort im postgresql-Befehlsverlauf des Benutzers gelöscht.
Greg
118
@greg: so löschen Sie es:rm ~/.psql_history
RickyA
43
Off Topic, aber wenn jemand nach "wie man den Namen des Benutzers ändert" als ALTER USER myuser RENAME TO newname;... tut ... aus irgendeinem Grund hat mich Google hier gezeigt, als ich das gegoogelt habe :)
äquivalent8
10
Warum verwenden Sie sowohl "als auch" Anführungszeichen? Ich meine, es gibt einen Unterschied, und in einer DML-Abfrage müssen Sie "beim Umgang mit Zeichenfolgen verwenden, aber gibt es einen besonderen Grund, beide hier zu verwenden?
Boyan
7
Der Benutzer ist ein Objekt, keine Zeichenfolge. Vergleichen Sie mit ALTER TABLE "Tabellenname" oder sogar SELECT * FROM "Tabellenname". In diesen Kontexten konnten Sie keine einfachen Anführungszeichen für Tabellen verwenden, und dies gilt auch für Benutzer / Rollen.
P Daddy
630

Geben Sie dann Folgendes ein:

$ sudo -u postgres psql

Dann:

\password postgres

Dann zu beenden psql:

\q

Wenn dies nicht funktioniert, konfigurieren Sie die Authentifizierung neu.

Bearbeiten /etc/postgresql/9.1/main/pg_hba.conf(Pfad unterscheidet sich) und ändern:

    local   all             all                                     peer

zu:

    local   all             all                                     md5

Starten Sie dann den Server neu:

$ sudo service postgresql restart
Clint Bugs
quelle
3
Was ist das Standardkennwort für Postgres? änderte es versehentlich; zurücksetzen möglich?
Saad
2
(auf psql 9.2) Wenn ich eintippe \p, gibt es mir das Passwort; Wenn ich \password postgreses \p extra argument "assword" ignored; \p extra argument "postgres" ignored
eingebe,
1
Dies ist viel besser, als das Kennwort im SQL-Befehlsverlauf zu belassen.
Otocan
1
@ ZacharyScott Was sagst du?
TheRealChx101
2
So ändern Sie das Passwort für den Postgres-Benutzer unter Linux:sudo passwd postgres
Punnerud
88

Sie können und sollten das Kennwort des Benutzers verschlüsseln lassen:

ALTER USER username WITH ENCRYPTED PASSWORD 'password';
yglodt
quelle
45
Dieses Schlüsselwort spielt für die aktuelle Version keine Rolle. Von 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
In acht nehmen! @ John29 Kommentar gilt nur ab Postgresql 10 und höher. Für alle anderen Versionen ist das ENCRYPTED-Flag von Bedeutung.
Phep
51

Ich glaube, der beste Weg, um das Passwort zu ändern, ist einfach zu verwenden:

\password

in der Postgres-Konsole.

Quelle:

Bei der Angabe eines unverschlüsselten Passworts mit diesem Befehl ist Vorsicht geboten. Das Kennwort wird im Klartext an den Server übertragen und möglicherweise auch im Befehlsverlauf des Clients oder im Serverprotokoll protokolliert. psql enthält einen Befehl \ password, mit dem das Kennwort einer Rolle geändert werden kann, ohne das Klartextkennwort offenzulegen.

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

Viktor Nordling
quelle
8
Dies kann auch verwendet werden, um Passwörter für andere Benutzer zu ändern:\password username
Martin
34

Verwenden Sie Folgendes, um das Kennwort über die Linux-Befehlszeile zu ändern:

sudo -u <user_name> psql -c "ALTER USER <user_name> PASSWORD '<new_password>';"
Vajira Lasantha
quelle
5
Denken Sie daran, dass dadurch wahrscheinlich das Benutzerkennwort der Datenbank in Ihrem Befehlsverlauf gespeichert wird.
Pedro Cordeiro
2
Können Sie hier Umgebungsvariablen verwenden? Ich möchte dies in einem Bereitstellungsskript automatisieren
TheRealChx101
26

Passwort ändern

 sudo -u postgres psql

dann

\password postgres

Geben Sie nun Neues Passwort ein und bestätigen Sie

dann \qzu beenden

Akitha_MJ
quelle
1
Diese Antwort hilft mir. danke
mohammad jawad Barati
24

Gehen Sie zu Ihrer Postgresql-Konfiguration und bearbeiten Sie pg_hba.conf

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

Dann ändern Sie diese Zeile:

Database administrative login by Unix domain socket
local      all              postgres                                md5

zu:

Database administrative login by Unix domain socket
local   all             postgres                                peer

Starten Sie dann den PostgreSQL-Dienst über den Befehl SUDO neu

psql -U postgres

Sie werden nun eingegeben und sehen das Postgresql-Terminal

dann eingeben

\password

und geben Sie das NEUE Passwort für den Standardbenutzer von Postgres ein. Nachdem Sie das Passwort erneut erfolgreich geändert haben, gehen Sie zur Datei pg_hba.conf und setzen Sie die Änderung auf "md5" zurück.

Jetzt werden Sie als angemeldet

psql -U postgres

mit Ihrem neuen Passwort.

Lassen Sie mich wissen, wenn Sie alle ein Problem darin finden.

Murtaza Kanchwala
quelle
Es funktioniert nicht:user@user-NC10:~$ psql -U postgres psql: FATAL: Peer authentication failed for user "postgres"
GM
Ok, mache eine andere Methode sudo su - postgres psql Du wirst das Terminal betreten und dort das Passwort ändern. Dies ist eine alternative Möglichkeit dafür. Lassen Sie mich wissen, ob dies für Sie funktioniert oder Sie eine vollständige Erklärung benötigen
Murtaza Kanchwala
mm Ich habe es versucht, aber ich habe einen anderen Fehler: / usr / bin / psql: Zeile 19: Verwendung: Befehl nicht gefunden / usr / bin / psql: Zeile 21: Verwendung: Befehl nicht gefunden / usr / bin / psql: Zeile 23: use: Befehl nicht gefunden / usr / bin / psql: Zeile 24: use: Befehl nicht gefunden / usr / bin / psql: psql: Zeile 26: Syntaxfehler in der Nähe eines unerwarteten Tokens $version,' /usr/bin/psql: psql: line 26: my ($ version, $ cluster, $ db, $ port , $ host); ' danke für Ihre Hilfe!
GM
11

So fordern Sie ein neues Passwort für den Benutzer von postgres an (ohne es im Befehl anzuzeigen ):

sudo -u postgres psql -c "\password"
lcnicolau
quelle
9

Die Konfiguration, die ich auf meinem Server habe, wurde stark angepasst und ich konnte das Kennwort erst ändern, nachdem ich die Vertrauensauthentifizierung in der pg_hba.confDatei festgelegt hatte :

local   all   all   trust

Vergessen Sie nicht, dies wieder in Passwort oder MD5 zu ändern

ruruskyi
quelle
1
Sie müssen auch Ihren Postgres-Dienst neu starten, damit Änderungen wirksam werdensudo systemctl restart postgresql.service
Sampath Surineni
Wohin soll diese Datei pg_hba.conf gehen?
JMStudios.jrichardson
8

Dies war das erste Ergebnis bei Google, als ich nach dem Umbenennen eines Nutzers suchte.

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

Einige andere Befehle, die für die Benutzerverwaltung hilfreich sind:

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

Benutzer in eine andere Gruppe verschieben

ALTER GROUP <old_group> DROP USER <username>;
ALTER GROUP <new_group> ADD USER <username>;
Salvador Dali
quelle
7

Für meinen Fall unter Ubuntu 14.04 mit Postgres 10.3 installiert. Ich muss die folgenden Schritte ausführen

  • su - postgres Benutzer wechseln zu postgres
  • psql Postgres Shell betreten
  • \password Geben Sie dann Ihr Passwort ein
  • \q um die Shell-Sitzung zu beenden
  • Dann wechseln Sie zurück zu root, indem Sie exitIhre pg_hba.conf(meine ist bei /etc/postgresql/10/main/pg_hba.conf) ausführen und konfigurieren, indem Sie sicherstellen, dass Sie die folgende Zeile haben

    local all postgres md5

  • Starten Sie Ihren Postgres-Dienst neu durch service postgresql restart
  • postgresWechseln Sie nun zu Benutzer und geben Sie die Postgres-Shell erneut ein. Sie werden aufgefordert, ein Passwort einzugeben.
haxpor
quelle
Ich glaube nicht, dass Sie den postgresql-Dienst nach dem Ändern des Passworts wirklich neu starten müssen. Ich konnte das Passwort beim Neustart zurücksetzen. \ Passwort ist der schnellste Weg. Oder Sie benötigen den Befehl ALTER USER.
Archit Kapoor
3

benutze das:

\password

Geben Sie das gewünschte neue Passwort für diesen Benutzer ein und bestätigen Sie es. Wenn Sie sich nicht an das Passwort erinnern und es ändern möchten, können Sie sich als Postgres anmelden und dann Folgendes verwenden:

ALTER USER 'the username' WITH PASSWORD 'the new password';
Chris Dare
quelle
3

Ähnlich wie bei anderen Antworten in der Syntax, es sollte jedoch bekannt sein, dass Sie auch ein MD5 des Kennworts übergeben können, damit Sie kein Nur-Text-Kennwort übertragen.

Im Folgenden finden Sie einige Szenarien mit unbeabsichtigten Folgen einer Änderung des Benutzerkennworts im Klartext.

  1. Wenn Sie nicht über SSL verfügen und remote Änderungen vornehmen, übertragen Sie das Nur-Text-Kennwort über das Netzwerk.
  2. Wenn Sie Ihre Protokollierungskonfiguration so eingestellt haben, dass DDL-Anweisungen log_statement = ddloder höher protokolliert werden , wird Ihr Nur-Text-Kennwort in Ihren Fehlerprotokollen angezeigt.
    1. Wenn Sie diese Protokolle nicht schützen, ist dies ein Problem.
    2. Wenn Sie diese Protokolle / ETL sammeln und dort anzeigen, wo andere Zugriff haben, wird ihnen möglicherweise dieses Kennwort usw. angezeigt.
    3. Wenn Sie einem Benutzer erlauben, sein Kennwort zu verwalten, gibt er unwissentlich ein Kennwort an einen Administrator oder einen Mitarbeiter auf niedriger Ebene weiter, der mit der Überprüfung von Protokollen beauftragt ist.

Nachdem dies gesagt wurde, können wir das Passwort eines Benutzers ändern, indem wir einen MD5 des Passworts erstellen.

  • Postgres, wenn ein Passwort als md5 gehasht wird, salzt das Passwort mit dem Benutzernamen und stellt dem resultierenden Hash den Text "md5" voran.
  • Beispiel: "md5" + md5 (Passwort + Benutzername)

  • In Bash:

    ~$ echo -n "passwordStringUserName" | md5sum | awk '{print "md5"$1}'
    md5d6a35858d61d85e4a82ab1fb044aba9d
  • In 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
  • Also wird unser ALTER USERBefehl endlich so aussehen
    ALTER USER UserName WITH PASSWORD 'md5d6a35858d61d85e4a82ab1fb044aba9d';
  • Relevante Links (Hinweis: Ich werde nur auf die neuesten Versionen der Dokumente verweisen, wenn ältere Änderungen vorgenommen wurden, aber md5 unterstützt noch einen Weg zurück.)
  • Rolle erstellen
  • Das Passwort wird immer verschlüsselt in den Systemkatalogen gespeichert. Das Schlüsselwort ENCRYPTED hat keine Auswirkung, wird jedoch aus Gründen der Abwärtskompatibilität akzeptiert. Die Verschlüsselungsmethode wird durch den Konfigurationsparameter password_encryption bestimmt. Wenn die angegebene Kennwortzeichenfolge bereits im MD5-verschlüsselten oder SCRAM-verschlüsselten Format vorliegt, wird sie unabhängig von der Kennwortverschlüsselung unverändert gespeichert (da das System die angegebene verschlüsselte Kennwortzeichenfolge nicht entschlüsseln kann, um sie in einem anderen Format zu verschlüsseln). Dies ermöglicht das erneute Laden verschlüsselter Kennwörter während des Dump / Restore.

  • Konfigurationseinstellung für password_encryption
  • Postgres-Passwortauthentifizierung doc
  • Gebäude Postgres Passwort MD5
jkdba
quelle
1

Verwenden Sie im Allgemeinen nur die Benutzeroberfläche von pg admin, um db-bezogene Aktivitäten auszuführen.

Wenn Sie sich stattdessen mehr auf die Automatisierung der Datenbankeinrichtung für Ihre lokale Entwicklung oder auf CI usw. konzentrieren ...

Sie können beispielsweise eine einfache Kombination wie diese verwenden.

(a) Erstellen Sie einen Dummy-Superuser über Jenkins mit einem ähnlichen Befehl:

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

Dadurch wird ein Superuser namens experiment001 in Ihrer Postgres-Datenbank erstellt.

(b) Geben Sie diesem Benutzer ein Kennwort, indem Sie einen NON-Interactive SQL-Befehl ausführen.

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

Postgres ist wahrscheinlich die beste Datenbank für Befehlszeilen-Tools (nicht interaktiv). Erstellen von Benutzern, Ausführen von SQL, Erstellen einer Datenbanksicherung usw. Im Allgemeinen ist bei Postgres alles recht einfach, und es ist insgesamt recht trivial, dies in Ihre Entwicklungs-Setup-Skripte oder in die automatisierte CI-Konfiguration zu integrieren.

99Sono
quelle
1

und die vollautomatische Methode mit Bash und Expect ( in diesem Beispiel stellen wir einen neuen Postgres-Administrator mit dem neu bereitgestellten Postgres-PW sowohl auf Betriebssystem- als auch auf Postgres-Laufzeitebene bereit).

  # 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 ;
 "
Yordan Georgiev
quelle
0

TLDR:

Auf vielen Systemen enthält das Konto eines Benutzers häufig einen Punkt oder eine Art Interpunktion (Benutzer: john.smith, horise.johnson). In diesen Fällen muss die oben akzeptierte Antwort geändert werden. Für die Änderung muss der Benutzername in doppelte Anführungszeichen gesetzt werden.

Example:

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

Rational:

Postgres ist ziemlich wählerisch, wann ein "doppeltes Anführungszeichen" und wann ein "einfaches Anführungszeichen" verwendet werden soll. Wenn Sie eine Zeichenfolge angeben, verwenden Sie normalerweise ein einfaches Anführungszeichen.

FlyingV
quelle