Réponses:
Pour un mot de passe sans connexion:
sudo -u user_name psql db_name
Pour réinitialiser le mot de passe si vous avez oublié:
ALTER USER user_name WITH PASSWORD 'new_password';
rm ~/.psql_history
ALTER USER myuser RENAME TO newname;
... pour une raison quelconque, google me pointait ici quand je cherchais ça :)
Tapez ensuite:
$ sudo -u postgres psql
Alors:
\password postgres
Puis pour quitter psql
:
\q
Si cela ne fonctionne pas, reconfigurez l'authentification.
Editez /etc/postgresql/9.1/main/pg_hba.conf
(le chemin sera différent) et changez:
local all all peer
à:
local all all md5
Redémarrez ensuite le serveur:
$ sudo service postgresql restart
\p
, cela me donne le mot de passe; si je tape, \password postgres
il donne le mot de passe, puis des avertissements\p extra argument "assword" ignored; \p extra argument "postgres" ignored
sudo passwd postgres
Vous pouvez et devez avoir le mot de passe des utilisateurs crypté:
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.
Je crois que la meilleure façon de changer le mot de passe est simplement d'utiliser:
\password
dans la console Postgres.
La source:
Il faut être prudent lors de la spécification d'un mot de passe non chiffré avec cette commande. Le mot de passe sera transmis au serveur en texte clair, et il peut également être enregistré dans l'historique des commandes du client ou le journal du serveur. psql contient une commande \ mot de passe qui peut être utilisée pour changer le mot de passe d'un rôle sans exposer le mot de passe en texte clair.
depuis https://www.postgresql.org/docs/9.0/static/sql-alterrole.html .
\password username
Pour modifier le mot de passe à l'aide de la ligne de commande Linux, utilisez:
sudo -u <user_name> psql -c "ALTER USER <user_name> PASSWORD '<new_password>';"
Pour changer le mot de passe
sudo -u postgres psql
puis
\password postgres
maintenant entrez un nouveau mot de passe et confirmez
puis \q
sortir
Accédez à votre configuration Postgresql et modifiez pg_hba.conf
sudo vim /etc/postgresql/9.3/main/pg_hba.conf
Puis changez cette ligne:
Database administrative login by Unix domain socket
local all postgres md5
à :
Database administrative login by Unix domain socket
local all postgres peer
puis redémarrez le service PostgreSQL via la commande SUDO puis
psql -U postgres
Vous serez maintenant inscrit et verrez le terminal Postgresql
puis entrez
\password
et entrez le NOUVEAU mot de passe pour l'utilisateur par défaut de Postgres.
maintenant vous serez connecté en tant que
psql -U postgres
avec votre nouveau mot de passe.
Faites-moi savoir si vous y trouvez tous des problèmes.
user@user-NC10:~$ psql -U postgres psql: FATAL: Peer authentication failed for user "postgres"
$version,' /usr/bin/psql: psql: line 26:
my ($ version, $ cluster, $ db, $ port , $ host); ' Merci de votre aide!
La configuration que j'ai sur mon serveur a été beaucoup personnalisée et j'ai réussi à changer de mot de passe uniquement après avoir défini l' authentification de confiance dans le pg_hba.conf
fichier :
local all all trust
N'oubliez pas de le changer en mot de passe ou md5
sudo systemctl restart postgresql.service
Ce fut le premier résultat sur google, quand je cherchais comment renommer un utilisateur, donc:
ALTER USER <username> WITH PASSWORD '<new_password>'; -- change password
ALTER USER <old_username> RENAME TO <new_username>; -- rename user
Quelques autres commandes utiles pour la gestion des utilisateurs:
CREATE USER <username> PASSWORD '<password>' IN GROUP <group>;
DROP USER <username>;
Déplacer l'utilisateur vers un autre groupe
ALTER GROUP <old_group> DROP USER <username>;
ALTER GROUP <new_group> ADD USER <username>;
Pour mon cas sur Ubuntu 14.04 installé avec postgres 10.3. Je dois suivre les étapes suivantes
su - postgres
pour basculer l'utilisateur vers postgres
psql
entrer dans le shell postgres\password
puis entrez votre mot de passe\q
pour quitter la session shellEnsuite, vous revenez à root en exécutant exit
et en configurant votre pg_hba.conf
(le mien est à /etc/postgresql/10/main/pg_hba.conf
) en vous assurant d'avoir la ligne suivante
local all postgres md5
service postgresql restart
postgres
utilisateur et entrez à nouveau le shell postgres. Il vous demandera un mot de passe.utilisez ceci:
\password
entrez le nouveau mot de passe que vous souhaitez pour cet utilisateur, puis confirmez-le. Si vous ne vous souvenez pas du mot de passe et que vous souhaitez le modifier, vous pouvez vous connecter en tant que postgres, puis utiliser ceci:
ALTER USER 'the username' WITH PASSWORD 'the new password';
Semblable à d'autres réponses en syntaxe, mais il faut savoir que vous pouvez également transmettre un md5 du mot de passe afin de ne pas transmettre de mot de passe en texte brut.
Voici quelques scénarios de conséquences imprévues de la modification du mot de passe d'un utilisateur en texte brut.
log_statement = ddl
ou une version ultérieure, votre mot de passe en texte brut apparaîtra dans vos journaux d'erreurs.
Cela dit, voici comment modifier le mot de passe d'un utilisateur en créant un md5 du mot de passe.
ex: "md5" + md5 (mot de passe + nom d'utilisateur)
En 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
commande ressemblera ALTER USER UserName WITH PASSWORD 'md5d6a35858d61d85e4a82ab1fb044aba9d';
Le mot de passe est toujours stocké crypté dans les catalogues système. Le mot clé ENCRYPTED n'a aucun effet, mais est accepté pour des raisons de compatibilité descendante. La méthode de cryptage est déterminée par le paramètre de configuration password_encryption. Si la chaîne de mot de passe présentée est déjà au format chiffré MD5 ou chiffré SCRAM, elle est stockée telle quelle, quel que soit le mot de passe_cryptage (car le système ne peut pas déchiffrer la chaîne de mot de passe chiffrée spécifiée, pour la chiffrer dans un format différent). Cela permet de recharger les mots de passe chiffrés pendant le vidage / restauration.
En général, utilisez simplement l'interface d'administration pg pour effectuer des activités liées à db.
Si, au contraire, vous vous concentrez davantage sur l'automatisation de la configuration de la base de données pour votre développement local, ou CI, etc.
Par exemple, vous pouvez utiliser un combo simple comme celui-ci.
(a) Créez un super utilisateur factice via jenkins avec une commande similaire à celle-ci:
docker exec -t postgres11-instance1 createuser --username=postgres --superuser experiment001
cela créera un super utilisateur appelé experiment001 dans votre postgres db.
(b) Donnez à cet utilisateur un mot de passe en exécutant une commande NON-Interactive SQL.
docker exec -t postgres11-instance1 psql -U experiment001 -d postgres -c "ALTER USER experiment001 WITH PASSWORD 'experiment001' "
Postgres est probablement la meilleure base de données disponible pour les outils de ligne de commande (non interactifs). Création d'utilisateurs, exécution de SQL, sauvegarde de la base de données, etc. En général, tout cela est assez basique avec postgres et il est globalement assez trivial de l'intégrer dans vos scripts de configuration de développement ou dans la configuration CI automatisée.
et la manière entièrement automatisée avec bash et expect ( dans cet exemple, nous provisionnons un nouvel administrateur postgres avec le postgres pw nouvellement provisionné à la fois sur le système d'exploitation et le niveau d'exécution de 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:
Sur de nombreux systèmes, le compte d'un utilisateur contient souvent un point ou une sorte de fonction (utilisateur: john.smith, horise.johnson). Dans ces cas, une modification devra être apportée à la réponse acceptée ci-dessus. Le changement nécessite que le nom d'utilisateur soit entre guillemets.
Example:
ALTER USER "username.lastname" WITH PASSWORD 'password';
Rationnel:
Postgres est assez pointilleux sur le moment d'utiliser un «guillemet double» et quand utiliser un «guillemet simple». En règle générale, lorsque vous fournissez une chaîne, vous utilisez un guillemet simple.