GRANT
s sur différents objets sont séparés. GRANT
sur une base de données n'a pas de GRANT
droits sur le schéma à l'intérieur. De la même manière, l'ingénierie GRANT
sur un schéma n'accorde pas de droits sur les tables à l'intérieur.
Si vous avez des droits sur SELECT
une 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 public
schéma a par défaut GRANT
tous 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 USAGE
sur 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 somedir
contenant un fichier, somefile
dé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 USAGE
droits de schéma et des droits d'objet pour effectuer une action sur un objet, comme à SELECT
partir 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 SELECT
en provenant pg_class
directement. 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 -e
instructions for dans pqsl.