it-swarm.com.de

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

Ich versuche, einer Gruppe in Redshift das Privileg SELECT 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 gibt GRANT zurück. Wenn ich mich jetzt als mein neu erstellter Benutzer mit Redshift verbinde und SELECT * FROM something.something; Ich bekomme:

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; aber das hat nichts geändert.


Wie kann ich Benutzern aus meiner Gruppe erlauben, SELECT Daten aus einer beliebigen Tabelle im Schema zu verwenden?

9
Salvador Dali

Sie benötigen das USAGE Privileg (zumindest) 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 implementiert DEFAULT PRIVILEGES auch.

Hier ist ein komplettes Kochbuch für Postgres:

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

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

14

Ich hatte das gleiche Bedürfnis nach einem schreibgeschützten Redshift-Benutzer. Nach dem Lesen der Dokumente habe ich mit eine Reihe von Abfragen:

-- 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.

11
Joe Kaire