Amazon Redshift unterstützt ab dem 1. November 2025 nicht mehr die Erstellung neuer Python-UDFs. Wenn Sie Python-UDFs verwenden möchten, erstellen Sie die UDFs vor diesem Datum. Bestehende Python-UDFs funktionieren weiterhin wie gewohnt. Weitere Informationen finden Sie im Blog-Posting
Tutorial: Rollen erstellen und Abfragen mit RBAC durchführen
Mit RBAC können Sie Rollen mit Berechtigungen zum Ausführen von Befehlen erstellen, für die früher Superuser-Berechtigungen erforderlich waren. Benutzer können diese Befehle ausführen, sofern ihnen die Rolle zugewiesen wurde, die diese Berechtigungen enthält.
In diesem Tutorial verwenden Sie die rollenbasierte Zugriffssteuerung (RBAC) zum Verwalten von Berechtigungen in einer von Ihnen erstellten Datenbank. Anschließend stellen Sie eine Verbindung zu der Datenbank her und fragen die Datenbank von zwei verschiedenen Rollen aus ab, um die Funktionalität von RBAC zu testen.
Die beiden Rollen, die Sie erstellen und verwenden, um die Datenbank abzufragen, sind sales_ro und sales_rw. Sie erstellen die sales_ro-Rolle und fragen Daten als Benutzer mit der sales_ro-Rolle ab. Der sales_ro-Benutzer kann nur den Befehl SELECT verwenden, nicht jedoch den Befehl UPDATE. Anschließend erstellen Sie die sales_rw-Rolle und fragen Daten als Benutzer mit der sales_rw-Rolle ab. Der sales_rw-Benutzer kann den Befehl SELECT und den Befehl UPDATE verwenden.
Auf ähnliche Weise können Sie auch Rollen erstellen, um den Zugriff auf bestimmte Befehle zu beschränken, und die Rolle entweder Superusern oder Benutzern zuzuweisen.
Aufgaben
-
Schritt 4: Abfragen der Daten als schreibgeschützter Benutzer
-
Schritt 5: Erstellen eines Benutzers mit Lese- und Schreibberechtigungen
-
Schritt 6: Abfragen der Daten als Benutzer mit der übernommenen schreibgeschützten Rolle
-
Schritt 7: Erteilen von Aktualisierungs- und Einfügeberechtigungen für die Lese-/Schreib-Rolle
-
Schritt 8: Abfragen der Daten als Benutzer mit Lese-/Schreibzugriff ab
-
Schritt 9: Analysieren und Leeren von Tabellen in einer Datenbank als Administratorbenutzer
-
Schritt 10: Kürzen von Tabellen als Benutzer mit Lese-/Schreibzugriff
-
Verwenden der Sicherheit auf Zeilenebene mit RBAC (optional)
Voraussetzungen
Erstellen Sie einen Amazon-Redshift-Cluster oder eine Serverless-Arbeitsgruppe, der/die mit der TICKIT-Beispieldatenbank geladen ist. Informationen zum Erstellen einer Serverless-Arbeitsgruppe finden Sie unter Erste Schritte mit Redshift Serverless Data Warehouses. Informationen zum Erstellen eines Clusters finden Sie unter Erstellen eines Amazon-Redshift-Beispielclusters. Weitere Informationen zur TICKIT-Beispieldatenbank finden Sie unter Beispieldatenbank.
Sie haben Zugriff auf einen Benutzer mit Superuser- oder Rollenadministratorberechtigungen. Nur Superuser oder Rollenadministratoren können Rollen zuweisen oder widerrufen. Weitere Informationen zu den für RBAC erforderlichen Berechtigungen finden Sie unter Systemberechtigungen für RBAC.
Überprüfen Sie das Überlegungen zur Rollennutzung in RBAC.
Schritt 1: Erstellen eines Administratorbenutzers
Um dieses Tutorial einzurichten, erstellen Sie eine Datenbankadministratorrolle und weisen sie in diesem Schritt einem Datenbankadministratorbenutzer zu. Sie müssen den Datenbankadministrator als Superuser oder Rollenadministrator erstellen.
Verwenden Sie den Amazon Redshift Query Editor v2, um die Abfragen auszuführen.
Verwenden Sie das folgende Beispiel, um die Administratorrolle db_admin zu erstellen.
CREATE ROLE db_admin;Im folgenden Beispiel wird ein Datenbankbenutzer mit dem Namen dbadmin erstellt.
CREATE USER dbadmin PASSWORD 'Test12345';Verwenden Sie das folgende Beispiel, um der Rolle db_admin die vom System definierte Rolle mit dem Namen sys:dba zuzuweisen. Wenn dem Benutzer dbadmin die Rolle sys:dba zugewiesen wird, kann er Schemata und Tabellen erstellen. Weitere Informationen finden Sie unter Systemdefinierte Amazon-Redshift-Rollen.
Schritt 2: Einrichten von Schemata
In diesem Schritt stellen Sie als Datenbankadministrator eine Verbindung zu Ihrer Datenbank her. Anschließend erstellen Sie zwei Schemata und fügen ihnen Daten hinzu.
Stellen Sie mit Query Editor v2 als Benutzer dbadmin eine Verbindung zur dev-Datenbank her. Weitere Informationen zum Herstellen einer Verbindung zu einer Datenbank finden Sie unter Arbeiten mit Query Editor v2.
Verwenden Sie das folgende Beispiel, um die Vertriebs- und Marketing-Datenbankschemata zu erstellen.
CREATE SCHEMA sales; CREATE SCHEMA marketing;Verwenden Sie das folgende Beispiel, um Werte zu erstellen und in Tabellen im Vertriebsschema einzufügen.
CREATE TABLE sales.cat( catid smallint, catgroup varchar(10), catname varchar(10), catdesc varchar(50) ); INSERT INTO sales.cat(SELECT * FROM category); CREATE TABLE sales.dates( dateid smallint, caldate date, day char(3), week smallint, month char(5), qtr char(5), year smallint, holiday boolean ); INSERT INTO sales.dates(SELECT * FROM date); CREATE TABLE sales.events( eventid integer, venueid smallint, catid smallint, dateid smallint, eventname varchar(200), starttime timestamp ); INSERT INTO sales.events(SELECT * FROM event); CREATE TABLE sales.sale( salesid integer, listid integer, sellerid integer, buyerid integer, eventid integer, dateid smallint, qtysold smallint, pricepaid decimal(8,2), commission decimal(8,2), saletime timestamp ); INSERT INTO sales.sale(SELECT * FROM sales);Verwenden Sie das folgende Beispiel, um Werte zu erstellen und in Tabellen im Marketingschema einzufügen.
CREATE TABLE marketing.cat( catid smallint, catgroup varchar(10), catname varchar(10), catdesc varchar(50) ); INSERT INTO marketing.cat(SELECT * FROM category); CREATE TABLE marketing.dates( dateid smallint, caldate date, day char(3), week smallint, month char(5), qtr char(5), year smallint, holiday boolean ); INSERT INTO marketing.dates(SELECT * FROM date); CREATE TABLE marketing.events( eventid integer, venueid smallint, catid smallint, dateid smallint, eventname varchar(200), starttime timestamp ); INSERT INTO marketing.events(SELECT * FROM event); CREATE TABLE marketing.sale( marketingid integer, listid integer, sellerid integer, buyerid integer, eventid integer, dateid smallint, qtysold smallint, pricepaid decimal(8,2), commission decimal(8,2), saletime timestamp ); INSERT INTO marketing.sale(SELECT * FROM marketing);
Schritt 3: Erstellen eines schreibgeschützten Benutzers
In diesem Schritt erstellen Sie eine schreibgeschützte Rolle und einen Salesanalyst-Benutzer für die schreibgeschützte Rolle. Der Salesanalyst benötigt nur Lesezugriff auf die Tabellen im Vertriebsschema, um die ihm zugewiesene Aufgabe zu erfüllen, nämlich die Ereignisse zu finden, die zu den höchsten Provisionen geführt haben.
Verbindung zur Datenbank als dbadmin-Benutzer.
Verwenden Sie das folgende Beispiel, um die Rolle sales_ro zu erstellen.
CREATE ROLE sales_ro;Verwenden Sie das folgende Beispiel, um den Salesanalyst-Benutzer zu erstellen.
CREATE USER salesanalyst PASSWORD 'Test12345';Verwenden Sie das folgende Beispiel, um der Rolle sales_ro die Verwendung und den Auswahlzugriff auf Objekte des Vertriebsschemas zu gewähren.
GRANT USAGE ON SCHEMA sales TO ROLE sales_ro; GRANT SELECT ON ALL TABLES IN SCHEMA sales TO ROLE sales_ro;Verwenden Sie das folgende Beispiel, um dem Salesanalyst-Benutzer die Rolle sales_ro zuzuweisen.
GRANT ROLE sales_ro TO salesanalyst;
Schritt 4: Abfragen der Daten als schreibgeschützter Benutzer
In diesem Schritt fragt der Salesanalyst-Benutzer Daten aus dem Vertriebsschema ab. Anschließend versucht der Salesanalyst-Benutzer, eine Tabelle zu aktualisieren und Tabellen im Marketingschema zu lesen.
Verbindung zur Datenbank als Salesanalyst-Benutzer.
Verwenden Sie das folgende Beispiel, um die 10 Verkäufe mit den höchsten Provisionen zu finden.
SET SEARCH_PATH TO sales; SELECT DISTINCT events.dateid, sale.commission, cat.catname FROM sale, events, dates, cat WHERE events.dateid=dates.dateid AND events.dateid=sale.dateid AND events.catid = cat.catid ORDER BY 2 DESC LIMIT 10;+--------+------------+----------+ | dateid | commission | catname | +--------+------------+----------+ | 1880 | 1893.6 | Pop | | 1880 | 1893.6 | Opera | | 1880 | 1893.6 | Plays | | 1880 | 1893.6 | Musicals | | 1861 | 1500 | Plays | | 2003 | 1500 | Pop | | 1861 | 1500 | Opera | | 2003 | 1500 | Plays | | 1861 | 1500 | Musicals | | 1861 | 1500 | Pop | +--------+------------+----------+Verwenden Sie das folgende Beispiel, um 10 Ereignisse aus der Tabelle „Ereignisse“ im Vertriebsschema auszuwählen.
SELECT * FROM sales.events LIMIT 10;+---------+---------+-------+--------+--------------------+---------------------+ | eventid | venueid | catid | dateid | eventname | starttime | +---------+---------+-------+--------+--------------------+---------------------+ | 4836 | 73 | 9 | 1871 | Soulfest | 2008-02-14 19:30:00 | | 5739 | 41 | 9 | 1871 | Fab Faux | 2008-02-14 19:30:00 | | 627 | 229 | 6 | 1872 | High Society | 2008-02-15 14:00:00 | | 2563 | 246 | 7 | 1872 | Hamlet | 2008-02-15 20:00:00 | | 7703 | 78 | 9 | 1872 | Feist | 2008-02-15 14:00:00 | | 7903 | 90 | 9 | 1872 | Little Big Town | 2008-02-15 19:30:00 | | 7925 | 101 | 9 | 1872 | Spoon | 2008-02-15 19:00:00 | | 8113 | 17 | 9 | 1872 | Santana | 2008-02-15 15:00:00 | | 463 | 303 | 8 | 1873 | Tristan und Isolde | 2008-02-16 19:00:00 | | 613 | 236 | 6 | 1873 | Pal Joey | 2008-02-16 15:00:00 | +---------+---------+-------+--------+--------------------+---------------------+Führen Sie das folgende Beispiel aus, um zu versuchen, den Ereignisnamen für Event-ID 1 zu aktualisieren. Dieses Beispiel führt zu dem Fehler „Zugriff verweigert“, da der Salesanalyst-Benutzer nur über SELECT-Berechtigungen für die Ereignistabelle im Vertriebsschema verfügt. Um die Ereignistabelle zu aktualisieren, müssen Sie der Rolle sales_ro die UPDATE-Berechtigung gewähren. Weitere Informationen über das Erteilen von Berechtigungen zum Aktualisieren einer Tabelle finden Sie unter dem UPDATE-Parameter für GRANT. Weitere Informationen zur Verwendung des UPDATE-Befehls finden Sie unter UPDATE.
UPDATE sales.events SET eventname = 'Comment event' WHERE eventid = 1;ERROR: permission denied for relation eventsVerwenden Sie das folgende Beispiel, um zu versuchen, alle Ereignisse aus der Ereignistabelle im Marketingschema auszuwählen. Dieses Beispiel führt zu dem Fehler „Zugriff verweigert“, da der Salesanalyst-Benutzer nur über SELECT-Berechtigungen für die Ereignistabelle im Vertriebsschema verfügt. Um Daten aus der Ereignistabelle im Marketingschema auszuwählen, müssen Sie der Rolle sales_ro SELECT-Berechtigungen für die Ereignistabelle im Marketingschema gewähren.
SELECT * FROM marketing.events;ERROR: permission denied for schema marketing
Schritt 5: Erstellen eines Benutzers mit Lese- und Schreibberechtigungen
In diesem Schritt erhält der Salesengineer, der für den Aufbau der Extract, Transform, Load (ETL)-Pipeline für die Datenverarbeitung im Vertriebsschema verantwortlich ist, nur Lesezugriff. Später erhält er jedoch Lese- und Schreibzugriff, um seine Aufgaben auszuführen.
Verbindung zur Datenbank als dbadmin-Benutzer.
Verwenden Sie das folgende Beispiel, um die Rolle sales_rw im Vertriebsschema zu erstellen.
CREATE ROLE sales_rw;Verwenden Sie das folgende Beispiel, um den Salesengineer-Benutzer zu erstellen.
CREATE USER salesengineer PASSWORD 'Test12345';Verwenden Sie das folgende Beispiel, um der Rolle sales_rw Nutzungs- und Auswahlberechtigungen für die Objekte des Vertriebsschemas zu gewähren, indem Sie ihr die Rolle sales_ro zuweisen. Weitere Informationen dazu, wie Rollen Berechtigungen in Amazon Redshift übernehmen, finden Sie unter Rollenhierarchie.
GRANT ROLE sales_ro TO ROLE sales_rw;Verwenden Sie das folgende Beispiel, um dem Salesengineer-Benutzer die Rolle sales_rw zuzuweisen.
GRANT ROLE sales_rw TO salesengineer;
Schritt 6: Abfragen der Daten als Benutzer mit der übernommenen schreibgeschützten Rolle
In diesem Schritt versucht der Salesengineer-Benutzer, die Ereignistabelle zu aktualisieren, bevor ihm Leseberechtigungen erteilt werden.
Verbindung zur Datenbank als Salesengineer-Benutzer.
Der Salesengineer-Benutzer kann erfolgreich Daten aus der Ereignistabelle des Vertriebsschemas lesen. Verwenden Sie das folgende Beispiel, um das Ereignis mit der Event-ID 1 aus der Ereignistabelle im Vertriebsschema auszuwählen.
SELECT * FROM sales.events where eventid=1;+---------+---------+-------+--------+-----------------+---------------------+ | eventid | venueid | catid | dateid | eventname | starttime | +---------+---------+-------+--------+-----------------+---------------------+ | 1 | 305 | 8 | 1851 | Gotterdammerung | 2008-01-25 14:30:00 | +---------+---------+-------+--------+-----------------+---------------------+Verwenden Sie das folgende Beispiel, um zu versuchen, alle Ereignisse aus der Ereignistabelle im Marketingschema auszuwählen. Der Salesengineer-Benutzer hat keine Berechtigungen für Tabellen im Marketingschema, daher führt diese Abfrage zu dem Fehler „Zugriff verweigert“. Um Daten aus der Ereignistabelle im Marketingschema auszuwählen, müssen Sie der Rolle sales_rw SELECT-Berechtigungen für die Ereignistabelle im Marketingschema gewähren.
SELECT * FROM marketing.events;ERROR: permission denied for schema marketingFühren Sie das folgende Beispiel aus, um zu versuchen, den Ereignisnamen für Event-ID 1 zu aktualisieren. Dieses Beispiel führt zu dem Fehler „Zugriff verweigert“, da der Salesengineer-Benutzer nur über Auswahlberechtigungen für die Ereignistabelle im Vertriebsschema verfügt. Um die Ereignistabelle zu aktualisieren, müssen Sie der Rolle sales_rw UPDATE-Berechtigungen gewähren.
UPDATE sales.events SET eventname = 'Comment event' WHERE eventid = 1;ERROR: permission denied for relation events
Schritt 7: Erteilen von Aktualisierungs- und Einfügeberechtigungen für die Lese-/Schreib-Rolle
In diesem Schritt erteilen Sie der Rolle sales_rw Aktualisierungs- und Einfügeberechtigungen.
Verbindung zur Datenbank als dbadmin-Benutzer.
Verwenden Sie das folgende Beispiel, um der Rolle sales_rw die Berechtigungen UPDATE, INSERT und DELETE zu gewähren.
GRANT UPDATE, INSERT, ON ALL TABLES IN SCHEMA sales TO role sales_rw;
Schritt 8: Abfragen der Daten als Benutzer mit Lese-/Schreibzugriff ab
In diesem Schritt aktualisiert der Salesengineer die Tabelle erfolgreich, nachdem seiner Rolle Einfüge- und Aktualisierungsberechtigungen erteilt wurden. Anschließend versucht der Salesengineer, die Ereignistabelle zu analysieren und zu leeren, was ihm jedoch nicht gelingt.
Verbindung zur Datenbank als salesengineer-Benutzer.
Führen Sie das folgende Beispiel aus, um zu versuchen, den Ereignisnamen für Event-ID 1 zu aktualisieren.
UPDATE sales.events SET eventname = 'Comment event' WHERE eventid = 1;Um die in der vorherigen Abfrage vorgenommene Änderung anzuzeigen, verwenden Sie das folgende Beispiel, um das Ereignis mit der Event-ID 1 aus der Ereignistabelle im Vertriebsschema auszuwählen.
SELECT * FROM sales.events WHERE eventid=1;+---------+---------+-------+--------+---------------+---------------------+ | eventid | venueid | catid | dateid | eventname | starttime | +---------+---------+-------+--------+---------------+---------------------+ | 1 | 305 | 8 | 1851 | Comment event | 2008-01-25 14:30:00 | +---------+---------+-------+--------+---------------+---------------------+Verwenden Sie das folgende Beispiel, um die Tabelle der aktualisierten Ereignisse im Vertriebsschema zu analysieren. Dieses Beispiel führt zu dem Fehler „Zugriff verweigert“, da der salesengineer-Benutzer nicht über die erforderlichen Berechtigungen verfügt und nicht der Eigentümer der Ereignistabelle im Vertriebsschema ist. Um die Ereignistabelle zu analysieren, müssen Sie der Rolle sales_rw mithilfe des Befehls GRANT die ANALYZE-Berechtigung gewähren. Weitere Informationen zur Verwendung des ANALYZE-Befehls finden Sie unter ANALYZE.
ANALYZE sales.events;ERROR: skipping "events" --- only table or database owner can analyzeVerwenden Sie das folgende Beispiel, um die aktualisierte Ereignistabelle zu leeren. Dieses Beispiel führt zu dem Fehler „Zugriff verweigert“, da der salesengineer-Benutzer nicht über die erforderlichen Berechtigungen verfügt und nicht der Eigentümer der Ereignistabelle im Vertriebsschema ist. Um die Ereignistabelle zu leeren, müssen Sie der Rolle sales_rw mithilfe des Befehls GRANT die VACUUM-Berechtigung gewähren. Weitere Informationen zum VACUUM-Befehl finden Sie unter VACUUM.
VACUUM sales.events;ERROR: skipping "events" --- only table or database owner can vacuum it
Schritt 9: Analysieren und Leeren von Tabellen in einer Datenbank als Administratorbenutzer
In diesem Schritt analysiert der dbadmin-Benutzer alle Tabellen und leert sie. Der Benutzer hat Administratorrechte für diese Datenbank, so dass er diese Befehle ausführen kann.
Verbindung zur Datenbank als dbadmin-Benutzer.
Verwenden Sie das folgende Beispiel, um die Ereignistabelle im Vertriebsschema zu analysieren.
ANALYZE sales.events;Verwenden Sie das folgende Beispiel, um die Ereignistabelle im Vertriebsschema zu leeren.
VACUUM sales.events;Verwenden Sie das folgende Beispiel, um die Ereignistabelle im Marketingschema zu analysieren.
ANALYZE marketing.events;Verwenden Sie das folgende Beispiel, um die Ereignistabelle im Marketingschema zu leeren.
VACUUM marketing.events;
Schritt 10: Kürzen von Tabellen als Benutzer mit Lese-/Schreibzugriff
In diesem Schritt versucht der Salesengineer-Benutzer, die Ereignistabelle im Vertriebsschema zu kürzen, was jedoch nur gelingt, wenn ihm der Benutzer dbadmin die Rechte zum Kürzen erteilt.
Verbindung zur Datenbank als Salesengineer-Benutzer.
Verwenden Sie das folgende Beispiel, um zu versuchen, alle Zeilen aus der Ereignistabelle im Vertriebsschema zu löschen. Dieses Beispiel führt zu einem Fehler, da der Salesengineer-Benutzer nicht über die erforderlichen Berechtigungen verfügt und nicht der Eigentümer der Ereignistabelle im Vertriebsschema ist. Um die Ereignistabelle zu kürzen, müssen Sie der Rolle sales_rw mithilfe des Befehls GRANT die TRUNCATE-Berechtigung gewähren. Weitere Informationen zur Verwendung des TRUNCATE-Befehls finden Sie unter TRUNCATE.
TRUNCATE sales.events;ERROR: must be owner of relation eventsVerbindung zur Datenbank als dbadmin-Benutzer.
Verwenden Sie das folgende Beispiel, um der Rolle sales_rw die Berechtigung zum Kürzen von Tabellen zu gewähren.
GRANT TRUNCATE TABLE TO role sales_rw;Verbinden Sie sich mithilfe von Query Editor v2 als Salesengineer-Benutzer mit der Datenbank.
Verwenden Sie das folgende Beispiel, um die ersten 10 Ereignisse aus der Ereignistabelle im Vertriebsschema zu lesen.
SELECT * FROM sales.events ORDER BY eventid LIMIT 10;+---------+---------+-------+--------+-----------------------------+---------------------+ | eventid | venueid | catid | dateid | eventname | starttime | +---------+---------+-------+--------+-----------------------------+---------------------+ | 1 | 305 | 8 | 1851 | Comment event | 2008-01-25 14:30:00 | | 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00 | | 3 | 302 | 8 | 1935 | Salome | 2008-04-19 14:30:00 | | 4 | 309 | 8 | 2090 | La Cenerentola (Cinderella) | 2008-09-21 14:30:00 | | 5 | 302 | 8 | 1982 | Il Trovatore | 2008-06-05 19:00:00 | | 6 | 308 | 8 | 2109 | L Elisir d Amore | 2008-10-10 19:30:00 | | 7 | 309 | 8 | 1891 | Doctor Atomic | 2008-03-06 14:00:00 | | 8 | 302 | 8 | 1832 | The Magic Flute | 2008-01-06 20:00:00 | | 9 | 308 | 8 | 2087 | The Fly | 2008-09-18 19:30:00 | | 10 | 305 | 8 | 2079 | Rigoletto | 2008-09-10 15:00:00 | +---------+---------+-------+--------+-----------------------------+---------------------+Verwenden Sie das folgende Beispiel, um die Tabelle mit den Ereignissen im Vertriebsschema zu kürzen.
TRUNCATE sales.events;Verwenden Sie das folgende Beispiel, um die Daten aus der Tabelle der aktualisierten Ereignisse im Vertriebsschema zu lesen.
SELECT * FROM sales.events ORDER BY eventid LIMIT 10;+---------+---------+-------+--------+-----------------------------+---------------------+ | eventid | venueid | catid | dateid | eventname | starttime | +---------+---------+-------+--------+-----------------------------+---------------------+
Erstellen Sie schreibgeschützte und schreib- und leseberechtigte Rollen für das Marketingschema (optional)
In diesem Schritt erstellen Sie schreibgeschützte und schreib- und leseberechtigte Rollen für das Marketingschema.
Verbindung zur Datenbank als dbadmin-Benutzer.
Verwenden Sie das folgende Beispiel, um Rollen mit Lese-/Schreibzugriff für das Marketingschema zu erstellen.
CREATE ROLE marketing_ro; CREATE ROLE marketing_rw; GRANT USAGE ON SCHEMA marketing TO ROLE marketing_ro, ROLE marketing_rw; GRANT SELECT ON ALL TABLES IN SCHEMA marketing TO ROLE marketing_ro; GRANT ROLE marketing_ro TO ROLE marketing_rw; GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA marketing TO ROLE marketing_rw; CREATE USER marketinganalyst PASSWORD 'Test12345'; CREATE USER marketingengineer PASSWORD 'Test12345'; GRANT ROLE marketing_ro TO marketinganalyst; GRANT ROLE marketing_rw TO marketingengineer;
Systemfunktionen für RBAC (optional)
Amazon Redshift bietet zwei Funktionen zur Bereitstellung von Systeminformationen zur Benutzermitgliedschaft und Rollenmitgliedschaft in zusätzlichen Gruppen oder Rollen: role_is_member_of und user_is_member_of. Diese Funktionen stehen Superusern und regulären Benutzern zur Verfügung. Superuser können die Mitgliedschaft aller Rollen überprüfen. Reguläre Benutzer können die Mitgliedschaft nur für Rollen überprüfen, für die ihnen Zugriff gewährt wurde.
So verwenden Sie die Funktion role_is_member_of:
Verbindung zur Datenbank als Salesengineer-Benutzer.
Verwenden Sie das folgende Beispiel, um zu überprüfen, ob die Rolle sales_rw ein Mitglied der Rolle sales_ro ist.
SELECT role_is_member_of('sales_rw', 'sales_ro');+-------------------+ | role_is_member_of | +-------------------+ | true | +-------------------+Verwenden Sie das folgende Beispiel, um zu überprüfen, ob die Rolle sales_ro ein Mitglied der Rolle sales_rw ist.
SELECT role_is_member_of('sales_ro', 'sales_rw');+-------------------+ | role_is_member_of | +-------------------+ | false | +-------------------+
So verwenden Sie die Funktion user_is_member_of:
Verbindung zur Datenbank als Salesengineer-Benutzer.
Im folgenden Beispiel wird versucht, die Mitgliedschaft des Salesanalyst-Benutzers Salesanalyst zu überprüfen. Diese Abfrage führt zu einem Fehler, da Salesengineer keinen Zugriff auf Salesanalyst hat. Um diesen Befehl erfolgreich auszuführen, stellen Sie als Salesanalyst-Benutzer eine Verbindung mit der Datenbank her und verwenden Sie das Beispiel.
SELECT user_is_member_of('salesanalyst', 'sales_ro');ERRORVerbinden Sie sich als Superuser mit der Datenbank.
Verwenden Sie das folgende Beispiel, um die Mitgliedschaft des Salesanalyst-Benutzers bei Anmeldung als Superuser zu überprüfen.
SELECT user_is_member_of('salesanalyst', 'sales_ro');+-------------------+ | user_is_member_of | +-------------------+ | true | +-------------------+Verbindung zur Datenbank als dbadmin-Benutzer.
Verwenden Sie das folgende Beispiel, um die Mitgliedschaft des Salesengineer-Benutzers zu überprüfen.
SELECT user_is_member_of('salesengineer', 'sales_ro');+-------------------+ | user_is_member_of | +-------------------+ | true | +-------------------+SELECT user_is_member_of('salesengineer', 'marketing_ro');+-------------------+ | user_is_member_of | +-------------------+ | false | +-------------------+SELECT user_is_member_of('marketinganalyst', 'sales_ro');+-------------------+ | user_is_member_of | +-------------------+ | false | +-------------------+
Systemansichten für RBAC (optional)
Verwenden Sie die Systemansichten für Amazon Redshift, um die Rollen, die Rollenzuweisung zu Benutzern, die Rollenhierarchie und die Rechte für Datenbankobjekte über Rollen anzuzeigen. Diese Ansichten sind für Superuser und normale Benutzer verfügbar. Superuser können alle Rollendetails überprüfen. Reguläre Benutzer können nur die Details von Rollen überprüfen, für die ihnen Zugriff gewährt wurde.
Verwenden Sie das folgende Beispiel, um eine Liste der Benutzer anzuzeigen, denen explizit Rollen in dem Cluster gewährt werden.
SELECT * FROM svv_user_grants;Verwenden Sie das folgende Beispiel, um eine Liste der Rollen anzuzeigen, denen explizit Rollen in dem Cluster gewährt werden.
SELECT * FROM svv_role_grants;
Eine vollständige Liste der Systemansichten finden Sie unter SVV-Metadatenansichten.
Verwenden der Sicherheit auf Zeilenebene mit RBAC (optional)
Mit Sicherheit auf Zeilenebene (RLS) in Amazon Redshift können Sie eine granulare Zugriffssteuerung für Ihre sensiblen Daten vornehmen. Weitere Informationen zu RLS finden Sie unter Sicherheit auf Zeilenebene.
In diesem Abschnitt erstellen Sie eine RLS-Richtlinie, die dem salesengineer-Benutzer die Berechtigung gibt, nur Zeilen in der cat-Tabelle anzuzeigen, die den catdesc-Wert „Major League Baseball“ haben. Anschließend fragen Sie die Datenbank als salesengineer-Benutzer ab.
Verbindung zur Datenbank als
salesengineer-Benutzer.Verwenden Sie das folgende Beispiel, um die ersten 5 Einträge der
cat-Tabelle anzuzeigen.SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5;+-------+----------+---------+---------------------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+---------------------------------+ | 1 | Sports | MLB | Major League Baseball | | 2 | Sports | NHL | National Hockey League | | 3 | Sports | NFL | National Football League | | 4 | Sports | NBA | National Basketball Association | | 5 | Sports | MLS | Major League Soccer | +-------+----------+---------+---------------------------------+Verbindung zur Datenbank als
dbadmin-Benutzer.Verwenden Sie das folgende Beispiel, um eine RLS-Richtlinie für die
catdesc-Spalte in dercat-Tabelle zu erstellen.CREATE RLS POLICY policy_mlb_engineer WITH (catdesc VARCHAR(50)) USING (catdesc = 'Major League Baseball');Verwenden Sie das folgende Beispiel, um die RLS-Richtlinie an die
sales_rw-Rolle anzufügen.ATTACH RLS POLICY policy_mlb_engineer ON sales.cat TO ROLE sales_rw;Verwenden Sie das folgende Beispiel, um die Tabelle so zu ändern, dass RLS aktiviert wird.
ALTER TABLE sales.cat ROW LEVEL SECURITY ON;Verbindung zur Datenbank als
salesengineer-Benutzer.Verwenden Sie das folgende Beispiel, um zu versuchen, die ersten 5 Einträge der
cat-Tabelle anzuzeigen. Beachten Sie, dass nur Einträge angezeigt werden, wenn diecatdesc-SpalteMajor League Baseballist.SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5;+-------+----------+---------+-----------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+-----------------------+ | 1 | Sports | MLB | Major League Baseball | +-------+----------+---------+-----------------------+Verbindung zur Datenbank als
salesanalyst-Benutzer.Verwenden Sie das folgende Beispiel, um zu versuchen, die ersten 5 Einträge der
cat-Tabelle anzuzeigen. Beachten Sie, dass keine Einträge angezeigt werden, da die Standardrichtlinie „Alle verweigern“ angewendet wird.SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5;+-------+----------+---------+-----------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+-----------------------+Verbindung zur Datenbank als
dbadmin-Benutzer.Verwenden Sie das folgende Beispiel, um der
sales_ro-Rolle die Berechtigung IGNORE RLS zu erteilen. Dadurch erhält dersalesanalyst-Benutzer die Berechtigung, RLS-Richtlinien zu ignorieren, da er Mitglied dersales_ro-Rolle ist.GRANT IGNORE RLS TO ROLE sales_ro;Verbindung zur Datenbank als
salesanalyst-Benutzer.Verwenden Sie das folgende Beispiel, um die ersten 5 Einträge der
cat-Tabelle anzuzeigen.SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5;+-------+----------+---------+---------------------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+---------------------------------+ | 1 | Sports | MLB | Major League Baseball | | 2 | Sports | NHL | National Hockey League | | 3 | Sports | NFL | National Football League | | 4 | Sports | NBA | National Basketball Association | | 5 | Sports | MLS | Major League Soccer | +-------+----------+---------+---------------------------------+Verbindung zur Datenbank als
dbadmin-Benutzer.Verwenden Sie das folgende Beispiel, um der
sales_ro-Rolle die Berechtigung IGNORE RLS zu entziehen.REVOKE IGNORE RLS FROM ROLE sales_ro;Verbindung zur Datenbank als
salesanalyst-Benutzer.Verwenden Sie das folgende Beispiel, um zu versuchen, die ersten 5 Einträge der
cat-Tabelle anzuzeigen. Beachten Sie, dass keine Einträge angezeigt werden, da die Standardrichtlinie „Alle verweigern“ angewendet wird.SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5;+-------+----------+---------+-----------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+-----------------------+Verbindung zur Datenbank als
dbadmin-Benutzer.Verwenden Sie das folgende Beispiel, um die RLS-Richtlinie von der
cat-Tabelle zu trennen.DETACH RLS POLICY policy_mlb_engineer ON cat FROM ROLE sales_rw;Verbindung zur Datenbank als
salesanalyst-Benutzer.Verwenden Sie das folgende Beispiel, um zu versuchen, die ersten 5 Einträge der
cat-Tabelle anzuzeigen. Beachten Sie, dass keine Einträge angezeigt werden, da die Standardrichtlinie „Alle verweigern“ angewendet wird.SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5;+-------+----------+---------+---------------------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+---------------------------------+ | 1 | Sports | MLB | Major League Baseball | | 2 | Sports | NHL | National Hockey League | | 3 | Sports | NFL | National Football League | | 4 | Sports | NBA | National Basketball Association | | 5 | Sports | MLS | Major League Soccer | +-------+----------+---------+---------------------------------+Verbindung zur Datenbank als
dbadmin-Benutzer.Verwenden Sie das folgende Beispiel, um die RLS-Richtlinie zu verwerfen.
DROP RLS POLICY policy_mlb_engineer;Verwenden Sie das folgende Beispiel, um RLS zu entfernen.
ALTER TABLE cat ROW LEVEL SECURITY OFF;
Verwandte Themen
Weitere Informationen zu RBAC finden Sie in der folgenden Dokumentation: