Gewähren Sie SELECT für alle Tabellen in Redshift


10

Ich versuche, SELECTeiner Gruppe in Redshift Berechtigungen zuzuweisen . Also habe ich eine Gruppe und einen Benutzer in dieser Gruppe erstellt:

CREATE GROUP data_viewers;
CREATE USER <user> PASSWORD '<password>' IN GROUP data_viewers;

Jetzt möchte ich dieser Gruppe erlauben, Daten aus jeder Tabelle lesen zu können:

GRANT SELECT ON ALL TABLES IN SCHEMA PUBLIC TO GROUP data_viewers;

Der Befehl kehrt zurück GRANT. Wenn ich mich jetzt als neu erstellter Benutzer mit Redshift verbinde und ein Problem SELECT * FROM something.something;erhalte , wird Folgendes angezeigt :

Erlaubnis für Schema etwas verweigert

Ich habe versucht, Berechtigungen für etwas zu erteilen. GRANT SELECT ON ALL TABLES IN SCHEMA something TO GROUP data_viewers;Dies hat jedoch nichts geändert.


Wie kann ich Benutzern aus meiner Gruppe erlauben, SELECTDaten aus einer beliebigen Tabelle im Schema abzurufen?

Antworten:


15

Sie benötigen USAGE(zumindest) das Privileg für das Schema :

GRANT USAGE ON SCHEMA something TO GROUP data_viewers;

Verwandte Postgres Beispiel:

Denken Sie daran, dass Sie nur Berechtigungen für bereits vorhandene Tabellen erteilt haben. Gilt nicht für später erstellte Tabellen. Um auch diese abzudecken:

ALTER DEFAULT PRIVILEGES FOR USER role_that_creates_tables
IN SCHEMA public
GRANT SELECT ON TABLES TO GROUP data_viewers;

Amazon Redshift wurde ebenfalls implementiert DEFAULT PRIVILEGES.

Hier ist ein komplettes Kochbuch für Postgres:

Beachten Sie einige Unterschiede zwischen Postgres und Redshift! Redshift bleibt bei der Trennung von Benutzern und Gruppen , während Postgres dies durch das universelle Konzept der Rollen ersetzt :

Und ich bin mir nicht sicher, wie Redshift mit Sequenzen umgeht ...


Vielen Dank!! Ich wusste nicht einmal über das Konzept von DEFAULT PRIVILEGESin Redshift Bescheid, bevor ich diese Antwort las! Es hat das Problem für mich vollständig gelöst!
Marco Roy

11

Ich hatte das gleiche Bedürfnis nach einem schreibgeschützten Redshift-Benutzer. Nachdem die Dokumentation zu lesen, ich kam mit bis eine Reihe von Anfragen:

-- Create Read-Only Group     
CREATE GROUP ro_group;

-- Create User
CREATE USER ro_user WITH password PASSWORD;

-- Add User to Read-Only Group
ALTER GROUP ro_group ADD USER ro_user;

-- Grant Usage permission to Read-Only Group to specific Schema
GRANT USAGE ON SCHEMA "ro_schema" TO GROUP ro_group;

-- Grant Select permission to Read-Only Group to specific Schema
GRANT SELECT ON ALL TABLES IN SCHEMA "ro_schema" TO GROUP ro_group;

-- Alter Default Privileges to maintain the permissions on new tables
ALTER DEFAULT PRIVILEGES IN SCHEMA "ro_schema" GRANT SELECT ON TABLES TO GROUP ro_group;

-- Revoke CREATE privileges from group
REVOKE CREATE ON SCHEMA "ro_schema" FROM GROUP ro_group;

Wenn Sie den Benutzer später tatsächlich entfernen möchten, müssen Sie so ziemlich rückwärts gehen.


Der letzte Widerruf von CREATE ist eigentlich nicht erforderlich, da diese Berechtigung nicht standardmäßig erteilt wird.
Nikel
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.