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

11

Ich habe nachgesehen, information_schema.role_table_grantsals ich publicin der granteeSpalte gesehen habe, dann habe ich nachgesehen, information_schema.enabled_rolesaber role_namedas existiert nicht.

=> Wer oder was ist die publicRolle?

Gugelhupf
quelle

Antworten:

9

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, der sie derzeit angehört, und der PUBLIC gewährten Berechtigungen gewährt.

ein Pferd ohne Name
quelle
7

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

Ruan Malan N.
quelle