PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Was macht GRANT USAGE ON SCHEMA genau?

GRANT s auf verschiedenen Objekten sind getrennt. GRANT ing auf einer Datenbank nicht GRANT Rechte an dem darin enthaltenen Schema. Ebenso GRANT Das Anwenden eines Schemas gewährt keine Rechte für die darin enthaltenen Tabellen.

Wenn Sie Rechte zum SELECT haben aus einer Tabelle, aber nicht das Recht, sie in dem Schema zu sehen, das sie enthält, dann können Sie nicht auf die Tabelle zugreifen.

Die Rechtetests werden in der folgenden Reihenfolge durchgeführt:

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.

Ihre Verwirrung kann dadurch entstehen, dass public Schema hat einen Standard GRANT aller Rechte auf die Rolle public , in der jeder Benutzer/jede Gruppe Mitglied ist. Jeder hat also bereits Gebrauch von diesem Schema.

Der Satz:

(vorausgesetzt, dass die eigenen Berechtigungsanforderungen der Objekte ebenfalls erfüllt sind)

Bedeutet, dass Sie USAGE haben müssen auf einem Schema, um Objekte darin zu verwenden, aber mit USAGE auf einem Schema allein nicht ausreicht, um die Objekte innerhalb des Schemas zu verwenden, Sie müssen auch Rechte auf die Objekte selbst haben.

Es ist wie ein Verzeichnisbaum. Wenn Sie ein Verzeichnis somedir erstellen mit der Datei somefile darin dann so einstellen, dass nur der eigene Benutzer auf das Verzeichnis oder die Datei zugreifen kann (Modus rwx------ im Verzeichnis Modus rw------- auf der Datei), dann kann niemand sonst das Verzeichnis auflisten, um zu sehen, dass die Datei existiert.

Wenn Sie der Datei weltweite Leserechte erteilen (Modus rw-r--r-- ), aber ändern Sie nicht die Verzeichnisberechtigungen, es würde keinen Unterschied machen. Niemand konnte sehen die Datei, um sie zu lesen, da sie nicht die Rechte haben, das Verzeichnis aufzulisten.

Wenn Sie stattdessen rwx-r-xr-x setzen auf das Verzeichnis setzen und es so einstellen, dass Leute das Verzeichnis auflisten und durchsuchen können, aber die Dateiberechtigungen nicht ändern, Leute könnten auflisten die Datei konnte aber nicht gelesen werden weil sie keinen Zugriff auf die Datei hätten.

Sie müssen beide festlegen Berechtigungen für Personen, um die Datei tatsächlich anzeigen zu können.

Dasselbe in Pg. Sie benötigen beide Schemata USAGE Rechte und Objektrechte, um eine Aktion an einem Objekt auszuführen, wie SELECT aus einer Tabelle.

(Die Analogie fällt etwas herunter, da PostgreSQL noch keine Sicherheit auf Zeilenebene hat, sodass der Benutzer immer noch "sehen" kann, dass die Tabelle im Schema durch SELECT existiert von pg_class direkt. Sie können jedoch in keiner Weise damit interagieren, also ist nur der "Listen"-Teil nicht ganz derselbe.)