Tutorial: creazione di ruoli ed esecuzione di query con RBAC - Amazon Redshift

Amazon Redshift non supporterà più la creazione di nuove UDF Python a partire dal 1º novembre 2025. Se desideri utilizzare le UDF Python, creale prima di tale data. Le UDF Python esistenti continueranno a funzionare normalmente. Per ulteriori informazioni, consulta il post del blog.

Tutorial: creazione di ruoli ed esecuzione di query con RBAC

Con RBAC, puoi creare ruoli autorizzati a eseguire comandi con cui richiedere autorizzazioni di utente con privilegi avanzati. Gli utenti possono eseguire questi comandi purché sia loro assegnato un ruolo che includa tali autorizzazioni.

In questo tutorial utilizzi il controllo degli accessi basato sul ruolo (RBAC) per gestire le autorizzazioni in un database creato. Quindi ti connetti al database ed esegui query sul database da due ruoli diversi per testare la funzionalità di RBAC.

I due ruoli creati e utilizzati per eseguire query sul database sono sales_ro e sales_rw. Crei il ruolo sales_ro ed esegui query sui dati come utente con il ruolo sales_ro. L’utente sales_ro può utilizzare solo il comando SELECT ma non il comando UPDATE. Quindi crei il ruolo sales_rw ed esegui query sui dati come utente con il ruolo sales_rw. L’utente sales_rw può utilizzare il comando SELECT e il comando UPDATE.

Inoltre puoi creare ruoli per limitare l’accesso a determinati comandi e assegnarli a utenti con privilegi avanzati o utenti normali.

Attività

Prerequisiti

Fase 1: creare un utente amministratore

Per configurare questo tutorial, crei un ruolo di Database Administrator e lo colleghi a un utente amministratore del database in questa fase. Devi creare il Database Administrator come utente con privilegi avanzati o amministratore del ruolo.

Esegui tutte le query in Amazon Redshift Query Editor V2.

  1. Per creare il ruolo di amministratore db_admin, utilizza l’esempio seguente.

    CREATE ROLE db_admin;
  2. Per creare un utente del database denominato dbadmin, utilizza l’esempio seguente.

    CREATE USER dbadmin PASSWORD 'Test12345';
  3. Per concedere il ruolo definito dal sistema denominato sys:dba al ruolo db_admin, utilizza l’esempio seguente. Quando gli viene concesso il ruolo sys:dba, l’utente dbadmin può creare schemi e tabelle. Per ulteriori informazioni, consulta Ruoli definiti dal sistema di Amazon Redshift.

Fase 2: configurare gli schemi

In questa fase ti connetti al database come Database Administrator. Quindi crei due schemi e a essi aggiungi i dati.

  1. Connettiti al database di sviluppo come utente dbadmin utilizzando Query Editor V2. Per ulteriori informazioni sulla connessione a un database, consulta Utilizzo di Query Editor V2.

  2. Per creare gli schemi del database di vendita e marketing, utilizza l’esempio seguente.

    CREATE SCHEMA sales; CREATE SCHEMA marketing;
  3. Per creare e inserire i valori nelle tabelle dello schema di vendita, utilizza l’esempio seguente.

    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);
  4. Per creare e inserire i valori nelle tabelle dello schema di marketing, utilizza l’esempio seguente.

    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);

Fase 3: creare un utente di sola lettura

In questa fase crei un ruolo di sola lettura e un utente salesanalyst per il ruolo di sola lettura. L’analista delle vendite necessita solo dell’accesso in sola lettura alle tabelle dello schema di vendita per svolgere il compito assegnato di trovare gli eventi che hanno portato alle commissioni più elevate.

  1. Connettiti al database come utente dbadmin.

  2. Per creare il ruolo sales_ro, utilizza l’esempio seguente.

    CREATE ROLE sales_ro;
  3. Per creare l’utente salesanalyst, utilizza l’esempio seguente.

    CREATE USER salesanalyst PASSWORD 'Test12345';
  4. Per concedere l’utilizzo del ruolo sales_ro e selezionare l’accesso agli oggetti dello schema di vendita, utilizza l’esempio seguente.

    GRANT USAGE ON SCHEMA sales TO ROLE sales_ro; GRANT SELECT ON ALL TABLES IN SCHEMA sales TO ROLE sales_ro;
  5. Per concedere all’utente salesanalyst il ruolo sales_ro, utilizza l’esempio seguente.

    GRANT ROLE sales_ro TO salesanalyst;

Fase 4: eseguire le query sui dati come utente di sola lettura

In questa fase, l’utente salesanalyst esegue le query sui dati dallo schema di vendita. Quindi l’utente salesanalyst tenta di aggiornare una tabella e di leggere le tabelle nello schema di marketing.

  1. Connettiti al database come utente salesanalyst.

  2. Per trovare le 10 vendite con le commissioni più alte, utilizza l’esempio seguente.

    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 | +--------+------------+----------+
  3. Per selezionare 10 eventi dalla tabella degli eventi nello schema di vendita, utilizza l’esempio seguente.

    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 | +---------+---------+-------+--------+--------------------+---------------------+
  4. Per tentare di aggiornare il nome dell’evento per eventid 1, utilizza l’esempio seguente. Questo esempio genererà un errore di autorizzazione negata perché l’utente salesanalyst dispone solo delle autorizzazioni SELECT per la tabella degli eventi dello schema di vendita. Per aggiornare la tabella degli eventi, devi concedere al ruolo sales_ro le autorizzazioni UPDATE. Per ulteriori informazioni su come concedere le autorizzazioni per aggiornare una tabella, consulta il parametro UPDATE per GRANT. Per ulteriori informazioni sul comando COPY, consulta UPDATE.

    UPDATE sales.events SET eventname = 'Comment event' WHERE eventid = 1; ERROR: permission denied for relation events
  5. Per tentare di selezionare tutto dalla tabella degli eventi nello schema di marketing, utilizza l’esempio seguente. Questo esempio genererà un errore di autorizzazione negata perché l’utente salesanalyst dispone solo delle autorizzazioni SELECT per la tabella degli eventi nello schema di vendita. Per selezionare i dati dalla tabella degli eventi nello schema di marketing, devi concedere al ruolo sales_ro le autorizzazioni SELECT per la tabella degli eventi nello schema di marketing.

    SELECT * FROM marketing.events; ERROR: permission denied for schema marketing

Fase 5: creare un utente di lettura/scrittura

In questa fase, il tecnico commerciale responsabile della creazione della pipeline di estrazione, trasformazione e caricamento (ETL) per l’elaborazione dei dati nello schema di vendita riceverà l’accesso in sola lettura, ma in seguito avrà l’accesso in lettura e scrittura per svolgere le proprie attività.

  1. Connettiti al database come utente dbadmin.

  2. Per creare il ruolo sales_rw nello schema di vendita, utilizza l’esempio seguente.

    CREATE ROLE sales_rw;
  3. Per creare l’utente salesengineer, utilizza l’esempio seguente.

    CREATE USER salesengineer PASSWORD 'Test12345';
  4. Per concedere l’utilizzo del ruolo sales_rw e selezionare l’accesso agli oggetti dello schema di vendita assegnandogli il ruolo sales_ro, utilizza l’esempio seguente. Per ulteriori informazioni su come i ruoli ereditano le autorizzazioni in Amazon Redshift, consulta Gerarchia dei ruoli.

    GRANT ROLE sales_ro TO ROLE sales_rw;
  5. Per assegnare il ruolo sales_rw all’utente salesengineer, utilizza l’esempio seguente.

    GRANT ROLE sales_rw TO salesengineer;

Fase 6: eseguire query sui dati come utente con il ruolo di sola lettura ereditato

In questa fase, l’utente salesengineer tenta di aggiornare la tabella degli eventi prima di ottenere le autorizzazioni di lettura.

  1. Connettiti al database come utente salesengineer.

  2. L’utente salesengineer può leggere correttamente i dati dalla tabella degli eventi dello schema di vendita. Per selezionare l’evento con eventid 1 dalla tabella degli eventi nello schema di vendita, utilizza l’esempio seguente.

    SELECT * FROM sales.events where eventid=1; +---------+---------+-------+--------+-----------------+---------------------+ | eventid | venueid | catid | dateid | eventname | starttime | +---------+---------+-------+--------+-----------------+---------------------+ | 1 | 305 | 8 | 1851 | Gotterdammerung | 2008-01-25 14:30:00 | +---------+---------+-------+--------+-----------------+---------------------+
  3. Per tentare di selezionare tutto dalla tabella degli eventi nello schema di marketing, utilizza l’esempio seguente. L’utente salesengineer non dispone delle autorizzazioni per le tabelle dello schema di marketing. Pertanto questa query genererà un errore di autorizzazione negata. Per selezionare i dati dalla tabella degli eventi nello schema di marketing, devi concedere al ruolo sales_rw le autorizzazioni SELECT per la tabella degli eventi nello schema di marketing.

    SELECT * FROM marketing.events; ERROR: permission denied for schema marketing
  4. Per tentare di aggiornare il nome dell’evento per eventid 1, utilizza l’esempio seguente. Questo esempio genererà un errore di autorizzazione negata perché l’utente salesengineer dispone solo delle autorizzazioni SELECT per la tabella degli eventi nello schema di vendita. Per aggiornare la tabella degli eventi, devi concedere al ruolo sales_rw le autorizzazioni UPDATE.

    UPDATE sales.events SET eventname = 'Comment event' WHERE eventid = 1; ERROR: permission denied for relation events

Fase 7: concedere le autorizzazioni di aggiornamento e inserimento al ruolo di lettura/scrittura

In questa fase concedi le autorizzazioni di aggiornamento e inserimento al ruolo sales_rw.

  1. Connettiti al database come utente dbadmin.

  2. Per concedere le autorizzazioni UPDATE, INSERT e DELETE al ruolo sales_rw, utilizza l’esempio seguente.

    GRANT UPDATE, INSERT, ON ALL TABLES IN SCHEMA sales TO role sales_rw;

Fase 8: eseguire le query sui dati come utente di lettura/scrittura

In questa fase, l’utente salesengineer aggiorna correttamente la tabella dopo che al suo ruolo sono state concesse le autorizzazioni di inserimento e aggiornamento. Successivamente l’utente salesengineer tenta di analizzare la tabella degli eventi ed eseguirvi un’attività di vacuum, ma non riesce.

  1. Connettiti al database come utente salesengineer.

  2. Per aggiornare il nome dell’evento per eventid 1, utilizza l’esempio seguente.

    UPDATE sales.events SET eventname = 'Comment event' WHERE eventid = 1;
  3. Per visualizzare la modifica apportata nella query precedente, utilizza l’esempio seguente per selezionare l’evento con eventid 1 dalla tabella degli eventi nello schema di vendita.

    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 | +---------+---------+-------+--------+---------------+---------------------+
  4. Per analizzare la tabella degli eventi aggiornata nello schema di vendita, utilizza l’esempio seguente. Questo esempio genererà un errore di autorizzazione negata perché l’utente salesengineer non dispone delle autorizzazioni necessarie e non è il proprietario della tabella degli eventi nello schema di vendita. Per analizzare la tabella degli eventi, devi concedere al ruolo sales_rw le autorizzazioni ANALYZE utilizzando il comando GRANT. Per ulteriori informazioni sul comando ANALYZE, consulta ANALYZE.

    ANALYZE sales.events; ERROR: skipping "events" --- only table or database owner can analyze
  5. Per eseguire un’attività di vacuum nella tabella degli eventi aggiornata, utilizza l’esempio seguente. Questo esempio genererà un errore di autorizzazione negata perché l’utente salesengineer non dispone delle autorizzazioni necessarie e non è il proprietario della tabella degli eventi nello schema di vendita. Per cancellare la tabella degli eventi, devi concedere al ruolo sales_rw le autorizzazioni VACUUM utilizzando il comando GRANT. Per ulteriori informazioni sul comando VACUUM, consulta VACUUM.

    VACUUM sales.events; ERROR: skipping "events" --- only table or database owner can vacuum it

Fase 9: analizzare le tabelle in un database ed eseguirvi un’attività di vacuum come utente amministratore

In questa fase, l’utente dbadmin analizza tutte le tabelle e vi esegue un’attività di vacuum. L’utente dispone delle autorizzazioni di amministratore per questo database, quindi è in grado di eseguire questi comandi.

  1. Connettiti al database come utente dbadmin.

  2. Per analizzare la tabella degli eventi nello schema di vendita, utilizza l’esempio seguente.

    ANALYZE sales.events;
  3. Per eseguire un’attività di vacuum nella tabella degli eventi nello schema di vendita, utilizza l’esempio seguente.

    VACUUM sales.events;
  4. Per analizzare la tabella degli eventi nello schema di marketing, utilizza l’esempio seguente.

    ANALYZE marketing.events;
  5. Per riepilogare la tabella degli eventi nello schema di marketing, utilizza l’esempio seguente.

    VACUUM marketing.events;

Fase 10: troncare le tabelle come utente di lettura/scrittura

In questa fase, l’utente salesengineer tenta di troncare la tabella degli eventi nello schema di vendita, ma ci riesce solo se l’utente dbadmin concede le autorizzazioni di troncamento.

  1. Connettiti al database come utente salesengineer.

  2. Per provare a eliminare tutte le righe dalla tabella degli eventi nello schema di vendita, utilizza l’esempio seguente. Questo esempio genererà un errore perché l’utente salesengineer non dispone delle autorizzazioni necessarie e non è il proprietario della tabella degli eventi nello schema di vendita. Per troncare la tabella degli eventi, devi concedere al ruolo sales_rw le autorizzazioni TRUNCATE utilizzando il comando GRANT. Per ulteriori informazioni sul comando TRUNCATE, consulta TRUNCATE.

    TRUNCATE sales.events; ERROR: must be owner of relation events
  3. Connettiti al database come utente dbadmin.

  4. Per concedere i privilegi di troncare la tabella al ruolo sales_rw, utilizza l’esempio seguente.

    GRANT TRUNCATE TABLE TO role sales_rw;
  5. Connettiti al database come utente salesengineer utilizzando Query Editor V2.

  6. Per leggere i primi 10 eventi dalla tabella degli eventi nello schema di vendita, utilizza l’esempio seguente.

    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 | +---------+---------+-------+--------+-----------------------------+---------------------+
  7. Per troncare la tabella degli eventi nello schema di vendita, utilizza l’esempio seguente.

    TRUNCATE sales.events;
  8. Per leggere i dati dalla tabella degli eventi aggiornata nello schema di vendita, utilizza l’esempio seguente.

    SELECT * FROM sales.events ORDER BY eventid LIMIT 10; +---------+---------+-------+--------+-----------------------------+---------------------+ | eventid | venueid | catid | dateid | eventname | starttime | +---------+---------+-------+--------+-----------------------------+---------------------+

Creare ruoli di sola lettura e di lettura/scrittura per lo schema di marketing (facoltativo)

In questa fase crei ruoli di sola lettura e di lettura/scrittura per lo schema di marketing.

  1. Connettiti al database come utente dbadmin.

  2. Per creare ruoli di sola lettura e lettura/scrittura per lo schema di marketing, utilizza l’esempio seguente.

    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;

Funzioni di sistema per RBAC (facoltativo)

Amazon Redshift offre due funzioni per fornire informazioni di sistema sull’appartenenza degli utenti e sull’appartenenza ai ruoli in gruppi o ruoli aggiuntivi: role_is_member_of e user_is_member_of. Queste funzioni sono disponibili per gli utenti con privilegi avanzati e gli utenti normali. Gli utenti con privilegi avanzati possono controllare tutte le appartenenze ai ruoli. Gli utenti normali possono verificare l’appartenenza solo ai ruoli per cui hanno ottenuto l’accesso.

Come utilizzare la funzione role_is_member_of

  1. Connettiti al database come utente salesengineer.

  2. Per verificare se il ruolo sales_rw è un membro del ruolo sales_ro, utilizza l’esempio seguente.

    SELECT role_is_member_of('sales_rw', 'sales_ro'); +-------------------+ | role_is_member_of | +-------------------+ | true | +-------------------+
  3. Per verificare se il ruolo sales_ro è un membro del ruolo sales_rw, utilizza l’esempio seguente.

    SELECT role_is_member_of('sales_ro', 'sales_rw'); +-------------------+ | role_is_member_of | +-------------------+ | false | +-------------------+

Come utilizzare la funzione user_is_member_of

  1. Connettiti al database come utente salesengineer.

  2. L’esempio seguente tenta di verificare l’appartenenza dell’utente salesanalyst. Questa query genera un errore perché l’utente salesengineer non ha accesso a salesanalyst. Per eseguire correttamente questo comando, connettiti al database come utente salesanalyst e utilizza l’esempio.

    SELECT user_is_member_of('salesanalyst', 'sales_ro'); ERROR
  3. Connettiti al database come superutente.

  4. Per verificare l’appartenenza dell’utente salesanalyst quando è connesso come utente con privilegi avanzati, utilizza l’esempio seguente.

    SELECT user_is_member_of('salesanalyst', 'sales_ro'); +-------------------+ | user_is_member_of | +-------------------+ | true | +-------------------+
  5. Connettiti al database come utente dbadmin.

  6. Per verificare l’appartenenza dell’utente salesengineer, utilizza l’esempio seguente.

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

Viste di sistema per RBAC (facoltativo)

Per visualizzare i ruoli, l’assegnazione dei ruoli agli utenti, la gerarchia dei ruoli e i privilegi per gli oggetti di database tramite i ruoli, utilizza le viste di sistema per Amazon Redshift. Queste viste sono disponibili per gli utenti con privilegi avanzati e gli utenti normali. Gli utenti con privilegi avanzati possono controllare tutti i dettagli del ruolo. Gli utenti normali possono controllare solo i dettagli dei ruoli per cui hanno ottenuto l’accesso.

  1. Per visualizzare un elenco di utenti a cui sono concessi esplicitamente ruoli nel cluster, utilizza l’esempio seguente.

    SELECT * FROM svv_user_grants;
  2. Per visualizzare un elenco di ruoli a cui sono concessi esplicitamente ruoli nel cluster, utilizza l’esempio seguente.

    SELECT * FROM svv_role_grants;

Per l’elenco completo delle viste di sistema, consulta Viste SVV dei metadati.

Utilizza la sicurezza a livello di riga con RBAC (facoltativo)

Per avere il controllo degli accessi granulare sui dati sensibili, utilizza la sicurezza a livello di riga (RLS). Per ulteriori informazioni sulla RLS, consulta Sicurezza a livello di riga.

In questa sezione crei una policy RLS che concede all’utente salesengineer le autorizzazioni per visualizzare solo le righe della tabella cat che hanno il valore catdesc di Major League Baseball. Quindi esegui query sul database come utente salesengineer.

  1. Connettiti al database come utente salesengineer.

  2. Per visualizzare le prime cinque voci nella tabella cat, utilizza l’esempio seguente.

    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 | +-------+----------+---------+---------------------------------+
  3. Connettiti al database come utente dbadmin.

  4. Per creare una policy RLS per la colonna catdesc della tabella cat, utilizza l’esempio seguente.

    CREATE RLS POLICY policy_mlb_engineer WITH (catdesc VARCHAR(50)) USING (catdesc = 'Major League Baseball');
  5. Per collegare la policy RLS al ruolo sales_rw, utilizza l’esempio seguente.

    ATTACH RLS POLICY policy_mlb_engineer ON sales.cat TO ROLE sales_rw;
  6. Per modificare la tabella per attivare RLS, utilizza l’esempio seguente.

    ALTER TABLE sales.cat ROW LEVEL SECURITY ON;
  7. Connettiti al database come utente salesengineer.

  8. Per tentare di visualizzare le prime cinque voci nella tabella cat, utilizza l’esempio seguente. Tieni presente che le voci vengono visualizzate solo quando la colonna catdesc è Major League Baseball.

    SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5; +-------+----------+---------+-----------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+-----------------------+ | 1 | Sports | MLB | Major League Baseball | +-------+----------+---------+-----------------------+
  9. Connettiti al database come utente salesanalyst.

  10. Per tentare di visualizzare le prime cinque voci nella tabella cat, utilizza l’esempio seguente. Tieni presente che non viene visualizzata alcuna voce perché viene applicata la policy di rifiuto di tutto per impostazione predefinita.

    SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5; +-------+----------+---------+-----------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+-----------------------+
  11. Connettiti al database come utente dbadmin.

  12. Per concedere l’autorizzazione IGNORE RLS al ruolo sales_ro, utilizza l’esempio seguente. All’utente salesanalyst vengono concesse le autorizzazioni per ignorare le policy RLS poiché è un membro del ruolo sales_ro.

    GRANT IGNORE RLS TO ROLE sales_ro;
  13. Connettiti al database come utente salesanalyst.

  14. Per visualizzare le prime cinque voci nella tabella cat, utilizza l’esempio seguente.

    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 | +-------+----------+---------+---------------------------------+
  15. Connettiti al database come utente dbadmin.

  16. Per revocare l’autorizzazione IGNORE RLS dal ruolo sales_ro, utilizza l’esempio seguente.

    REVOKE IGNORE RLS FROM ROLE sales_ro;
  17. Connettiti al database come utente salesanalyst.

  18. Per tentare di visualizzare le prime cinque voci nella tabella cat, utilizza l’esempio seguente. Tieni presente che non viene visualizzata alcuna voce perché viene applicata la policy di rifiuto di tutto per impostazione predefinita.

    SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5; +-------+----------+---------+-----------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+-----------------------+
  19. Connettiti al database come utente dbadmin.

  20. Per scollegare la policy RLS dalla tabella cat, utilizza l’esempio seguente.

    DETACH RLS POLICY policy_mlb_engineer ON cat FROM ROLE sales_rw;
  21. Connettiti al database come utente salesanalyst.

  22. Per tentare di visualizzare le prime cinque voci nella tabella cat, utilizza l’esempio seguente. Tieni presente che non viene visualizzata alcuna voce perché viene applicata la policy di rifiuto di tutto per impostazione predefinita.

    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 | +-------+----------+---------+---------------------------------+
  23. Connettiti al database come utente dbadmin.

  24. Per rimuovere la policy RLS, utilizza l’esempio seguente.

    DROP RLS POLICY policy_mlb_engineer;
  25. Per rimuovere RLS, utilizza l’esempio seguente.

    ALTER TABLE cat ROW LEVEL SECURITY OFF;

Per ulteriori informazioni su RBAC, consulta la documentazione seguente: