Minimale Berechtigungen für den schreibgeschützten Zugriff auf einzelne Tabellen unter PostgreSQL

10

Im Folgenden finden Sie eine Liste von Befehlen, die anscheinend funktionieren, um einen neuen Benutzer zu erstellen (Login) und schreibgeschützten Zugriff für eine bestimmte Tabelle in PostgreSQL zu gewähren.

Nehmen wir an, dass diese Befehle bei der Anmeldung mit ausreichenden Berechtigungen ausgeführt werden (dh postgresbei der Standardinstallation anmelden).

CREATE ROLE user_name NOSUPERUSER NOCREATEDB 
NOCREATEROLE NOINHERIT LOGIN PASSWORD 'pwd' VALID UNTIL 'infinity';

Jetzt möchte ich eine selectTabelle tab_abcin der Datenbank gewähren db_xyz, also los geht's (Datenbank db_xyzwird über PgAdmin oder ähnliches als aktuell ausgewählt):

grant select on tab_abc to user_name;

Die Frage ist: ist dies ausreichend oder sollte es mehr Zuschüsse (Datenbank sein connect, usagevielleicht)?

Diese Befehle scheinen für mich zu funktionieren, aber meine Standardinstallation verfügt über Standardsicherheitseinstellungen. Welche zusätzlichen Zuschüsse sollte ich hinzufügen, wenn der Serveradministrator eine höhere Sicherheit konfiguriert hat?

Es scheint, dass ich weder gewähren muss connectnoch usage- ist das implizit beim Gewähren select? Ist es immer so

WildWezyr
quelle

Antworten:

12

Die Frage ist: Ist dies ausreichend oder sollten mehr Zuschüsse gewährt werden (Datenbankverbindung, Nutzung möglicherweise)?

Die Sicherheit kann gegenüber der Standardeinstellung hauptsächlich in folgenden Punkten erhöht werden:

  • Die pg_hba.confDatei. Es filtert Verbindungen, bevor Datenbankberechtigungen berücksichtigt werden. Die Standardeinstellung ist für lokale Verbindungen relativ offen, kann jedoch auf eine explizite Liste von Datenbanken, Benutzernamen und Netzwerkursprüngen beschränkt sein.

  • Die Berechtigungen für die Öffentlichkeit , die Pseudorolle, die jeder hat. Ein Benutzer kann implizit nur dann eine Verbindung herstellen, wenn das Verbindungsrecht erteilt wurde PUBLIC. Siehe Erstellter Benutzer kann ohne Berechtigungen auf alle Datenbanken in PostgreSQL zugreifen . Eine Datenbank verfügt möglicherweise über alle Berechtigungen, die der Öffentlichkeit entzogen wurden. Unter REVOKE im Dokument finden Sie die wichtigsten PostgreSQL-Versionen, die Sie verwenden.

  • Die Existenz des publicSchemas. Es wird standardmäßig mit der Datenbank erstellt, ist jedoch nicht obligatorisch. Anstatt öffentliche Berechtigungen aus dem publicSchema zu entfernen , kann es für DBAs sinnvoll sein, das publicSchema nur zu löschen, wenn neue Benutzer überhaupt keine implizite Berechtigung haben sollten.

Wenn diese Standardeinstellungen entfernt wurden, sollte zum Lesen einer Tabelle ein neuer Benutzer zugelassen werden:

GRANT CONNECT ON DATABASE dbname TO username;

Auf Datenbankebene:

GRANT USAGE ON SCHEMA schemaname TO username;
GRANT SELECT ON schemaname.tablename TO username;
Daniel Vérité
quelle