Enfin, je pense avoir la solution. J'ai fais pas mal de recherche depuis hier et beaucoup de test... comme toi j'imagine.... Ce qui est bien en aidant les autres, c'est que l'on apprends beaucoup de choses...
Voilà ce que j'ai compris :
- il est impossible d'enlever/d'accorder le privilège "CREATE" directement à un utilisateur. Par contre, on peut le faire sur un schema,
- seul le createur de la table peut faire un drop table, il n'y a donc pas de gestion de droit sur ce privilège,
- pour accorder les privilièges pour voir les tables, il faut accorder le priv. "usage" sur un schema, puis accorder les "select, insert etc etc" sur les tables,
- il existe le schema qui est une sorte de sous-division de la base, le schema s'appelle public par défaut. Il existe aussi le groupe d'utilisateur public qui représente tous les utilisateurs. Ceci permet de gérer les droits pour tous les schemas public (pas les tables cependant) ou pour tous les utilisateurs d'un coup.
En bref, dans ton cas :
- User1 doit créer les bases db1 et db2, puis les tables, il a ainsi tous les droits sur les deux bases.
- Pour User2, il faut faire sur db1 :
grant all to schema public to User2;
pour qu'il puisse voir les tables du chema public et en créer d'autres, puis utiliser le script pour lui donner les droits sur les tables. Du coup, il aura tous les droits, sauf le drop table qui n'appartient qu'au créateur de la table ou au super-utilisateur (postgres en l'occurence). Il pourra donc créer des tables, les utiliser, détruire les tables qu'il aura créer.
- Pour User2, il faut faire sur db2 :
grant usage to schema public to User2;
pour qu'il puisse voir les tables du schema public mais qu'il ne puisse en créer d'autres, puis utiliser le script pour donner droits voulus.
J'espère que je n'ai pas été trop confus et que cela réponds à ton attente. J'imagine que la prochaine question sera comment donner les droits de "drop table" à User2 sur la db1, mais je n'ai pas encore trouvé. Peut-être du côté des groupes.... a suivre....
Partager