GRANTs sur différents objets sont séparés. GRANTsur une base de données n'a pas de GRANTdroits sur le schéma à l'intérieur. De la même manière, l'ingénierie GRANTsur un schéma n'accorde pas de droits sur les tables à l'intérieur.
Si vous avez des droits sur SELECTune table, mais pas le droit de la voir dans le schéma qui la contient, vous ne pouvez pas accéder à la table.
Les tests de droits sont effectués dans l'ordre:
Do you have `USAGE` on the schema?
No: Reject access.
Yes: Do you also have the appropriate rights on the table?
No: Reject access.
Yes: Check column privileges.
Votre confusion peut provenir du fait que le publicschéma a par défaut GRANTtous les droits sur le rôle public, dont chaque utilisateur / groupe est membre. Donc, tout le monde a déjà une utilisation sur ce schéma.
La phrase:
(en supposant que les propres conditions de privilège des objets sont également satisfaites)
C'est dire que vous devez avoir USAGEsur un schéma pour utiliser des objets à l'intérieur, mais avoirUSAGE sur un schéma n'est pas en soi suffisant pour utiliser les objets dans le schéma, vous devez également avoir des droits sur les objets eux-mêmes.
C'est comme une arborescence de répertoires. Si vous créez un répertoire somedircontenant un fichier, somefiledéfinissez-le pour que seul votre propre utilisateur puisse accéder au répertoire ou au fichier (mode rwx------sur le répertoire , mode rw-------sur le fichier), personne d'autre ne peut répertorier le répertoire pour voir que le fichier existe.
Si vous accordiez des droits de lecture universelle sur le fichier (mode rw-r--r--) sans modifier les autorisations de répertoire, cela ne ferait aucune différence. Personne ne pouvait voir le fichier pour le lire, car ils n'ont pas le droit de lister le répertoire.
Si vous définissez rwx-r-xr-xà la place le répertoire, en le définissant pour que les utilisateurs puissent le répertorier et le parcourir sans modifier les autorisations du fichier, les utilisateurs pourraient répertorier le fichier mais ne pourraient pas le lire car ils n'auraient pas accès au fichier.
Vous devez définir les deux autorisations pour que les utilisateurs puissent réellement afficher le fichier.
Même chose en Pg. Vous avez besoin à la fois des USAGEdroits de schéma et des droits d'objet pour effectuer une action sur un objet, comme à SELECTpartir d'une table.
(L'analogie tombe un peu en ce sens que PostgreSQL n'a pas encore de sécurité au niveau des lignes, donc l'utilisateur peut toujours "voir" que la table existe dans le schéma SELECTen provenant pg_classdirectement. Ils ne peuvent en aucun cas interagir avec elle. , cependant, c'est juste la partie "liste" qui n'est pas tout à fait la même.)
CREATE EXTENSION. C'est plus ou moins le même problème avec les fichiers créés sous Linux pendant que vous êtessu. Ce sera bien s'il y a une sorte d'sudo -einstructions for dans pqsl.