Risposte:
Per l'accesso meno password:
sudo -u user_name psql db_name
Per reimpostare la password se hai dimenticato:
ALTER USER user_name WITH PASSWORD 'new_password';
rm ~/.psql_history
ALTER USER myuser RENAME TO newname;
... per qualche ragione google mi stava indicando qui mentre cercavo su Google :)
Quindi digitare:
$ sudo -u postgres psql
Poi:
\password postgres
Quindi per uscire psql
:
\q
Se ciò non funziona, riconfigurare l'autenticazione.
Modifica /etc/postgresql/9.1/main/pg_hba.conf
(il percorso sarà diverso) e cambia:
local all all peer
per:
local all all md5
Quindi riavviare il server:
$ sudo service postgresql restart
\p
, mi dà la password; se lo \password postgres
\p extra argument "assword" ignored; \p extra argument "postgres" ignored
sudo passwd postgres
Puoi e dovresti avere la password dell'utente crittografata:
ALTER USER username WITH ENCRYPTED PASSWORD 'password';
The password is always stored encrypted in the system catalogs. The ENCRYPTED keyword has no effect, but is accepted for backwards compatibility.
Credo che il modo migliore per cambiare la password sia semplicemente usare:
\password
nella console di Postgres.
Fonte:
Prestare attenzione quando si specifica una password non crittografata con questo comando. La password verrà trasmessa al server in chiaro e potrebbe anche essere registrata nella cronologia dei comandi del client o nel registro del server. psql contiene un comando \ password che può essere utilizzato per modificare la password di un ruolo senza esporre la password in chiaro.
da https://www.postgresql.org/docs/9.0/static/sql-alterrole.html .
\password username
Per modificare la password utilizzando la riga di comando di Linux, utilizzare:
sudo -u <user_name> psql -c "ALTER USER <user_name> PASSWORD '<new_password>';"
Per cambiare la password
sudo -u postgres psql
poi
\password postgres
ora inserisci Nuova password e Conferma
poi \q
per uscire
Vai al tuo Postgresql Config e modifica pg_hba.conf
sudo vim /etc/postgresql/9.3/main/pg_hba.conf
Quindi cambia questa riga:
Database administrative login by Unix domain socket
local all postgres md5
per :
Database administrative login by Unix domain socket
local all postgres peer
quindi riavviare il servizio PostgreSQL tramite il comando SUDO
psql -U postgres
Ora sarai inserito e vedrai il terminale Postgresql
quindi entra
\password
e inserisci la NUOVA password per l'utente predefinito di Postgres, dopo aver modificato nuovamente la password, vai su pg_hba.conf e ripristina la modifica in "md5"
ora sarai loggato come
psql -U postgres
con la tua nuova password.
Fammi sapere se ci sono problemi.
user@user-NC10:~$ psql -U postgres psql: FATAL: Peer authentication failed for user "postgres"
$version,' /usr/bin/psql: psql: line 26:
my ($ versione, $ cluster, $ db, $ porta , $ host); ' Grazie per l'aiuto!
La configurazione che ho sul mio server è stata personalizzata molto e sono riuscito a cambiare la password solo dopo aver impostato l' autenticazione di fiducia nel pg_hba.conf
file :
local all all trust
Non dimenticare di riportarlo a password o md5
sudo systemctl restart postgresql.service
Questo è stato il primo risultato su Google, quando stavo cercando come rinominare un utente, quindi:
ALTER USER <username> WITH PASSWORD '<new_password>'; -- change password
ALTER USER <old_username> RENAME TO <new_username>; -- rename user
Un paio di altri comandi utili per la gestione degli utenti:
CREATE USER <username> PASSWORD '<password>' IN GROUP <group>;
DROP USER <username>;
Sposta l'utente in un altro gruppo
ALTER GROUP <old_group> DROP USER <username>;
ALTER GROUP <new_group> ADD USER <username>;
Per il mio caso su Ubuntu 14.04 installato con Postgres 10.3. Devo seguire i seguenti passi
su - postgres
per passare all'utente postgres
psql
per inserire la shell postgres\password
quindi inserisci la tua password\q
per chiudere la sessione della shellQuindi ritorni a root eseguendo exit
e configurando il tuo pg_hba.conf
(il mio è a /etc/postgresql/10/main/pg_hba.conf
) assicurandoti di avere la seguente riga
local all postgres md5
service postgresql restart
postgres
all'utente e inserisci di nuovo la shell Postgres. Ti verrà richiesta la password.Usa questo:
\password
inserisci la nuova password che desideri per quell'utente e poi confermala. Se non ricordi la password e vuoi cambiarla, puoi accedere come postgres e quindi usare questa:
ALTER USER 'the username' WITH PASSWORD 'the new password';
Simile ad altre risposte nella sintassi ma dovrebbe essere noto che puoi anche passare un md5 della password in modo da non trasmettere una password in testo semplice.
Ecco alcuni scenari di conseguenze indesiderate dell'alterazione della password di un utente in testo semplice.
log_statement = ddl
o successive, la password in testo normale verrà visualizzata nei registri degli errori.
Detto questo, ecco come possiamo modificare la password di un utente costruendo un md5 della password.
es: "md5" + md5 (password + nome utente)
In bash:
~$ echo -n "passwordStringUserName" | md5sum | awk '{print "md5"$1}'
md5d6a35858d61d85e4a82ab1fb044aba9d
[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
comando sarà simile ALTER USER UserName WITH PASSWORD 'md5d6a35858d61d85e4a82ab1fb044aba9d';
La password viene sempre archiviata crittografata nei cataloghi di sistema. La parola chiave ENCRYPTED non ha alcun effetto, ma è accettata per compatibilità con le versioni precedenti. Il metodo di crittografia è determinato dal parametro di configurazione password_encryption. Se la stringa di password presentata è già in formato crittografato MD5 o crittografato SCRAM, viene archiviata così com'è indipendentemente dalla password_encryption (poiché il sistema non è in grado di decrittografare la stringa di password crittografata specificata, per crittografarla in un formato diverso). Ciò consente di ricaricare le password crittografate durante il dump / ripristino.
In generale, basta usare l'interfaccia utente dell'amministratore di pg per fare attività relative al db.
Se invece ti stai concentrando maggiormente sull'automazione della configurazione del database per il tuo sviluppo locale, CI, ecc ...
Ad esempio, puoi usare una combo semplice come questa.
(a) Crea un super utente fittizio tramite jenkins con un comando simile al seguente:
docker exec -t postgres11-instance1 createuser --username=postgres --superuser experiment001
questo creerà un super utente chiamato experiment001 in postgres db.
(b) Fornire a questo utente una password eseguendo un comando SQL NON interattivo.
docker exec -t postgres11-instance1 psql -U experiment001 -d postgres -c "ALTER USER experiment001 WITH PASSWORD 'experiment001' "
Postgres è probabilmente il miglior database disponibile per gli strumenti da riga di comando (non interattivi). Creare utenti, eseguire SQL, fare il backup del database ecc ... In generale è tutto abbastanza semplice con Postgres ed è nel complesso abbastanza banale integrarlo negli script di installazione di sviluppo o nella configurazione di CI automatizzata.
e il modo completamente automatizzato con bash e prevede ( in questo esempio forniamo a un nuovo amministratore di postgres i postgres appena forniti pw sia a livello di runtime del sistema operativo che di 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 ;
"
TLDR:
Su molti sistemi, l'account di un utente contiene spesso un punto o una sorta di punzione (utente: john.smith, horise.johnson). In questi casi sarà necessario apportare una modifica alla risposta accettata sopra. La modifica richiede che il nome utente sia tra virgolette doppie.
Example:
ALTER USER "username.lastname" WITH PASSWORD 'password';
Razionale:
Postgres è piuttosto esigente su quando usare una "virgoletta doppia" e quando usare una "virgoletta singola". In genere quando si fornisce una stringa si utilizza una virgoletta singola.