Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
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 Zugriffskontrolle (RBAC), um Berechtigungen in einer von Ihnen erstellten Datenbank zu verwalten. Anschließend stellen Sie eine Verbindung zur 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 und. sales_ro
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.
Darüber hinaus können Sie Rollen erstellen, um den Zugriff auf bestimmte Befehle einzuschränken, und die Rolle entweder Superusern oder Benutzern zuweisen.
Aufgaben
-
Schritt 4: Fragen Sie die Daten als schreibgeschützter Benutzer ab
-
Schritt 5: Erstellen Sie einen Benutzer mit Lese-/Schreibzugriff
-
Schritt 6: Fragen Sie die Daten als Benutzer mit der geerbten Schreibschutzrolle ab
-
Schritt 7: Erteilen Sie der Lese- und Schreibrolle Aktualisierungs- und Einfügeberechtigungen
-
Schritt 8: Fragen Sie die Daten als Benutzer mit Lese-/Schreibzugriff ab
-
Schritt 9: Analysieren und Vakuumieren von Tabellen in einer Datenbank als Administratorbenutzer
-
Schritt 10: Kürzen Sie Tabellen als Benutzer mit Lese-/Schreibzugriff
-
Verwenden Sie Sicherheit auf Zeilenebene mit RBAC (optional)
Voraussetzungen
Erstellen Sie einen Amazon Redshift Redshift-Cluster oder eine serverlose Arbeitsgruppe, die mit der TICKIT-Beispieldatenbank geladen ist. Informationen zum Erstellen einer serverlosen Arbeitsgruppe finden Sie unter Erste Schritte mit Redshift Serverless Data Warehouses. Informationen zum Erstellen eines Clusters finden Sie unter Erstellen eines Amazon Redshift Redshift-Beispielclusters. Weitere Informationen zur TICKIT-Beispieldatenbank finden Sie unter Beispieldatenbank.
Haben Sie Zugriff auf einen Benutzer mit Superuser- oder Rollenadministratorberechtigungen. Nur Superuser oder Rollenadministratoren können Rollen gewähren oder entziehen. 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 Sie einen Administratorbenutzer
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.
Führen Sie alle Abfragen im Amazon Redshift Redshift-Abfrage-Editor v2 aus.
Verwenden Sie das folgende Beispiel, um die Administratorrolle db_admin zu erstellen.
CREATE ROLE db_admin;
Verwenden Sie das folgende Beispiel, um einen Datenbankbenutzer mit dem Namen dbadmin zu erstellen.
CREATE USER dbadmin PASSWORD 'Test12345';
Verwenden Sie das folgende Beispiel, um der Rolle db_admin die systemdefinierte Rolle mit dem Namen sys:dba zuzuweisen. Wenn dem Benutzer dbadmin die Rolle sys:dba zugewiesen wird, kann er Schemas und Tabellen erstellen. Weitere Informationen finden Sie unter Systemdefinierte Amazon-Redshift-Rollen.
Schritt 2: Schemas einrichten
In diesem Schritt stellen Sie als Datenbankadministrator eine Verbindung zu Ihrer Datenbank her. Anschließend erstellen Sie zwei Schemas und fügen ihnen Daten hinzu.
Stellen Sie mit dem Abfrage-Editor v2 als dbadmin-Benutzer eine Verbindung zur Dev-Datenbank her. Weitere Hinweise zum Herstellen einer Verbindung zu einer Datenbank finden Sie unter Arbeiten mit dem Abfrage-Editor v2.
Verwenden Sie das folgende Beispiel, um die Datenbankschemas für Vertrieb und Marketing 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 Sie einen schreibgeschützten Benutzer
In diesem Schritt erstellen Sie eine schreibgeschützte Rolle und einen Salesanalyst-Benutzer für die schreibgeschützte Rolle. Der Vertriebsanalyst 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.
Stellen Sie als dbadmin-Benutzer eine Connect zur Datenbank her.
Verwenden Sie das folgende Beispiel, um die Rolle sales_ro zu erstellen.
CREATE ROLE sales_ro;
Verwenden Sie das folgende Beispiel, um den Benutzer salesanalyst 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 Benutzer salesanalyst die Rolle sales_ro zuzuweisen.
GRANT ROLE sales_ro TO salesanalyst;
Schritt 4: Fragen Sie die Daten als schreibgeschützter Benutzer ab
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.
Stellen Sie als salesanalyst-Benutzer eine Connect mit der Datenbank her.
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 Ereignistabelle 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 Eventnamen für Event-ID 1 zu aktualisieren. Dieses Beispiel führt zu dem Fehler „Zugriff verweigert“, da der Benutzer salesanalyst 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 Berechtigungen UPDATE gewähren. Weitere Informationen zum Erteilen von Berechtigungen zum Aktualisieren einer Tabelle finden Sie im UPDATE-Parameter für. GRANT Weitere Hinweise zum Befehl UPDATE finden Sie unterUPDATE.
UPDATE sales.events SET eventname = 'Comment event' WHERE eventid = 1;
ERROR: permission denied for relation events
Verwenden 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 Benutzer salesanalyst 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 Sie einen Benutzer mit Lese-/Schreibzugriff
In diesem Schritt erhält der Vertriebsingenieur, der für den Aufbau der ETL-Pipeline (Extrahieren, Transformieren und Laden) für die Datenverarbeitung im Vertriebsschema verantwortlich ist, nur Lesezugriff. Später erhält er jedoch Lese- und Schreibzugriff, um seine Aufgaben auszuführen.
Stellen Sie als dbadmin-Benutzer eine Connect zur Datenbank her.
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 Benutzer salesengineer zu erstellen.
CREATE USER salesengineer PASSWORD 'Test12345';
Verwenden Sie das folgende Beispiel, um der Rolle sales_rw die Verwendung zu gewähren und Zugriff auf Objekte des Vertriebsschemas auszuwählen, indem Sie ihr die Rolle sales_ro zuweisen. Weitere Informationen darüber, wie Rollen Berechtigungen in Amazon Redshift erben, finden Sie unter. Rollenhierarchie
GRANT ROLE sales_ro TO ROLE sales_rw;
Verwenden Sie das folgende Beispiel, um dem Benutzer salesengineer die Rolle sales_rw zuzuweisen.
GRANT ROLE sales_rw TO salesengineer;
Schritt 6: Fragen Sie die Daten als Benutzer mit der geerbten Schreibschutzrolle ab
In diesem Schritt versucht der SalesEngineer-Benutzer, die Ereignistabelle zu aktualisieren, bevor ihm Leseberechtigungen erteilt werden.
Stellen Sie als salesengineer-Benutzer eine Connect mit der Datenbank her.
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 Marketing-Schema, 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 marketing
Führen Sie das folgende Beispiel aus, um zu versuchen, den Eventnamen für Event-ID 1 zu aktualisieren. Dieses Beispiel führt zu dem Fehler „Zugriff verweigert“, da der Benutzer salesengineer nur über Auswahlberechtigungen für die Ereignistabelle im Vertriebsschema verfügt. Um die Ereignistabelle zu aktualisieren, müssen Sie der Rolle sales_rw die Berechtigungen UPDATE gewähren.
UPDATE sales.events SET eventname = 'Comment event' WHERE eventid = 1;
ERROR: permission denied for relation events
Schritt 7: Erteilen Sie der Lese- und Schreibrolle Aktualisierungs- und Einfügeberechtigungen
In diesem Schritt erteilen Sie der Rolle sales_rw Aktualisierungs- und Einfügeberechtigungen.
Stellen Sie als dbadmin-Benutzer eine Connect zur Datenbank her.
Verwenden Sie das folgende Beispiel, um der Rolle sales_rw die Berechtigungen UPDATE, INSERT und DELETE zu erteilen.
GRANT UPDATE, INSERT, ON ALL TABLES IN SCHEMA sales TO role sales_rw;
Schritt 8: Fragen Sie die Daten als Benutzer mit Lese-/Schreibzugriff ab
In diesem Schritt aktualisiert der Vertriebsingenieur die Tabelle erfolgreich, nachdem seiner Rolle Einfüge- und Aktualisierungsberechtigungen erteilt wurden. Als Nächstes versucht der Vertriebsingenieur, die Ereignistabelle zu analysieren und zu leeren, was ihm jedoch nicht gelingt.
Stellen Sie als salesengineer-Benutzer eine Connect mit der Datenbank her.
Führen Sie das folgende Beispiel aus, um den Eventnamen 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 Ereignis-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 aktualisierte Ereignistabelle im Vertriebsschema zu analysieren. Dieses Beispiel führt zu dem Fehler „Zugriff verweigert“, da der Benutzer salesengineer nicht über die erforderlichen Berechtigungen verfügt und nicht der Besitzer der Ereignistabelle im Vertriebsschema ist. Um die Ereignistabelle zu analysieren, müssen Sie der Rolle sales_rw mithilfe des Befehls GRANT Berechtigungen für ANALYZE erteilen. Weitere Hinweise zum Befehl ANALYZE finden Sie unter. ANALYZE
ANALYZE sales.events;
ERROR: skipping "events" --- only table or database owner can analyze
Verwenden Sie das folgende Beispiel, um die aktualisierte Ereignistabelle zu leeren. Dieses Beispiel führt zu dem Fehler „Zugriff verweigert“, da der Benutzer salesengineer nicht über die erforderlichen Berechtigungen verfügt und nicht der Besitzer der Ereignistabelle im Vertriebsschema ist. Um die Ereignistabelle zu leeren, müssen Sie VACUUM mithilfe des Befehls GRANT die Rollenberechtigungen sales_rw gewähren. Weitere Hinweise zum Befehl VACUUM finden Sie unter. VACUUM
VACUUM sales.events;
ERROR: skipping "events" --- only table or database owner can vacuum it
Schritt 9: Analysieren und Vakuumieren von Tabellen in einer Datenbank als Administratorbenutzer
In diesem Schritt analysiert der dbadmin-Benutzer alle Tabellen und entfernt sie. Der Benutzer hat Administratorrechte für diese Datenbank, sodass er diese Befehle ausführen kann.
Stellen Sie als dbadmin-Benutzer eine Connect zur Datenbank her.
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 Sie 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.
Stellen Sie als salesengineer-Benutzer eine Connect mit der Datenbank her.
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 Benutzer salesengineer nicht über die erforderlichen Berechtigungen verfügt und nicht der Besitzer der Ereignistabelle im Vertriebsschema ist. Um die Ereignistabelle zu kürzen, müssen Sie der Rolle sales_rw mithilfe des Befehls GRANT TRUNCATE Berechtigungen erteilen. Weitere Informationen zur Verwendung des TRUNCATE-Befehls finden Sie unter TRUNCATE.
TRUNCATE sales.events;
ERROR: must be owner of relation events
Stellen Sie als dbadmin-Benutzer eine Connect zur Datenbank her.
Verwenden Sie das folgende Beispiel, um der Rolle sales_rw die Rechte zum Kürzen von Tabellen zu gewähren.
GRANT TRUNCATE TABLE TO role sales_rw;
Stellen Sie mit dem Abfrage-Editor v2 als salesengineer-Benutzer eine Verbindung zur Datenbank her.
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 Ereignistabelle im Vertriebsschema zu kürzen.
TRUNCATE sales.events;
Verwenden Sie das folgende Beispiel, um die Daten aus der aktualisierten Ereignistabelle im Vertriebsschema zu lesen.
SELECT * FROM sales.events ORDER BY eventid LIMIT 10;
+---------+---------+-------+--------+-----------------------------+---------------------+ | eventid | venueid | catid | dateid | eventname | starttime | +---------+---------+-------+--------+-----------------------------+---------------------+
Erstellen Sie Rollen mit Schreibschutz und Lese-/Schreibzugriff für das Marketingschema (optional)
In diesem Schritt erstellen Sie Rollen mit Schreibschutz und Lese-/Schreibzugriff für das Marketingschema.
Stellen Sie als dbadmin-Benutzer eine Connect zur Datenbank her.
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 alle Rollenmitgliedschaften überprüfen. Reguläre Benutzer können nur die Mitgliedschaft von Rollen überprüfen, für die ihnen Zugriff gewährt wurde.
Um die Funktion role_is_member_of zu verwenden
Stellen Sie als salesengineer-Benutzer eine Connect mit der Datenbank her.
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 | +-------------------+
Um die Funktion user_is_member_of zu verwenden
Stellen Sie als salesengineer-Benutzer eine Connect mit der Datenbank her.
Im folgenden Beispiel wird versucht, die Benutzermitgliedschaft des 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');
ERROR
Stellen Sie als Superuser eine Connect zur Datenbank her.
Verwenden Sie das folgende Beispiel, um die Mitgliedschaft des Benutzers salesanalyst zu überprüfen, wenn er als Superuser angemeldet ist.
SELECT user_is_member_of('salesanalyst', 'sales_ro');
+-------------------+ | user_is_member_of | +-------------------+ | true | +-------------------+
Stellen Sie als dbadmin-Benutzer eine Connect zur Datenbank her.
Verwenden Sie das folgende Beispiel, um die Mitgliedschaft des Benutzers salesengineer 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 reguläre 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 im Cluster gewährt wurden.
SELECT * FROM svv_user_grants;
Verwenden Sie das folgende Beispiel, um eine Liste der Rollen anzuzeigen, denen im Cluster explizit Rollen zugewiesen wurden.
SELECT * FROM svv_role_grants;
Die vollständige Liste der Systemansichten finden Sie unterSVV-Metadatenansichten.
Verwenden Sie Sicherheit auf Zeilenebene mit RBAC (optional)
Verwenden Sie Sicherheit auf Zeilenebene (RLS), um eine detaillierte Zugriffskontrolle für Ihre vertraulichen Daten zu erhalten. 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.
Stellen Sie als
salesengineer
Benutzer eine Connect zur Datenbank her.Verwenden Sie das folgende Beispiel, um die ersten 5 Einträge in 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 | +-------+----------+---------+---------------------------------+
Stellen Sie als
dbadmin
Benutzer eine Connect zur Datenbank her.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 anzuhängen.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;
Stellen Sie als
salesengineer
Benutzer eine Connect zur Datenbank her.Verwenden Sie das folgende Beispiel, um zu versuchen, die ersten 5 Einträge in der
cat
Tabelle anzuzeigen. Beachten Sie, dass nur Einträge angezeigt werden, wenn diecatdesc
Spalte es istMajor League Baseball
.SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5;
+-------+----------+---------+-----------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+-----------------------+ | 1 | Sports | MLB | Major League Baseball | +-------+----------+---------+-----------------------+
Stellen Sie als
salesanalyst
Benutzer eine Connect zur Datenbank her.Verwenden Sie das folgende Beispiel, um zu versuchen, die ersten 5 Einträge in 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 | +-------+----------+---------+-----------------------+
Stellen Sie als
dbadmin
Benutzer eine Connect zur Datenbank her.Verwenden Sie das folgende Beispiel, um der
sales_ro
Rolle die RLS-Berechtigung IGNORE 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;
Stellen Sie als
salesanalyst
Benutzer eine Connect zur Datenbank her.Verwenden Sie das folgende Beispiel, um die ersten 5 Einträge in 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 | +-------+----------+---------+---------------------------------+
Stellen Sie als
dbadmin
Benutzer eine Connect zur Datenbank her.Verwenden Sie das folgende Beispiel, um der
sales_ro
Rolle die IGNORE-RLS-Berechtigung zu entziehen.REVOKE IGNORE RLS FROM ROLE sales_ro;
Stellen Sie als
salesanalyst
Benutzer eine Connect zur Datenbank her.Verwenden Sie das folgende Beispiel, um zu versuchen, die ersten 5 Einträge in 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 | +-------+----------+---------+-----------------------+
Stellen Sie als
dbadmin
Benutzer eine Connect zur Datenbank her.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;
Stellen Sie als
salesanalyst
Benutzer eine Connect zur Datenbank her.Verwenden Sie das folgende Beispiel, um zu versuchen, die ersten 5 Einträge in 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 | +-------+----------+---------+---------------------------------+
Stellen Sie als
dbadmin
Benutzer eine Connect zur Datenbank her.Verwenden Sie das folgende Beispiel, um die RLS-Richtlinie zu löschen.
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: