J'ai oublié ou mal saisi (lors de l'installation) le mot de passe de l'utilisateur par défaut de Postgres. Je ne peux pas sembler pouvoir l'exécuter et j'obtiens l'erreur suivante:
psql: FATAL: password authentication failed for user "hisham"
hisham-agil: hisham$ psql
Est-il possible de réinitialiser le mot de passe ou comment créer un nouvel utilisateur avec des privilèges de superutilisateur?
Je suis nouveau chez Postgres et je viens de l'installer pour la première fois. J'essaie de l'utiliser avec Rails et j'utilise Mac OS X Lion.
recherchez le fichier pg_hba.conf
- il peut être localisé, par exemple dans /etc/postgresql-9.1/pg_hba.conf
.
cd /etc/postgresql-9.1/
Sauvegarder le
cp pg_hba.conf pg_hba.conf-backup
placez la ligne suivante (soit la première ligne non commentée, soit la seule):
local all all trust
redémarrez votre serveur PostgreSQL (par exemple, sur Linux :)
Sudo /etc/init.d/postgresql restart
Si le service (démon) ne commence pas à générer des rapports dans le fichier journal:
les connexions locales ne sont pas supportées par cette construction
tu devrais changer
local all all trust
à
Host all all 127.0.0.1/32 trust
vous pouvez maintenant vous connecter comme n'importe quel utilisateur. Connectez-vous en tant que superutilisateur postgres
(remarque, le nom du superutilisateur peut être différent dans votre installation. Dans certains systèmes, il est appelé pgsql
, par exemple.)
psql -U postgres
ou
psql -h 127.0.0.1 -U postgres
(notez qu'avec la première commande, vous ne serez pas toujours connecté à l'hôte local)
Réinitialiser le mot de passe
ALTER USER my_user_name with password 'my_secure_password';
Restaurez l'ancien pg_hba.conf
car il est très dangereux de le conserver
cp pg_hba.conf-backup pg_hba.conf
redémarrez le serveur, afin de fonctionner avec le pg_hba.conf
sûr
Sudo /etc/init.d/postgresql restart
_ {Autres lectures à propos de ce fichier pg_hba: http://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf.html
Lors de la connexion à postgres à partir de la ligne de commande, n'oubliez pas d'ajouter -h localhost
comme paramètre de ligne de commande. Sinon, postgres essaiera de se connecter en utilisant le mode d'authentification PEER.
Ce qui suit montre une réinitialisation du mot de passe, une connexion infructueuse avec une authentification PEER et une connexion réussie à l’aide d’une connexion TCP.
# Sudo -u postgres psql
could not change directory to "/root"
psql (9.1.11)
Type "help" for help.
postgres=# \password
Enter new password:
Enter it again:
postgres=# \q
Échouer:
# psql -U postgres -W
Password for user postgres:
psql: FATAL: Peer authentication failed for user "postgres"
Travailler avec -h localhost
:
# psql -U postgres -W -h localhost
Password for user postgres:
psql (9.1.11)
SSL connection (cipher: DHE-RSA-AES256-SHA, bits: 256)
Type "help" for help.
postgres=#
Le fichier pg_hba.conf
(C:\Program Files\PostgreSQL\9.3\data
) a changé depuis que ces réponses ont été données. Ce qui a fonctionné pour moi dans Windows, c’est d’ouvrir le fichier et de changer la METHOD
de md5
à trust
:
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
Host all all 127.0.0.1/32 trust
# IPv6 local connections:
Host all all ::1/128 trust
Puis, en utilisant pgAdmin III, je me suis connecté sans mot de passe et j'ai changé le mot de passe de l'utilisateur postgres'
en allant à File -> Change Password
.
Juste une note, sous Linux Vous pouvez simplement exécuter Sudo su - postgres
pour devenir l'utilisateur postgres et à partir de là, changer ce qui est requis avec psql.
J'avais juste ce problème sous Windows 10 et le problème dans mon cas était que je courais juste psql
et qu'il essayait par défaut d'essayer de me connecter avec mon nom d'utilisateur Windows ("Nathan"), mais il n'y avait pas de PostgreSQL. utilisateur avec ce nom, et ça ne me disait pas ça.
La solution consistait donc à exécuter psql -U postgres
plutôt que simplement psql
, puis le mot de passe que j'ai entré lors de l'installation a fonctionné.
Si vous êtes dans Windows, vous pouvez simplement exécuter
Net User postgres postgres
et se connecter à postgres avec postgres/postgres comme utilisateur/mot de passe
Pour l'installation de Windows, un utilisateur Windows est créé. Et "psql" utilise cet utilisateur pour se connecter au port. Si vous modifiez le mot de passe de l'utilisateur PostgreSQL, il ne changera pas celui de Windows . La ligne de commande ci-dessous ne fonctionne que si vous avez accès à la ligne de commande.
À la place, vous pouvez utiliser l’application graphique Windows "c:\Windows\system32\lusrmgr.exe". Cette application gère les utilisateurs créés par Windows. Donc, vous pouvez maintenant modifier le mot de passe.
Editez le fichier /etc/postgresql/<version>/main/pg_hba.conf
et trouvez la ligne suivante:
local all postgres md5
Editez la ligne et changez md5
à la fin en trust
et sauvegardez le fichier
Recharger le postgresql service
$ Sudo service postgresql reload
Cela chargera les fichiers de configuration. Vous pouvez maintenant modifier l’utilisateur postgres
en vous connectant au shell psql
.
$ psql -U postgres
Mettre à jour le mot de passe de l'utilisateur postgres
alter user postgres with password 'secure-passwd-here';
Editez le fichier /etc/postgresql/<version>/main/pg_hba.conf
et remplacez trust
par md5
et enregistrez le fichier.
Recharger le postgresql service
$ Sudo service postgresql reload
Vérifiez que le changement de mot de passe fonctionne
$ psql -U postgres -W
Ce que j'ai fait pour résoudre le même problème était:
Ouvrez le fichier pg_hba.conf avec l’éditeur gedit à partir du terminal:
Sudo gedit /etc/postgresql/9.5/main/pg_hba.conf
Il vous demandera un mot de passe. Entrez votre mot de passe de connexion administrateur . Cela ouvrira gedit avec le fichier. Collez la ligne suivante:
Host all all 127.0.0.1/32 trust
juste en dessous -
# Database administrative login by Unix domain socket
Enregistrez-le et fermez-le . Fermez le terminal, ouvrez-le à nouveau et exécutez la commande suivante:
psql -U postgres
Vous allez maintenant entrer dans la console psql . Maintenant, changez le mot de passe en entrant ceci:
ALTER USER [your prefered user name] with password '[desired password]';
S'il indique que l'utilisateur n'existe pas, utilisez plutôt ALTER
au lieu de CREATE
.
Enfin, supprimez cette ligne que vous avez collée dans pg_hba et sauvegardez-la.
Le fichier .pgpass du répertoire de base d'un utilisateur ou le fichier référencé par PGPASSFILE peut contenir des mots de passe à utiliser si la connexion nécessite un mot de passe (et qu'aucun mot de passe n'a été spécifié sinon). Sous Microsoft Windows, le fichier est nommé% APPDATA%\postgresql\pgpass.conf (où% APPDATA% fait référence au sous-répertoire Application Data du profil de l'utilisateur).
Ce fichier doit contenir des lignes du format suivant:
nom d'hôte: port: base de données: nom d'utilisateur: mot de passe
(Vous pouvez ajouter un commentaire de rappel au fichier en copiant la ligne ci-dessus et en la précédant de #.) Chacun des quatre premiers champs peut être une valeur littérale, ou *, qui correspond à tout. Le champ de mot de passe de la première ligne qui correspond aux paramètres de connexion actuels sera utilisé. (Par conséquent, mettez d’abord des entrées plus spécifiques lorsque vous utilisez des caractères génériques.) Si une entrée doit contenir: ou \, échappez ce caractère avec. Un nom d'hôte localhost correspond aux connexions TCP (nom d'hôte localhost) et de socket de domaine Unix (pghost vide ou répertoire de socket par défaut) provenant de la machine locale. Sur un serveur de secours, un nom de base de données de réplication correspond aux connexions de réplication en continu établies sur le serveur maître. Le champ de la base de données est d'une utilité limitée car les utilisateurs ont le même mot de passe pour toutes les bases de données du même cluster.
Sur les systèmes Unix, les autorisations sur .pgpass doivent interdire tout accès à world ou group; Pour ce faire, utilisez la commande chmod 0600 ~/.pgpass. Si les autorisations sont moins strictes que cela, le fichier sera ignoré. Sous Microsoft Windows, le fichier est supposé être stocké dans un répertoire sécurisé. Aucune vérification des autorisations spéciales n'est donc effectuée.
Ajout de la réponse pour l'utilisateur Windows pour la dernière version de postgres (> 10),
Accédez à l'emplacement d'installation de postgres et recherchez pg_hba.conf
, Vous le trouverez dans ..\postgres\data\pg_hba.conf
.
Ouvrez ce fichier avec le bloc-notes, trouvez cette ligne,
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
Host all all 127.0.0.1/32 md5
# IPv6 local connections:
Host all all ::1/128 md5
#..
Changez la méthode de md5 en confiance,
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 local connections:
Host all all 127.0.0.1/32 trust
# IPv6 local connections:
Host all all ::1/128 trust
# ...
Allez maintenant dans votre SQL Shell (PSQL) et laissez tout ce qui est vide,
Server [localhost]:
Database [postgres]:
Port [8000]:
Username [postgres]:
Il ne vous demandera pas de mot de passe cette fois-ci et vous serez connecté,
Maintenant, lancez cette ligne, ALTER USER yourusername WITH SUPERUSER
Vous pouvez maintenant quitter le shell avec\q
Encore une fois, allez dans le fichier pg_hba.conf et remplacez METHOD de confiance par md5, puis enregistrez-le.
Maintenant, connectez-vous avec votre nouvel utilisateur et votre nouveau mot de passe et vous pourrez vérifier ses attributs.