Les installateurs Postgres aimablement fournis à la communauté par EnterpriseDB.com créent un compte utilisateur postgres
sur macOS comme cela est courant.
Dans une session de console dans ( Terminal.app , je dois passer à cet utilisateur. Mon objectif est d'exécuter un éditeur de texte avec les privilèges de cet utilisateur afin de pouvoir modifier le pg_hba.conf
fichier contrôlant les règles d'authentification des utilisateurs Postgres.
Quand j'essaye:
su - postgres
… Je suis invité à entrer le mot de passe de l'utilisateur, que j'ai entré avec succès, mais je reçois le message d'erreur:
su: Désolé
Je suis sûr que le mot de passe est correct. Que puis-je faire pour accéder à l'utilisateur postgres
?
Sudo su postgres
Après avoir trouvé ceci Question fermée sur le débordement de la pile et son doublon , je posterai ici les solutions trouvées là et là .
➥ Vous devez utiliser la commande Sudo
combinée avec la commande su
.
Sudo su postgres
Lorsque vous y êtes invité, entrez votre mot de passe utilisateur administrateur macOS plutôt que le mot de passe utilisateur postgres
. À ce stade, votre utilisateur administrateur Mac est celui qui exécute la commande Sudo
, pas l'utilisateur postgres
.
Bien que je ne comprenne pas pourquoi nous devons combiner le Sudo
avec le su
, cela fonctionne en effet pour moi dans macOS Mojave . Je n'ai pas trouvé cette astuce parmi mes différents efforts de recherche liés à BSD et Linux, donc c'est peut-être un Mac uniquement Apple chose, peut-être une mesure de sécurité supplémentaire. Ou peut-être dans les OS de style Unix , la commande su
doit être exécutée par l'utilisateur root
, et sous macOS, le compte root
est désactivé par défaut pour des raisons de sécurité - notre compte utilisateur administrateur Mac est moins puissant que root
, et peut ne pas être autorisé par défaut à exécuter su
? Ne vous en faites pas, la solution de contournement fonctionne.
Sudo -u
Selon à Craig Ringer et à Erwin Brandstetter , la forme la plus moderne est:
Sudo -u postgres -i
Selon cette page :
-u
signifie "exécuter une commande spécifiée en tant que cet utilisateur spécifié".postgres
spécifie le nom d'utilisateur sous lequel nous voulons exécuter la commande.-i
simule une connexion initiale, ce qui signifie que le shell sera initialisé en exécutant les scripts de démarrage de cet utilisateur.Pour plus de discussion sur les approches plus anciennes et plus récentes, voir cette question sur le site sœur, Quelle est la différence entre Sudo su - postgres et Sudo -u postgres? . La réponse de Craig Ringer conseille: (a) Oubliez Sudo su
, et (b) utilisez Sudo -u
au lieu.
postgres
Pour exécuter une session psql
en tant qu'utilisateur postgres
:
Sudo -u postgres psql
Pour exécuter l'application nano
éditeur de texte en tant qu'utilisateur postgres
:
Sudo -u postgres nano
Le programme d'installation EBD demande un mot de passe lors de l'installation mais il est destiné à l'utilisateur de la base de données, pas à l'utilisateur postgres
Unix, qui n'a pas de mot de passe.
Ceci est mentionné dans Postgres, mots de passe et installateurs sur le site EDB. Citation:
Sur les systèmes d'exploitation de type Unix tels que Linux et Mac OS X, le compte est configuré sans mot de passe et les utilisateurs n'ont généralement plus à s'en soucier.
L'explication la plus plausible à su - postgres
ne fonctionne pas, c'est que vous confondez le mot de passe de la base de données avec le mot de passe du système d'exploitation.
Faire su - postgres
utilisable, le mot de passe du système d'exploitation devrait être défini en premier, ce qui pourrait être fait avec:
$ Sudo passwd postgres
Cela est également vrai pour PostgreSQL empaqueté dans les distributions Linux. En fait, les packages PostgreSQL pour Linux vont même plus loin et ne demandent pas de mot de passe pour le superutilisateur de la base de données, ce qui permet une installation entièrement automatisée. Tout comme le mot de passe du système d'exploitation n'est pas nécessaire si Sudo
est toujours utilisé, un mot de passe de base de données n'est pas nécessaire si seule la méthode d'authentification peer
par défaut est utilisée par l'utilisateur postgres
.