Il me manque quelque chose concernant la configuration de PostgreSQL. Ce que j'aimerais faire, c'est créer plusieurs bases de données et utilisateurs isolés les uns des autres, de sorte qu'un utilisateur spécifique n'ait accès qu'aux bases de données que je spécifie. Cependant, d'après ce que je peux déterminer, tout utilisateur créé a accès à toutes les bases de données sans aucune subvention spécifique.
Voici ce que je fais sur un serveur Ubuntu 12.04:
- apt-get install postgresql
- sudo -u postgres createuser -DRSP mike1 (Spécification du mot de passe du nouvel utilisateur)
- sudo -u postgres createdb data1
- psql -h localhost -U mike1 data1 (Spécification du mot de passe permettant à l'utilisateur mike1 de se connecter)
Il semble que le nouvel utilisateur "mike1" n'a aucun problème à se connecter à la base de données "data1" et à créer des tables, etc. Et cela sans exécuter aucune commande GRANT (et le propriétaire de "data1" est "postgres" car je n'ai pas spécifié propriétaire à l'étape 3). Est-ce vraiment ainsi que cela est supposé fonctionner?
Ce que j'aimerais faire, c’est accorder à mike1 un accès complet à data1, puis le répéter pour davantage d’utilisateurs et de bases de données, en veillant à ce que les utilisateurs n’aient accès qu’à une (voire à plusieurs) bases de données de mon choix.
la source
Réponses:
Au niveau SQL, chaque utilisateur peut en effet se connecter à une base de données nouvellement créée jusqu'à ce que la commande SQL suivante soit émise:
Une fois cela fait, chaque utilisateur ou rôle qui devrait pouvoir se connecter doit se voir attribuer explicitement le privilège de connexion:
Edit: Dans un scénario à plusieurs locataires, plus que le
connect
privilège serait supprimé. Pour des astuces sur les locations multiples et les meilleures pratiques, consultez le wiki public de postgresql: Hébergement de bases de données partagées et gestion des droits dans PostgreSQL .la source
postgres
peut accéder à toutes les bases de données.PUBLIC a accès à la base de données par défaut, mais il ne peut pas accéder aux données. Vous pouvez annuler le public:
Si vous souhaitez ce paramètre pour toutes les futures bases de données, révoquez CONNECT sur la base de données template1 (la base de données template par défaut pour la création d'une nouvelle base de données):
la source
Outre la révocation par défaut des privilèges de connexion à PUBLIC et leur attribution comme vous le souhaitez, vous pouvez également contrôler l'accès via le fichier pg_hba.conf.
Vous pouvez trouver où le fichier est stocké avec:
Si vous choisissez d'utiliser ce mécanisme, il existe des commentaires intégrés qui peuvent suffire à vous aider à démarrer. Les docs sont ici:
http://www.postgresql.org/docs/current/interactive/auth-pg-hba-conf.html
la source
GRANT
/REVOKE
discutée dans d'autres réponses est probablement plus simple. D'une part, vous avez simplement besoin d'une connexion à la base de données superutilisateur pour cela, par opposition à un nom de connexion au système d'exploitation permettant de modifier le fichier.Je suis tombé sur ce fil en cherchant un moyen d'empêcher les utilisateurs de lister les autres noms de bases de données. Le
REVOKE CONNECT
n'empêche pas cela.D'après les réponses à cette question SO, il n'y a pas de moyen (recommandable) d'y parvenir.
la source