Par défaut, les utilisateurs PostgreSQL authentifient les authentifications sur les sockets Unix, où l'utilisateur Unix doit être le même que l'utilisateur PostgreSQL. Ainsi, les gens utilisent fréquemment su
ou Sudo
pour devenir le superutilisateur postgres
.
Je vois souvent des gens utiliser des constructions comme:
Sudo su - postgres
plutôt que
Sudo -u postgres -i
et je me demande pourquoi. De même, j'ai vu:
Sudo su - postgres -c psql
au lieu de
Sudo -u postgres psql
Sans Sudo
, les versions su
auraient un sens si vous étiez sur une ancienne plateforme sans Sudo
. Mais pourquoi utiliser un système UNIX ou Linux moins que préhistorique utiliseriez-vous Sudo su
?
Sudo su
Il n'y a aucun avantage à utiliser Sudo su
, c'est une habitude anachronique de l'époque où les gens avaient l'habitude d'utiliser su
. Les gens ont commencé à claquer Sudo
devant lorsque les distributions Linux ont cessé de définir un mot de passe root et ont fait de Sudo
le seul moyen d'accéder au compte root. Plutôt que de changer leurs habitudes, ils ont simplement utilisé Sudo su
. (J'étais l'un d'entre eux jusqu'à relativement récemment lorsque j'utilisais des boîtes avec des configurations sudoers
m'obligeait à changer d'habitude).
Sudo -u
Pour un shell de connexion, Sudo -u postgres -i
est préférable à Sudo su - postgres
. Il ne nécessite pas que l'utilisateur ait un accès root dans /etc/sudoers
, ils n'ont besoin que du droit de devenir utilisateur postgres
. Il vous permet également d'appliquer de meilleurs contrôles d'accès.
Pour l'exécution des commandes
Sudo -u postgres psql -c "SELECT 1"
est supérieur à l'alternative:
Sudo su - postgres -c "psql -c \"SELECT 1\""
en ce que vous n'avez pas à double-échapper les guillemets et autres métacaractères Shell ainsi que les autres avantages de sécurité de ne pas avoir besoin de root. Vous atterrirez probablement accidentellement en écrivant:
Sudo su - postgres -c psql -c "SELECT 1"
parfois, ce qui ne fonctionnera pas correctement.
Enfin, il est beaucoup plus facile de définir des variables d'environnement via Sudo
, par exemple.
Sudo PATH=/usr/pgsql-9.3/bin:$PATH -u postgres /usr/pgsql-9.3/bin/initdb -D /var/lib/pgsql/testcluster
que via su
. (Ici, le paramètre PATH
est requis pour que initdb
puisse trouver l'exécutable postgres
correct).
Donc. Oubliez la commande su
existe. Vous n'en avez plus besoin. Pour briser cette habitude, alias-la à quelque chose qui affichera une erreur. (Certains scripts de configuration d'initialisation et de package utilisent toujours su
, vous ne pouvez donc pas le supprimer).
Voir également: