Snowflake Postgres-Rollen

Postgres verfügt über eine eigene rollenbasierte Authentifizierung zum Verwalten von Verbindungen zu Datenbanken und zum Verwenden von Datenbanken auf einem Postgres-Server. Diese Rollen sind anders als die Rollen in Snowflake. Postgres-Rollen werden für den Zugriff auf und die Verwaltung von Datenbanken, Tabellen und anderen Objekten innerhalb von Snowflake Postgres-Instanzen verwendet.

Wenn Sie eine Instanz erstellen, erstellt Snowflake automatisch zwei spezielle verwaltete Rollen, die Sie nutzen können. Diese werden im Folgenden beschrieben.

Weitere Informationen zur Verwaltung von Postgres-Rollen finden Sie in der Postgres-Dokumentation.

Bemerkung

Hier und an vielen anderen Stellen werden die Begriffe „Rolle“ und „Benutzer“ im Zusammenhang mit der Postgres-Benutzerverwaltung austauschbar verwendet. Das liegt daran, dass ein Postgres-Benutzer einfach eine Rolle ist, die das Postgres-Rollenattribut LOGIN hat.

Von Snowflake Postgres verwaltete Rollen

Snowflake Postgres bietet zwei verwaltete Rollen, die automatisch zum Zeitpunkt der Instanzerstellung erstellt werden.

Rolle snowflake_admin

Die Rolle snowflake_admin ist eine Postgres-Rolle mit hohen Berechtigungen, mit der Ihre Snowflake-Postgres-Instanz verwaltet wird. Dies ist kein vollständiger Postgres-Superuser; einige Vorgänge bleiben eingeschränkt und werden von Snowflake verwaltet. Die Rolle verfügt jedoch über erhöhte Berechtigungen, die Folgendes umfassen:

  • Erstellen und Verwalten von Postgres-Rollen

  • Erstellen und Verwalten von Datenbanken

  • Verwalten der Replikation für Ihre Snowflake Postgres-Instanz

  • Umgehen der Sicherheit auf Zeilenebene (RLS), wo zutreffend.

Darüber hinaus ist snowflake_admin Mitglied mehrerer integrierter Postgres-Rollen, die Überwachungs- und Betriebsfunktionen gewähren, einschließlich:

  • pg_signal_backend

  • pg_use_reserved_connections

  • pg_create_subscription

  • pg_read_all_settings

  • pg_read_all_stats

  • pg_stat_scan_tables

  • pg_monitor

  • snowflake_admin_group

Rolle application

Die application-Rolle ist eine Nicht-Superuser-Rolle, die standardmäßig über die Berechtigungen verfügt, Objekte in der postgres-Datenbank zu erstellen. Neue Berechtigungen oder die Eigentümerschaft für diese Rolle sollten von der snowflake_admin-Rolle gewährt werden-

Sicherheit von Postgres-Kennwörtern

Neuerstellen von Anmeldeinformationen für von Snowflake Postgres verwaltete Rollen

Anmeldeinformationen für die Rollen snowflake_admin und application werden generiert, wenn Sie die Instanz erstellen, und sie werden nur einmal angezeigt. Diese Anmeldeinformationen können jederzeit neu generiert werden, wodurch die vorhandenen Anmeldeinformationen ungültig werden.

Über das Dashboard können Sie die Anmeldeinformationen für die snowflake_admin-Rolle Ihrer Instanz neu generieren.

  1. Wählen Sie im Navigationsmenü die Option Postgres aus.

  2. Wählen Sie Ihre -Instanz aus.

  3. Wählen Sie oben rechts im Menü Manage die Option Regenerate credentials aus.

  4. Klicken Sie auf die Schaltfläche Acknowledge & continue, um die Aktion zu bestätigen.

Festlegen von Kennwörtern für andere Postgres-Rollen

Snowflake Postgres-Instanzen sind für die SCRAM-SHA-256-Kennwortauthentifizierung konfiguriert. Wenn neue Kennwörter festgelegt werden, wird ein SCRAM-SHA-256-Hash generiert und vom Server gespeichert. Wenn der Postgres-Parameter log_statement jedoch auf einen anderen Wert als none festgelegt ist, dann werden die Befehle CREATE ROLE und ALTER ROLE DDL vollständig im Postgres-Serverprotokoll protokolliert. Daher sollten Sie sicherstellen, dass keine Klartext-Kennwörter als Teil dieser Anweisungen protokolliert werden.

Deaktivieren der Anweisungsprotokollierung für die CREATE ROLE- und ALTER ROLE-Befehle von Postgres DDL

Der einfachste Weg, um zu verhindern, dass in CREATE ROLE- und ALTER ROLE DDL-Anweisungen verwendete Klartext-Kennwörter im Postgres-Serverprotokoll angezeigt werden, ist der, den log_statement-Parameter für die Transaktion zu deaktivieren, in der Sie ihn SET LOCAL ausführen:

BEGIN;
SET LOCAL log_statement = 'none';
CREATE USER mynewrole PASSWORD 'mynewpassword';
COMMIT;
Copy

Verwenden der psql des Postgres-Client-Befehls \password

psql von Postgres hat einen Metabefehl password <https://www.postgresql.org/docs/current/app-psql.html>_, der verwendet werden kann, um das Kennwort vorhandener Benutzender zu ändern. Der Metabefehl berechnet das SCRAM-SHA-256-Hash des eingegebenen Kennworts im Voraus und verwendet es in dem ALTER ROLE-Befehl, der an den Server gesendet wird. Um diese Methode zu verwenden, sollten Sie zunächst neue Benutzende ohne Kennwort erstellen und dann das Kennwort jedes Benutzenden mit dem Metabefehl \password von psql festlegen.

postgres=# CREATE ROLE mynewrole LOGIN;
CREATE ROLE

postgres=# \password mynewrole
Enter new password for user "mynewrole":
Enter it again:
Copy

Wenn log_statement auf einen anderen Wert als „none“ (keiner) festgelegt ist, dann hat der Protokolleintrag für den Befehl ALTER ROLE, der von psql für den oben genannten \password-Befehl gesendet wird, den berechneten SCRAM-SHA-256-Hash-Wert, anstatt das eigentliche Klartextkennwort. Diese Methode könnte mit dem vollständigen Deaktivieren von log_statement kombiniert werden, wie oben beschrieben, um zu verhindern, dass selbst dieser Hash-Wert im Postgres-Protokoll erscheint:

postgres=# CREATE ROLE mynewrole LOGIN;
CREATE ROLE

postgres=# BEGIN;
BEGIN

postgres=# SET LOCAL log_statement = 'none';
SET

postgres=# \password mynewrole
Enter new password for user "mynewrole":
Enter it again:

postgres=# COMMIT;
COMMIT
Copy

Rolleneinschränkungen

In Snowflake Postgres sind bestimmte Vorgänge für den Service selbst reserviert und können von keiner vom Kunden verwalteten Rolle ausgeführt werden, auch nicht von snowflake_admin. Diese Beispiele sind:

  • Ändern von geschützten Konfigurationsparametern auf Serverebene, die von Snowflake verwaltet werden

  • Ändern oder Deaktivieren von zentralen, von Snowflake verwalteten Komponenten oder Erweiterungen

  • Zugriff auf oder Ändern der von Snowflake verwalteten Systemdatenbanken oder Schemas, die vom Service verwendet werden

  • Zugriff auf oder Ändern des Dateisystems der Snowflake Postgres-Instanz

  • Direktes Ändern von Systemkatalogtabellen

  • Erstellen anderer Superuser

  • Erstellen von mehr als 64 Rollen in der Instanz

  • Erstellen von mehr als 32 Datenbanken in der Instanz

  • Ausführen des Befehls ALTER SYSTEM

  • Der Zugriff auf die allgemeine Dateizugriffsfunktionen von Postgres, die den Zugriff auf das Dateisystem erlauben.

Die Snowflake-Postgres-Erweiterung kann für die beiden Rollen snowflake_admin und application weitere Einschränkungen dessen einführen, was sie innerhalb einer Instanz tun können. Diese erweiterungsspezifischen Einschränkungen können sich im Laufe der Zeit weiterentwickeln und werden mit dem entsprechenden Verhalten der Erweiterung dokumentiert. Wenn ein Vorgang blockiert ist, erhalten Sie eine Fehlermeldung, die darauf hinweist, dass dies in Snowflake Postgres nicht zulässig ist.