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-Benutzender einfach eine Rolle ist, die das Postgres-Rollenattribut LOGIN hat.
Von Snowflake Postgres verwaltete Rollen¶
Snowflake Postgres erstellt automatisch zwei verwaltete Rollen gleichzeitig, wenn es Ihre Instanz erstellt.
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_backendpg_use_reserved_connectionspg_create_subscriptionpg_read_all_settingspg_read_all_statspg_stat_scan_tablespg_monitorsnowflake_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. Sie können diese Anmeldeinformationen jederzeit neu generieren, 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.
Wählen Sie im Navigationsmenü die Option Postgres aus.
Wählen Sie Ihre -Instanz aus.
Wählen Sie oben rechts im Menü Manage die Option Regenerate credentials aus.
Klicken Sie auf die Schaltfläche Acknowledge & continue, um die Aktion zu bestätigen.
To regenerate credentials for the
snowflake_adminorapplicationrole, you can use an ALTER POSTGRES INSTANCE command with the RESET ACCESS FOR parameter. The value that you specify is a quoted string, either'snowflake_admin'or'application'. For example:ALTER POSTGRES INSTANCE my_instance_1 RESET ACCESS FOR 'snowflake_admin'; ALTER POSTGRES INSTANCE my_instance_2 RESET ACCESS FOR 'application';
Requires OWNERSHIP privilege
Dieser Befehl gibt eine Zeile mit der folgenden Spalte zurück:
password
Beispiel für die Rotation von Anmeldeinformationen
Den Zugriff für die Rolle
snowflake_adminfür eine Snowflake Postgres-Instanz namensmy_instancezurücksetzen:ALTER POSTGRES INSTANCE my_instance RESET ACCESS FOR 'snowflake_admin';
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 ausführen. Verwenden Sie dazu SET LOCAL:
BEGIN;
SET LOCAL log_statement = 'none';
CREATE USER mynewrole PASSWORD 'mynewpassword';
COMMIT;
Verwenden der psql des Postgres-Client-Befehls \password¶
Das Clientprogramm Postgres psql verfügt über einen password <https://www.postgresql.org/docs/current/app-psql.html>_-Metabefehl, mit dem das Kennwort für bestehende Benutzende geändert werden kann. Der Metabefehl \password berechnet den SCRAM-SHA-256-Hash-Wert des eingegebenen Kennworts im Voraus und verwendet diesen im Befehl ALTER ROLE, der an den Server gesendet wird. Um diese Methode zu verwenden, erstellen Sie zunächst neue Benutzende ohne Kennwort, und legen Sie dann das Kennwort jedes Benutzenden mit dem Metabefehl \password von psql fest.
postgres=# CREATE ROLE mynewrole LOGIN;
CREATE ROLE
postgres=# \password mynewrole
Enter new password for user "mynewrole":
Enter it again:
Wenn log_statement auf einen anderen Wert als 'none' 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. Sie können diese Methode mit dem vollständigen Deaktivieren von log_statement kombinieren, 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
Schutz vor geleakten Kennwörtern¶
Leaked password protection is provided for roles on Snowflake Postgres instances. Discovery and notification work as described in our main Schutz vor geleakten Kennwörtern. When Snowflake discovers a leaked password for one of your Snowflake Postgres roles:
Die Rolle wird der speziellen
snowflake_nologinPostgres-Gruppenrolle hinzugefügt, um zukünftige Anmeldungen mit dieser Rolle zu verhindern.Alle bestehenden Verbindungen für die Rolle werden beendet.
Die E-Mail-Benachrichtigung, die Sie erhalten, enthält den Betreff „Dringend – Zurücksetzen des Kennworts für Snowflake Postgres-Rolle(n), um nicht autorisierten Zugriff zu verhindern“.
Should you receive this email you should immediately securely update the role’s password as described above. When regenerating credentials
for managed roles they are automatically removed from the snowflake_nologin Postgres role group. For non-managed roles, after updating
the role’s password they can be removed from the snowflake_nologin group role by running this Postgres with the snowflake_admin role:
REVOKE snowflake_nologin FROM {rolename};
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.