it-swarm.com.de

PostgreSQL - Wer oder was ist die "PUBLIC" -Rolle?

Ich habe information_schema.role_table_grants als ich public in der Spalte grantee sah, habe ich bei information_schema.enabled_roles aber dieses role_name ist nicht vorhanden.

=> Wer oder was ist die Rolle public?

11
Gugelhupf

direkt aus dem Handbuch :

Das Schlüsselwort PUBLIC gibt an, dass die Berechtigungen allen Rollen gewährt werden sollen, einschließlich derjenigen, die möglicherweise später erstellt werden. PUBLIC kann als implizit definierte Gruppe betrachtet werden, die immer alle Rollen umfasst. Für eine bestimmte Rolle wird die Summe der direkt gewährten Berechtigungen, der Berechtigungen für jede Rolle, zu der sie derzeit gehört, und der PUBLIC gewährten Berechtigungen gewährt.

Dies ist zwar wahr, aber nicht das ganze Bild. Public fungiert auch als implizite Rolle, zu der andere Rollen gehören und die über eigene Berechtigungen verfügt, die nicht immer wiedergegeben und gemeldet werden und vererbt werden.

Standardmäßig wird die Erstellungsberechtigung für das öffentliche Schema erteilt. Wenn Sie dies nicht entfernen, führen alle anderen korrekten Schritte zum Erstellen eines schreibgeschützten Benutzers dazu, dass dieser Benutzer auch neue Objekte im öffentlichen Schema erstellen und dann aufgrund des Eigentums Daten in diese einfügen kann. Um dies zu verhindern

REVOKE ALL ON SCHEMA public FROM PUBLIC;

In ähnlicher Weise gibt es auch die Berechtigung auf Datenbankebene, die Verwendung zu entfernen

REVOKE ALL ON DATABASE all_database FROM PUBLIC;

Guter Artikel hier: https://wiki.postgresql.org/images/d/d1/Managing_rights_in_postgresql.pdf

7
Ruan Malan N