PostgreSQL: Hoe kan ik het PostgreSQL-gebruikerswachtwoord wijzigen?

Hoe wijzig ik het wachtwoord voor de PostgreSQL-gebruiker?


Antwoord 1, autoriteit 100%

Inloggen zonder wachtwoord:

sudo -u user_name psql db_name

Om het wachtwoord opnieuw in te stellen als u het vergeten bent:

ALTER USER user_name WITH PASSWORD 'new_password';

Antwoord 2, autoriteit 42%

Typ vervolgens:

$ sudo -u postgres psql

Dan:

\password postgres

Om vervolgens psqlaf te sluiten:

\q

Als dat niet werkt, configureert u de authenticatie opnieuw.

Bewerk /etc/postgresql/9.1/main/pg_hba.conf(pad zal verschillen) en wijzig:

   local   all             all                                     peer

naar:

   local   all             all                                     md5

Herstart vervolgens de server:

$ sudo service postgresql restart

Antwoord 3, autoriteit 6%

U kunt en moet het wachtwoord van de gebruikers versleuteld hebben:

ALTER USER username WITH ENCRYPTED PASSWORD 'password';

Antwoord 4, autoriteit 5%

Ik geloof dat de beste manier om het wachtwoord te wijzigen is door simpelweg het volgende te gebruiken:

\password

in de Postgres-console.

Per ALTER USERdocumentatie:

Voorzichtigheid is geboden bij het opgeven van een niet-versleuteld wachtwoord met
dit commando. Het wachtwoord wordt naar de server verzonden in
leesbare tekst, en het kan ook worden vastgelegd in de opdrachtgeschiedenis van de klant
of het serverlogboek. psql bevat een commando \password dat kan worden gebruikt
om het wachtwoord van een rol te wijzigen zonder het leesbare wachtwoord te tonen.

Opmerking: ALTER USERis een alias voor ALTER ROLE


Antwoord 5, autoriteit 3%

Om het wachtwoord te wijzigen met de Linux-opdrachtregel, gebruik je:

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

Antwoord 6, autoriteit 2%

Wachtwoord wijzigen

sudo -u postgres psql

dan

\password postgres

voer nu een nieuw wachtwoord in en bevestig

vervolgens \qom af te sluiten


Antwoord 7, autoriteit 2%

Ga naar je Postgresql-configuratie en bewerk pg_hba.conf

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

Verander dan deze regel:

Database administrative login by Unix domain socket
local      all              postgres                                md5

naar :

Database administrative login by Unix domain socket
local   all             postgres                                peer

Start vervolgens de PostgreSQL-service op via Sudo-opdracht dan

psql -U postgres

U wordt nu ingevoerd en ziet de PostgreSQL-terminal

Voer vervolgens

in

\password

en voer het nieuwe wachtwoord in voor de standaardgebruiker van PostGres, nadat het wachtwoord opnieuw wordt gewijzigd Ga opnieuw naar de PG_HBA.CONF en keert u de wijziging in “MD5”

Nu wordt u ingelogd als

PSQL -U PostGres

met uw nieuwe wachtwoord.

Laat het me weten of jullie allemaal een probleem erin vinden.


8

Dit was het eerste resultaat op Google, toen ik keek hoe ik een gebruiker kon hernoemen, dus:

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

Een paar andere opdrachten nuttig voor gebruikersbeheer:

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

Verplaats de gebruiker naar een andere groep

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

9

Om een ​​nieuw wachtwoord aan te vragen voor de PostGres Gebruiker (zonder deze in de opdracht te tonen):

sudo -u postgres psql -c "\password"

Antwoord 10

Als je Windows gebruikt.

Open het bestand pg_hba.confen verander van md5in peer

Open cmd, typ psql postgres postgres

Typ vervolgens \passwordom om een nieuw wachtwoord te worden gevraagd.

Raadpleeg dit medium berichtvoor meer informatie &amp ; gedetailleerde stappen.


Antwoord 11

De configuratie die ik op mijn server heb, is veel aangepast en ik kon het wachtwoord pas wijzigen nadat ik de vertrouwen-verificatie had ingesteld in de pg_hba.confbestand:

local   all   all   trust

Vergeet dit niet terug te veranderen naar wachtwoord of md5


Antwoord 12

Voor mijn geval op Ubuntu 14.04 geïnstalleerd met postgres 10.3. Ik moet de volgende stappen volgen

  • su - postgresom van gebruiker over te schakelen naar postgres
  • psqlom postgres shell in te voeren
  • \passwordvoer vervolgens uw wachtwoord in
  • \qom de shell-sessie af te sluiten
  • Vervolgens schakel je terug naar root door exituit te voeren en je pg_hba.confte configureren (de mijne staat op /etc/postgresql/10/main/pg_hba.conf) door ervoor te zorgen dat je de volgende regel hebt

    local all postgres md5

  • Herstart uw postgres-service door service postgresql restart
  • Ga nu naar de postgres-gebruiker en voer de postgres-shell opnieuw in. Het zal u om een wachtwoord vragen.

Antwoord 13

gebruik dit:

\password

voer het nieuwe wachtwoord in dat u voor die gebruiker wilt en bevestig het.
Als u het wachtwoord niet meer weet en u wilt het wijzigen, kunt u inloggen als postgres en dit gebruiken:

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

Antwoord 14

TLDR:

Op veel systemen bevat een gebruikersaccount vaak een punt of een soort interpunctie (gebruiker: john.smith, horise.johnson). IN deze gevallen zal een wijziging moeten worden aangebracht in het geaccepteerde antwoord hierboven. De wijziging vereist dat de gebruikersnaam dubbel wordt aangehaald.

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

Rationeel:

Postgres is nogal kieskeurig over wanneer een ‘dubbele aanhalingsteken’ en wanneer een ‘enkele aanhalingsteken’ moet worden gebruikt. Wanneer u een tekenreeks opgeeft, gebruikt u meestal een enkel aanhalingsteken.


Antwoord 15

Vergelijkbaar met andere antwoorden in syntaxis, maar het moet bekend zijn dat u ook een md5 van het wachtwoord kunt doorgeven, zodat u geen wachtwoord in platte tekst verzendt.

Hier zijn een paar scenario’s met onbedoelde gevolgen van het wijzigen van een gebruikerswachtwoord in platte tekst.

  1. Als u geen SSL heeft en op afstand wijzigingen aanbrengt, verzendt u het wachtwoord in platte tekst over het netwerk.
  2. Als u uw logboekconfiguratie heeft ingesteld om DDL-statements log_statement = ddlof hoger te loggen, wordt uw wachtwoord in platte tekst weergegeven in uw foutenlogboeken.
    1. Als u deze logs niet beschermt, is het een probleem.
    2. Als u deze logs / etl verzamelt en ze weergeeft waar anderen toegang hebben, kunnen ze uiteindelijk dit wachtwoord, enz.
    3. Als u een gebruiker toestaat om hun wachtwoord te beheren, onthullen ze onbewust een wachtwoord voor een medewerker van een beheerder of een laag niveau die is belast met het beoordelen van logboeken.

Met dat hiervan is gezegd, is hoe we het wachtwoord van een gebruiker kunnen wijzigen door een MD5 van het wachtwoord te bouwen.

  • Postgres Wanneer HASH een wachtwoord als MD5, zou het wachtwoord met de gebruikersnaam met de tekst de tekst “MD5” op de resulterende hasch respecteren.
  • Ex: “MD5” + MD5 (wachtwoord + gebruikersnaam)

  • 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
  • Dus eindelijk onze ALTER USERopdracht eruit ziet
   ALTER USER UserName WITH PASSWORD 'md5d6a35858d61d85e4a82ab1fb044aba9d';
  • Relevante links (Opmerking: ik zal alleen linken naar de nieuwste versies van de documenten voor oudere, het verandert wat, maar md5 ondersteunt nog steeds een lange tijd terug.)
  • rol maken
  • Het wachtwoord wordt altijd versleuteld opgeslagen in de systeemcatalogi. Het ENCRYPTED-sleutelwoord heeft geen effect, maar wordt geaccepteerd voor achterwaartse compatibiliteit. De coderingsmethode wordt bepaald door de configuratieparameter password_encryption. Als de gepresenteerde wachtwoordreeks al in MD5-gecodeerde of SCRAM-gecodeerde indeling is, wordt deze opgeslagen zoals het is, ongeacht password_encryption (aangezien het systeem de gespecificeerde versleutelde wachtwoordreeks niet kan ontsleutelen, om deze in een ander formaat te versleutelen). Hierdoor kunnen versleutelde wachtwoorden opnieuw worden geladen tijdens dump/restore.

  • configuratie-instelling voor password_encryption
  • postgres wachtwoord authenticatie document
  • postgres-wachtwoord md5 bouwen

Antwoord 16

en de volledig geautomatiseerde manier met bash and expect ( in dit voorbeeldvoorzien we een nieuwe postgres-beheerder met de nieuw ingerichte postgres pw zowel op OS- als postgres runtime-niveau)

 # 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 ;
 "

17

Gebruik in het algemeen gewoon PG-beheerder UI voor DB gerelateerde activiteit.

Indien u in plaats daarvan meer richt in het automatiseren van database-instellingen voor uw lokale ontwikkeling of CI enz …

U kunt bijvoorbeeld een eenvoudige combinatie zoals deze gebruiken.

(a) Maak een dummy supergebruiker via Jenkins met een opdracht vergelijkbaar met dit:

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

Hiermee wordt een Super-gebruiker genaamd Experiment001 in u PostGres DB genoemd.

(b) Geef deze gebruiker een wachtwoord door een niet-interactieve SQL-opdracht uit te voeren.

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

PostGres is waarschijnlijk de beste database die er is voor opdrachtregel (niet-interactieve) gereedschappen.
Gebruikers maken, SQL uitvoeren, back-up van database enz.
In het algemeen is het allemaal vrij basic bij PostGres en het is algemeen behoorlijk triviaal om dit te integreren in uw ontwikkelingssetupscripts of in geautomatiseerde CI-configuratie.


18

Controleer PG_HBA.CONF

Indien de authenticatiemethode ‘Peer’ is, moet het gebruiksnaam / -wachtwoord van de klant overeenkomen met de gebruikersnaam en het wachtwoord van de database-gebruikersnaam. Stel in dat geval het wachtwoord in voor Linux-gebruiker ‘Postgres’ en de DB-gebruiker ‘Postgres’ om hetzelfde te zijn.

Zie de documentatie voor meer informatie: https: // www .postgresql.org / docs / 9.1 / auth-pg-hba-conf.html


19

De meeste antwoorden waren grotendeels correct, maar je moet op kleine dingen letten. Het probleem dat ik had was dat ik nooit het wachtwoord van postgres had ingesteld, dus ik kon niet inloggen op een SQL-opdrachtregel waarmee ik wachtwoorden kon wijzigen. Dit zijn de stappen die ik met succes heb gebruikt (merk op dat de meeste of alle commando’s sudo/root gebruiker nodig hebben):

  • Bewerk de pg_hba.confin de gegevensmap van het DB-cluster waarmee u verbinding probeert te maken.
    • De map van de datadirectory kan worden gevonden door de systemd-opdrachtregel te inspecteren, eenvoudig te verkrijgen met systemctl status postgresql@VERSION-DB_CLUSTER. Vervang VERSION door uw PSQL-versie en DB_CLUSTER door de naam van uw databasecluster. Dit kan het belangrijkste zijn als het automatisch is gemaakt, dus bijv. postgresql@13-main. Als alternatief bood mijn bash automatisch aanvullen na het invoeren van postgresql@, dus je zou dat kunnen proberen of de postgresql-services kunnen zoeken in de lijst met alle services (systemctl -a). Zodra u de statusuitvoer hebt, zoekt u naar de tweede opdrachtregel na CGroup, die vrij lang zou moeten zijn, en begint u met /usr/lib/postgresql/13/bin/postgresof iets dergelijks (afhankelijk van de versie , distro en installatiemethode). U zoekt de directory na -D, bijvoorbeeld /var/lib/postgresql/13/main.
  • Voeg de volgende regel toe: host all all 127.0.0.1/32 trust. Hierdoor kunnen alle gebruikers van alle databases onvoorwaardelijk verbinding maken met de database via IPv4 op de lokale computer, zonder om een wachtwoord te vragen. Dit is een tijdelijke oplossing en vergeet niet deze regel later weer te verwijderen. Voor de zekerheid heb ik commentaar gegeven op de host all all 127.0.0.1/32 md5(md5 kan worden vervangen door scram-sha-256), die geldig is voor dezelfde inloggegevens, waarvoor alleen een wachtwoord.
  • Herstart de databaseservice: systemctl restart postgresql@...Nogmaals, gebruik de exacte service die je eerder hebt gevonden.
  • Controleer of de service correct is gestart met systemctl status postgresql@....
  • Maak verbinding met psql en, heel belangrijk, dwing psql om niet om een wachtwoord te vragen. In mijn ervaring zal het je om een wachtwoord vragen, ook al kan de server het niet schelen, en je login weigeren als je wachtwoord verkeerd was. Dit kan worden bereikt met de vlag -w. De volledige opdrachtregel ziet er ongeveer zo uit: sudo -u postgres psql -w -h 127.0.0.1 -p 5432. Hier is postgresuw gebruiker en mogelijk heeft u dat gewijzigd. 5432is de poort van de clusterspecifieke server en kan hoger zijn als u meer dan één cluster gebruikt (ik heb bijvoorbeeld 5434).
  • Wijzig het wachtwoord met het speciale commando \password.
  • Vergeet niet om het wachtwoord te verwijderen, negeer de tijdelijke oplossing en start de server opnieuw op om de configuratie toe te passen.

Other episodes