GRANT
s auf verschiedenen Objekten sind getrennt. GRANT
Wenn Sie sich in einer Datenbank befinden, haben Sie keine GRANT
Rechte an dem darin enthaltenen Schema. In ähnlicher Weise GRANT
gewährt das Verwenden eines Schemas keine Rechte für die darin enthaltenen Tabellen.
Wenn Sie Rechte an SELECT
einer 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 public
Schema standardmäßig GRANT
alle 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 USAGE
ein Schema haben, um Objekte darin zu verwenden, aber USAGE
ein 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 somedir
mit einer darin enthaltenen Datei erstellen, somefile
stellen 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-x
auf 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- USAGE
als auch Objektrechte, um eine Aktion für ein Objekt auszuführen, z. B. SELECT
aus 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 SELECT
aus 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 -e
in pqsl eine Art for-Anweisungen gibt.