PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Que fait exactement GRANT USAGE ON SCHEMA ?

GRANT s sur différents objets sont séparés. GRANT ing sur une base de données ne GRANT droits sur le schéma à l'intérieur. De même, GRANT ing sur un schéma n'accorde pas de droits sur les tables à l'intérieur.

Si vous avez des droits sur SELECT d'une table, mais pas le droit de le voir dans le schéma qui le contient, vous ne pouvez pas accéder à la table.

Les tests de droits se font 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 le schéma a un GRANT par défaut de tous les droits sur le rôle public , dont chaque utilisateur/groupe est membre. Ainsi, tout le monde a déjà utilisé ce schéma.

L'expression :

(en supposant que les propres exigences de privilège des objets sont également remplies)

Indique que vous devez avoir USAGE sur un schéma pour utiliser les objets qu'il contient, mais ayant USAGE sur un schéma n'est pas suffisant en soi pour utiliser les objets au sein du 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 avec le fichier somefile à l'intérieur de celui-ci, puis définissez-le de sorte 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) alors personne d'autre ne peut lister le répertoire pour voir que le fichier existe.

Si vous deviez accorder des droits de lecture universelle sur le fichier (mode rw-r--r-- ) mais ne modifiez pas les autorisations du répertoire, cela ne ferait aucune différence. Personne ne pouvait voir le fichier afin de le lire, car ils n'ont pas le droit de lister le répertoire.

Si vous définissez plutôt rwx-r-xr-x sur le répertoire, en le définissant pour que les gens puissent lister et parcourir le répertoire mais sans changer les autorisations de fichiers, les gens pourraient lister le fichier mais n'a pas pu lire car ils n'auraient pas accès au fichier.

Vous devez définir les deux autorisations pour que les personnes puissent réellement voir le fichier.

Même chose en Pg. Vous avez besoin des deux schémas USAGE droits et droits d'objet pour effectuer une action sur un objet, comme SELECT à partir d'un tableau.

(L'analogie tombe un peu dans le sens où 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 par SELECT provenant de pg_class directement. Ils ne peuvent en aucun cas interagir avec, donc c'est juste la partie "liste" qui n'est pas tout à fait la même.)