Didacticiel : Création de rôles et interrogation avec RBAC - Amazon Redshift

Amazon Redshift ne prendra plus en charge la création de nouvelles fonctions Python définies par l’utilisateur à compter du 1er novembre 2025. Si vous souhaitez utiliser des fonctions Python définies par l’utilisateur, créez-les avant cette date. Les fonctions Python définies par l’utilisateur existantes continueront de fonctionner normalement. Pour plus d’informations, consultez le billet de blog .

Didacticiel : Création de rôles et interrogation avec RBAC

Avec le RBAC, vous pouvez créer des rôles dotés d’autorisations permettant d’exécuter des commandes qui nécessitaient auparavant des autorisations de super-utilisateur. Les utilisateurs peuvent exécuter ces commandes tant qu’un rôle incluant ces autorisations leur est autorisé.

Dans ce didacticiel, vous utilisez le contrôle d’accès basé sur les rôles (RBAC) pour gérer les autorisations dans la base de données que vous créez. Vous vous connectez ensuite à la base de données et l’interrogez à partir de deux rôles différents pour tester les fonctionnalités du RBAC.

Les deux rôles que vous créez et utilisez pour interroger la base de données sont sales_ro et sales_rw. Vous créez le rôle sales_ro et interrogez les données en tant qu’utilisateur avec le rôle sales_ro. L’utilisateur sales_ro peut uniquement utiliser la commande SELECT, mais ne peut pas utiliser la commande UPDATE. Vous créez ensuite le rôle sales_rw et interrogez les données en tant qu’utilisateur avec le rôle sales_rw. L’utilisateur sales_rw peut utiliser les commandes SELECT et UPDATE.

De plus, vous pouvez également créer des rôles afin de limiter l’accès à certaines commandes et attribuer le rôle à des super-utilisateurs ou à des utilisateurs.

Tâches

Prérequis

Étape 1 : Créer un utilisateur administrateur

Pour ce didacticiel, vous devez créer un rôle d’administrateur de base de données et l’attacher à un utilisateur administrateur de base de données au cours de cette étape. Vous devez créer l’administrateur de base de données en tant que super-utilisateur ou administrateur de rôles.

Exécutez toutes les requêtes dans Amazon Redshift Query Editor v2.

  1. Pour créer le rôle d’administrateur db_admin, utilisez l’exemple suivant.

    CREATE ROLE db_admin;
  2. Pour créer un utilisateur de base de données nommé dbadmin, utilisez l’exemple suivant.

    CREATE USER dbadmin PASSWORD 'Test12345';
  3. Pour attribuer le rôle défini par le système nommé sys:dba au rôle db_admin, utilisez l’exemple suivant. Lorsque le rôle sys:dba est attribué, l’utilisateur dbadmin peut créer des schémas et des tables. Pour plus d’informations, consultez Rôles définis par le système Amazon Redshift.

Étape 2 : Configuration des schémas

Au cours de cette étape, vous vous connectez à votre base de données en tant qu’administrateur de base de données. Ensuite, vous créez deux schémas et vous y ajoutez des données.

  1. Établissez une connexion à la base de données dev en tant qu’utilisateur dbadmin à l’aide de l’éditeur de requête v2. Pour plus d’informations sur la connexion à une base de données, consultez Utilisation de l’éditeur de requête v2.

  2. Pour créer les schémas de la base de données de vente et de marketing, utilisez l’exemple suivant.

    CREATE SCHEMA sales; CREATE SCHEMA marketing;
  3. Pour créer et insérer des valeurs dans les tables du schéma de vente, utilisez l’exemple suivant.

    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. Pour créer et insérer des valeurs dans les tables du schéma de marketing, utilisez l’exemple suivant.

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

Étape 3 : Créer un utilisateur en lecture seule

Au cours de cette étape, vous créez un rôle en lecture seule et un utilisateur salesanalyst pour le rôle en lecture seule. L’analyste des ventes n’a besoin que d’un accès en lecture seule aux tables du schéma des ventes pour accomplir la tâche qui lui est assignée, à savoir trouver les événements qui ont généré les commissions les plus importantes.

  1. Établissez une connexion à la base de données en tant qu’utilisateur dbadmin.

  2. Pour créer le rôle sales_ro, utilisez l’exemple suivant.

    CREATE ROLE sales_ro;
  3. Pour créer l’utilisateur salesanalyst, utilisez l’exemple suivant.

    CREATE USER salesanalyst PASSWORD 'Test12345';
  4. Pour accorder au rôle sales_ro l’accès d’utilisation et de sélection des objets du schéma de vente, utilisez l’exemple suivant.

    GRANT USAGE ON SCHEMA sales TO ROLE sales_ro; GRANT SELECT ON ALL TABLES IN SCHEMA sales TO ROLE sales_ro;
  5. Pour attribuer le rôle sales_ro à l’utilisateur salesanalyst, utilisez l’exemple suivant.

    GRANT ROLE sales_ro TO salesanalyst;

Étape 4 : Interroger les données en tant qu’utilisateur en lecture seule

Au cours de cette étape, l’utilisateur salesanalyst interroge les données du schéma de vente. L’utilisateur salesanalyst tente ensuite de mettre à jour une table et de lire des tables dans le schéma de marketing.

  1. Établissez une connexion à la base de données en tant qu’utilisateur salesanalyst.

  2. Pour trouver les 10 ventes avec les commissions les plus élevées, utilisez l’exemple suivant.

    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. Pour sélectionner 10 événements dans la table des événements du schéma de vente, utilisez l’exemple suivant.

    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. Pour tenter de mettre à jour le nom de l’événement avec eventid 1, exécutez l’exemple suivant. Cet exemple provoquera une erreur de refus d’autorisation car l’utilisateur salesanalyst ne dispose que des autorisations SELECT sur la table des événements du schéma de vente. Pour mettre à jour la table des événements, vous devez donner l’autorisation UPDATE au rôle sales_ro. Pour plus d’informations sur la manière de donner l’autorisation de mettre à jour une table, consultez le paramètre UPDATE pour GRANT. Pour plus d’informations sur la commande UPDATE, consultez UPDATE.

    UPDATE sales.events SET eventname = 'Comment event' WHERE eventid = 1; ERROR: permission denied for relation events
  5. Pour essayer de tout sélectionner dans la table des événements du schéma de marketing, utilisez l’exemple suivant. Cet exemple provoquera une erreur de refus d’autorisation car l’utilisateur salesanalyst ne dispose que des autorisations SELECT sur la table des événements du schéma de vente. Pour sélectionner des données dans la table des événements du schéma de marketing, vous devez accorder au rôle sales_ro les autorisations SELECT sur la table des événements du schéma de marketing.

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

Étape 5 : Créer un utilisateur en lecture-écriture

Au cours de cette étape, l’ingénieur des ventes chargé de créer le pipeline d’extraction, de transformation et de chargement (ETL) pour le traitement des données dans le schéma de vente bénéficiera d’un accès en lecture seule, puis d’un accès en lecture-écriture pour effectuer ses tâches.

  1. Établissez une connexion à la base de données en tant qu’utilisateur dbadmin.

  2. Pour créer le rôle sales_rw dans le schéma de vente, utilisez l’exemple suivant.

    CREATE ROLE sales_rw;
  3. Pour créer l’utilisateur salesengineer, utilisez l’exemple suivant.

    CREATE USER salesengineer PASSWORD 'Test12345';
  4. Pour accorder au rôle sales_rw l’accès d’utilisation et de sélection des objets du schéma de vente en lui attribuant le rôle sales_ro, utilisez l’exemple suivant. Pour plus d’informations sur la façon dont les rôles héritent des autorisations dans Amazon Redshift, consultez Hiérarchie des rôles.

    GRANT ROLE sales_ro TO ROLE sales_rw;
  5. Pour attribuer le rôle sales_rw à l’utilisateur salesengineer, utilisez l’exemple suivant.

    GRANT ROLE sales_rw TO salesengineer;

Étape 6 : Interroger les données en tant qu’utilisateur avec le rôle en lecture seule hérité

Au cours de cette étape, l’utilisateur salesengineer tente de mettre à jour la table des événements avant de recevoir des autorisations de lecture.

  1. Établissez une connexion à la base de données en tant qu’utilisateur salesengineer.

  2. L’utilisateur salesengineer peut lire avec succès les données de la table des événements du schéma de vente. Pour sélectionner l’événement eventid1 dans la table des événements du schéma de vente, utilisez l’exemple suivant.

    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. Pour essayer de tout sélectionner dans la table des événements du schéma de marketing, utilisez l’exemple suivant. L’utilisateur salesengineer n’étant pas autorisé à accéder aux tables du schéma de marketing, cette requête provoquera une erreur de refus d’autorisation. Pour sélectionner des données dans la table des événements du schéma de marketing, vous devez accorder au rôle sales_rw les autorisations SELECT sur la table des événements du schéma de marketing.

    SELECT * FROM marketing.events; ERROR: permission denied for schema marketing
  4. Pour tenter de mettre à jour le nom de l’événement avec eventid 1, exécutez l’exemple suivant. Cet exemple provoquera une erreur de refus d’autorisation car l’utilisateur salesengineer ne dispose que des autorisations SELECT sur la table des événements du schéma de vente. Pour mettre à jour la table des événements, vous devez donner l’autorisation UPDATE au rôle sales_rw.

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

Étape 7 : Accorder des autorisations de mise à jour et d’insertion pour le rôle en lecture-écriture

Au cours de cette étape, vous accordez des autorisations de mise à jour et d’insertion au rôle sales_rw.

  1. Établissez une connexion à la base de données en tant qu’utilisateur dbadmin.

  2. Pour accorder les autorisations UPDATE, INSERT et DELETE au rôle sales_rw, utilisez l’exemple suivant.

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

Étape 8 : Interroger les données en tant qu’utilisateur en lecture-écriture

Au cours de cette étape, l’ingénieur de vente met à jour la table avec succès une fois que son rôle a obtenu les autorisations d’insertion et de mise à jour. Ensuite, l’ingénieur de vente tente d’analyser et de vider la table des événements, mais n’y parvient pas.

  1. Établissez une connexion à la base de données en tant qu’utilisateur salesengineer.

  2. Pour mettre à jour le nom de l’événement avec eventid 1, exécutez l’exemple suivant.

    UPDATE sales.events SET eventname = 'Comment event' WHERE eventid = 1;
  3. Pour afficher la modification apportée dans la requête précédente, utilisez l’exemple suivant pour sélectionner l’événement eventid 1 dans la table des événements du schéma de vente.

    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. Pour analyser la table d’événements mise à jour dans le schéma de vente, utilisez l’exemple suivant. Cet exemple provoquera une erreur de refus d’autorisation car l’utilisateur salesengineer ne dispose pas des autorisations nécessaires et n’est pas le propriétaire de la table des événements dans le schéma de vente. Pour analyser la table des événements, vous devez accorder au rôle sales_rw l’autorisation ANALYZE à l’aide de la commande GRANT. Pour plus d’informations sur la commande ANALYZE, consultez ANALYSE.

    ANALYZE sales.events; ERROR: skipping "events" --- only table or database owner can analyze
  5. Pour vider la table des événements mise à jour, utilisez l’exemple suivant. Cet exemple provoquera une erreur de refus d’autorisation car l’utilisateur salesengineer ne dispose pas des autorisations nécessaires et n’est pas le propriétaire de la table des événements dans le schéma de vente. Pour vider la table des événements, vous devez accorder au rôle sales_rw les autorisations VACUUM à l’aide de la commande GRANT. Pour plus d’informations sur la commande VACUUM, consultez VACUUM.

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

Étape 9 : Analyser et vider les tables d’une base de données en tant qu’utilisateur administrateur

Au cours de cette étape, l’utilisateur dbadmin analyse et vide toutes les tables. L’utilisateur dispose d’autorisations d’administrateur sur cette base de données, ce qui lui permet d’exécuter ces commandes.

  1. Établissez une connexion à la base de données en tant qu’utilisateur dbadmin.

  2. Pour analyser la table des événements dans le schéma de vente, utilisez l’exemple suivant.

    ANALYZE sales.events;
  3. Pour vider la table des événements dans le schéma de vente, utilisez l’exemple suivant.

    VACUUM sales.events;
  4. Pour analyser la table des événements dans le schéma de marketing, utilisez l’exemple suivant.

    ANALYZE marketing.events;
  5. Pour vider la table des événements dans le schéma de marketing, utilisez l’exemple suivant.

    VACUUM marketing.events;

Étape 10 : Tronquer les tables en tant qu’utilisateur en lecture-écriture

Au cours de cette étape, l’utilisateur salesengineer tente de tronquer la table des événements dans le schéma de vente, mais n’y parvient que lorsque l’utilisateur dbadmin lui accorde des autorisations de troncature.

  1. Établissez une connexion à la base de données en tant qu’utilisateur salesengineer.

  2. Pour essayer de supprimer toutes les lignes de la table des événements dans le schéma de vente, utilisez l’exemple suivant. Cet exemple provoquera une erreur car l’utilisateur salesengineer ne dispose pas des autorisations nécessaires et n’est pas le propriétaire de la table des événements dans le schéma de vente. Pour tronquer la table des événements, vous devez accorder au rôle sales_rw l’autorisation TRUNCATE à l’aide de la commande GRANT. Pour plus d’informations sur la commande TRUNCATE, consultez TRUNCATE.

    TRUNCATE sales.events; ERROR: must be owner of relation events
  3. Établissez une connexion à la base de données en tant qu’utilisateur dbadmin.

  4. Pour accorder les privilèges de tronquer les tables au rôle sales_rw, utilisez l’exemple suivant.

    GRANT TRUNCATE TABLE TO role sales_rw;
  5. Établissez une connexion à la base de données en tant qu’utilisateur salesengineer à l’aide de query editor v2.

  6. Pour lire les 10 premiers événements dans la table des événements du schéma de vente, utilisez l’exemple suivant.

    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. Pour tronquer la table des événements dans le schéma de vente, utilisez l’exemple suivant.

    TRUNCATE sales.events;
  8. Pour lire les données de la table d’événements mise à jour dans le schéma de vente, utilisez l’exemple suivant.

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

Créer des rôles en lecture seule et en lecture-écriture pour le schéma de marketing (facultatif)

Au cours de cette étape, vous créez des rôles en lecture seule et en lecture-écriture pour le schéma de marketing.

  1. Établissez une connexion à la base de données en tant qu’utilisateur dbadmin.

  2. Pour créer des rôles en lecture seule et en lecture-écriture pour le schéma de marketing, utilisez l’exemple suivant.

    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;

Fonctions système pour le RBAC (en option)

Amazon Redshift dispose de deux fonctions pour fournir des informations système sur l’appartenance des utilisateurs et des rôles à des groupes ou rôles supplémentaires : role_is_member_of et user_is_member_of. Ces fonctions sont disponibles pour les super-utilisateurs et les utilisateurs standards. Les super-utilisateurs peuvent vérifier l’appartenance de tous les rôles. Les utilisateurs standards ne peuvent vérifier l’appartenance que pour les rôles auxquels ils ont été autorisés à accéder.

Pour utiliser la fonction role_is_member_of

  1. Établissez une connexion à la base de données en tant qu’utilisateur salesengineer.

  2. Pour vérifier si le rôle sales_rw est membre du rôle sales_ro, utilisez l’exemple suivant.

    SELECT role_is_member_of('sales_rw', 'sales_ro'); +-------------------+ | role_is_member_of | +-------------------+ | true | +-------------------+
  3. Pour vérifier si le rôle sales_ro est membre du rôle sales_rw, utilisez l’exemple suivant.

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

Pour utiliser la fonction user_is_member_of

  1. Établissez une connexion à la base de données en tant qu’utilisateur salesengineer.

  2. L’exemple suivant tente de vérifier l’appartenance de l’utilisateur salesanalyst. Cette requête génère une erreur car salesengineer n’a pas accès à salesanalyst. Pour exécuter correctement cette commande, connectez-vous à la base de données en tant qu’utilisateur salesanalyst et utilisez l’exemple.

    SELECT user_is_member_of('salesanalyst', 'sales_ro'); ERROR
  3. Établissez une connexion à la base de données en tant que super-utilisateur.

  4. Pour vérifier l’appartenance de l’utilisateur salesanalyst lorsqu’il est connecté en tant que super-utilisateur, utilisez l’exemple suivant.

    SELECT user_is_member_of('salesanalyst', 'sales_ro'); +-------------------+ | user_is_member_of | +-------------------+ | true | +-------------------+
  5. Établissez une connexion à la base de données en tant qu’utilisateur dbadmin.

  6. Pour vérifier l’appartenance de l’utilisateur salesengineer, utilisez l’exemple suivant.

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

Vues système pour le RBAC (facultatif)

Pour consulter les rôles, l’attribution des rôles aux utilisateurs, la hiérarchie des rôles et les privilèges pour les objets de base de données via des rôles, utilisez les vues système d’Amazon Redshift. Ces vues sont accessibles aux super-utilisateurs et aux utilisateurs standards. Les super-utilisateurs peuvent vérifier tous les détails des rôles. Les utilisateurs standards peuvent uniquement vérifier les détails des rôles auxquels ils ont été autorisés à accéder.

  1. Pour afficher la liste des utilisateurs auxquels des rôles sont explicitement accordés dans le cluster, utilisez l’exemple suivant.

    SELECT * FROM svv_user_grants;
  2. Pour afficher la liste des rôles auxquels des rôles sont explicitement accordés dans le cluster, utilisez l’exemple suivant.

    SELECT * FROM svv_role_grants;

Pour obtenir la liste complète des vues système, consultez Vues de métadonnées SVV.

Utiliser la sécurité au niveau des lignes avec le RBAC (facultatif)

Pour bénéficier d’un contrôle précis des accès à vos données sensibles, utilisez la sécurité au niveau des lignes (RLS). Pour plus d’informations sur RLS, consultez Sécurité au niveau des lignes.

Dans cette section, vous créez une politique RLS qui autorise l’utilisateur salesengineer à afficher uniquement les lignes de la table cat qui ont la valeur catdesc de la Major League Baseball. Vous interrogez ensuite la base de données en tant qu’utilisateur salesengineer.

  1. Établissez une connexion à la base de données en tant qu’utilisateur salesengineer.

  2. Pour afficher les 5 premières entrées de la table cat, utilisez l’exemple suivant.

    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. Établissez une connexion à la base de données en tant qu’utilisateur dbadmin.

  4. Pour créer une politique RLS pour la colonne catdesc de la table cat, utilisez l’exemple suivant.

    CREATE RLS POLICY policy_mlb_engineer WITH (catdesc VARCHAR(50)) USING (catdesc = 'Major League Baseball');
  5. Pour attacher la politique RLS au rôle sales_rw, utilisez l’exemple suivant.

    ATTACH RLS POLICY policy_mlb_engineer ON sales.cat TO ROLE sales_rw;
  6. Pour modifier la table afin d’activer la politique RLS, utilisez l’exemple suivant.

    ALTER TABLE sales.cat ROW LEVEL SECURITY ON;
  7. Établissez une connexion à la base de données en tant qu’utilisateur salesengineer.

  8. Pour tenter d’afficher les 5 premières entrées de la table cat, utilisez l’exemple suivant. Notez que seules les entrées apparaissent uniquement lorsque la colonne catdesc est Major League Baseball.

    SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5; +-------+----------+---------+-----------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+-----------------------+ | 1 | Sports | MLB | Major League Baseball | +-------+----------+---------+-----------------------+
  9. Établissez une connexion à la base de données en tant qu’utilisateur salesanalyst.

  10. Pour tenter d’afficher les 5 premières entrées de la table cat, utilisez l’exemple suivant. Notez qu’aucune entrée n’apparaît car la politique par défaut de tout refuser est appliquée.

    SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5; +-------+----------+---------+-----------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+-----------------------+
  11. Établissez une connexion à la base de données en tant qu’utilisateur dbadmin.

  12. Pour accorder l’autorisation IGNORE RLS au rôle sales_ro, utilisez l’exemple suivant. Cela donne à l’utilisateur salesanalyst l’autorisation d’ignorer les politiques RLS puisqu’il est membre du rôle sales_ro.

    GRANT IGNORE RLS TO ROLE sales_ro;
  13. Établissez une connexion à la base de données en tant qu’utilisateur salesanalyst.

  14. Pour afficher les 5 premières entrées de la table cat, utilisez l’exemple suivant.

    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. Établissez une connexion à la base de données en tant qu’utilisateur dbadmin.

  16. Pour révoquer l’autorisation IGNORE RLS du rôle sales_ro, utilisez l’exemple suivant.

    REVOKE IGNORE RLS FROM ROLE sales_ro;
  17. Établissez une connexion à la base de données en tant qu’utilisateur salesanalyst.

  18. Pour tenter d’afficher les 5 premières entrées de la table cat, utilisez l’exemple suivant. Notez qu’aucune entrée n’apparaît car la politique par défaut de tout refuser est appliquée.

    SELECT * FROM sales.cat ORDER BY catid ASC LIMIT 5; +-------+----------+---------+-----------------------+ | catid | catgroup | catname | catdesc | +-------+----------+---------+-----------------------+
  19. Établissez une connexion à la base de données en tant qu’utilisateur dbadmin.

  20. Pour détacher la politique RLS de la table cat, utilisez l’exemple suivant.

    DETACH RLS POLICY policy_mlb_engineer ON cat FROM ROLE sales_rw;
  21. Établissez une connexion à la base de données en tant qu’utilisateur salesanalyst.

  22. Pour tenter d’afficher les 5 premières entrées de la table cat, utilisez l’exemple suivant. Notez qu’aucune entrée n’apparaît car la politique par défaut de tout refuser est appliquée.

    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. Établissez une connexion à la base de données en tant qu’utilisateur dbadmin.

  24. Pour supprimer la politique RLS, utilisez l’exemple suivant.

    DROP RLS POLICY policy_mlb_engineer;
  25. Pour retirer RLS, utilisez l’exemple suivant.

    ALTER TABLE cat ROW LEVEL SECURITY OFF;

Pour plus d’information sur le RBAC, consultez la documentation suivante.