GRANTs auf verschiedenen Objekten sind getrennt. GRANTWenn Sie sich in einer Datenbank befinden, haben Sie keine GRANTRechte an dem darin enthaltenen Schema. In ähnlicher Weise GRANTgewährt das Verwenden eines Schemas keine Rechte für die darin enthaltenen Tabellen.
Wenn Sie Rechte an SELECTeiner Tabelle haben, aber nicht das Recht, sie in dem Schema anzuzeigen, das sie enthält, können Sie nicht auf die Tabelle zugreifen.
Die Rechtstests 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 sich aus der Tatsache ergeben, dass das publicSchema standardmäßig GRANTalle Rechte an der Rolle hat public, zu der jeder Benutzer / jede Gruppe gehört. Jeder hat also bereits Verwendung für dieses Schema.
Der Satz:
(unter der Annahme, dass auch die eigenen Berechtigungsanforderungen der Objekte erfüllt sind)
Das heißt, Sie müssen USAGEein Schema haben, um Objekte darin zu verwenden, aber USAGEein Schema allein reicht nicht aus, um die Objekte innerhalb des Schemas zu verwenden. Sie müssen auch Rechte an den Objekten selbst haben.
Es ist wie ein Verzeichnisbaum. Wenn Sie ein Verzeichnis somedirmit einer darin enthaltenen Datei erstellen, somefilestellen Sie es so ein, dass nur Ihr eigener Benutzer auf das Verzeichnis oder die Datei zugreifen kann (Modus im Verzeichnis rwx------, Modus rw-------in der Datei), und niemand anderes kann das Verzeichnis auflisten, um festzustellen, ob die Datei vorhanden ist.
Wenn Sie der Datei (Modus rw-r--r--) weltweite Leserechte gewähren, aber die Verzeichnisberechtigungen nicht ändern würden, würde dies keinen Unterschied machen. Niemand konnte sehen Sie die Datei , um es zu lesen, weil sie nicht die Rechte , um das Verzeichnis aufzulisten.
Wenn Sie stattdessen setzen rwx-r-xr-xauf das Verzeichnis, das Einstellen so können die Menschen das Verzeichnis aufgelistet und durchqueren , aber nicht die Dateiberechtigungen zu ändern, könnten die Menschen Liste die Datei konnte aber nicht lesen , weil sie keinen Zugriff auf die Datei haben würde.
Sie müssen beide Berechtigungen festlegen , damit Benutzer die Datei tatsächlich anzeigen können.
Gleiches in Pg. Sie benötigen sowohl Schema- USAGEals auch Objektrechte, um eine Aktion für ein Objekt auszuführen, z. B. SELECTaus einer Tabelle.
(Die Analogie fällt insofern ein wenig insofern, als PostgreSQL noch keine Sicherheit auf Zeilenebene hat, sodass der Benutzer immer noch "sehen" kann, dass die Tabelle im Schema vorhanden ist, indem er direkt von dort SELECTaus pg_class. Sie können in keiner Weise mit ihr interagieren Es ist jedoch nur der "Listen" -Teil, der nicht ganz gleich ist.)
CREATE EXTENSION. Es ist mehr oder weniger das gleiche Problem mit Dateien, die unter Linux erstellt wurden, während Sie sindsu. Es ist gut, wenn essudo -ein pqsl eine Art for-Anweisungen gibt.