Premiers pas avec Secure Data Sharing

Secure Data Sharing est une fonction très puissante, mais facile à utiliser. Vous pouvez débuter en tant que fournisseur de données en quelques étapes.

Ce chapitre présente les tâches requises pour partager une base de données et ses objets avec un ou plusieurs comptes en créant un partage. Vous pouvez fournir un partage aux consommateurs en utilisant les partages directs ou les annonces.

Dans ce chapitre :

Choisir comment partager des objets de base de données

Avant de poursuivre, déterminez laquelle des options suivantes pour ajouter des objets à un partage répond le mieux à vos besoins :

  • Option 1. Accorder un rôle de base de données à un partage :

    Segmentez les objets sécurisables d’un partage en créant plusieurs rôles de base de données dans une base de données vers un partage. Accordez des privilèges sur un sous-ensemble d’objets de la base de données à chaque rôle de base de données. Ensuite, accordez chaque rôle de base de données au partage.

    Après avoir créé une base de données à partir d’un partage qui comprend des rôles de base de données, les consommateurs de données accordent chaque rôle de base de données partagée à un ou plusieurs rôles de compte dans leur propre compte.

    Sans les rôles de base de données, les administrateurs de comptes de consommateurs de données accordent un privilège unique, IMPORTED PRIVILEGES, aux rôles pour permettre à leurs utilisateurs d’accéder à toutes les bases de données et à tous les objets de base de données (tables, vues sécurisées, etc.) d’un partage. Il n’y a pas d’option pour permettre à différents groupes d’utilisateurs dans un compte de consommateur de données d’accéder à un sous-ensemble d’objets partagés. Cette approche du tout ou rien vous oblige à créer plusieurs partages pour accorder l’accès à différents objets dans la même base de données.

    Note

    Choisissez l’option 2 si vous prévoyez d’inclure des objets de plusieurs bases de données dans un seul partage. Le privilège REFERENCE_USAGE ne peut pas être accordé à un rôle de base de données pour inclure des objets de plusieurs bases de données dans un partage. Notez que cette limitation s’applique également aux objets tels que les vues sécurisées qui ont une ou plusieurs tables sous-jacentes dans une base de données séparée.

    Vous pouvez également créer un partage qui combine les deux options 1 et 2. Autrement dit, vous pouvez accorder des rôles de base de données à un partage (option 1), mais aussi accorder des privilèges sur des objets directement sur le même partage sans accorder de privilèges sur ces objets à un rôle de base de données (option 2). Les consommateurs de données qui créent des bases de données à partir du partage peuvent accéder aux objets de ce dernier en accordant le privilège IMPORTED PRIVILEGES sur la base de données aux rôles locaux.

    Astuce

    Un rôle de base de données partagée ne prend pas en charge les attributions futures sur les objets. Pour plus de détails, voir GRANT DATABASE ROLE … TO SHARE.

  • Option 2. Accorder des privilèges sur des objets directement à un partage :

    Accorde des privilèges sur des objets spécifiques de la base de données directement à un partage. Cette option vous permet d’inclure des objets (par exemple, des tables et des vues sécurisées) provenant de plusieurs bases de données dans un partage, à condition que ces bases de données appartiennent au même compte.

    Les administrateurs de comptes de consommateurs de données accordent le privilège IMPORTED PRIVILEGES sur des bases de données partagées à un ou plusieurs rôles pour permettre à leurs utilisateurs d’accéder aux bases de données et aux objets de base de données (tables, vues sécurisées, etc.) dans un partage.

    Notez que cette option ne prend pas en charge la segmentation des objets de base de données dans un partage en fonction des rôles. Pour ce niveau de contrôle, voir l’option 1.

Option 1 : Accorder des rôles de base de données à un partage

Cette section fournit des instructions aux fournisseurs de données pour restreindre l’accès aux bases de données et aux objets de base de données dans un partage en utilisant des rôles de base de données.

Note

Pour effectuer les tâches décrites dans cette rubrique, votre rôle doit disposer des privilèges globaux CREATE DATABASE et CREATE SHARE.

Dans l’exemple étendu de cette section, un fournisseur de données partage les objets suivants avec les consommateurs de données :

Bases de données

d1

Schémas

d1.s1

Vues sécurisées

d1.s1.v1

Le jeu de résultats de cette vue comprend des enregistrements de la table d1.s1.t1.

d1.s1.v2

Le jeu de résultats de cette vue comprend des enregistrements des tables d1.s1.t2 et d1.s1.t3.

Le fournisseur de données crée deux rôles de base de données dans la base de données d1 pour contrôler l’accès à ces objets : d1.r1 et d1.r2.

Le diagramme suivant montre les relations entre ces objets et indique les privilèges qui sont accordés aux rôles de la base de données :

Data sharing with database roles example

Pour plus d’informations sur les privilèges, voir Privilèges de contrôle d’accès.

Étape 1 : Créer des rôles de base de données

Créez un nouveau rôle de base de données ou remplacez un rôle de base de données existant en utilisant CREATE DATABASE ROLE.

Par exemple, créez des rôles de base de données d1.r1 et d1.r2 en utilisant des identificateurs entièrement qualifiés :

CREATE DATABASE ROLE d1.r1;

CREATE DATABASE ROLE d1.r2;
Copy

Vous pouvez également définir la base de données souhaitée comme la base de données actuelle dans la session, puis créer les rôles de la base de données :

USE DATABASE d1;

CREATE DATABASE ROLE r1;

CREATE DATABASE ROLE r2;
Copy

Étape 2 : Accorder des privilèges sur les objets aux rôles de base de données

Accordez des privilèges sur une seule base de données et un sous-ensemble d’objets de la base de données à chaque rôle de base de données en utilisant GRANT <privilèges>. Accordez uniquement des privilèges sur les objets auxquels le rôle de base de données doit permettre l’accès.

Vous pouvez soit spécifier le nom entièrement qualifié d’un rôle de base de données, soit définir la base de données comme base de données active dans une session, puis spécifier le nom relatif.

Note

  • Pour exécuter les tâches décrites dans ce chapitre, vous devez utiliser le rôle ACCOUNTADMIN ou un rôle auquel les privilèges pertinents ont été accordés. Pour plus d’informations, y compris d’autres scénarios de partage de données, voir Utilisation des partages.

  • Les privilèges accordés à un rôle de base de données sont limités à USAGE sur la base de données et le schéma qui contiennent le rôle de base de données et les privilèges sur les autres objets de la même base de données. En particulier, notez que le privilège REFERENCE_USAGE ne peut pas être accordé à un rôle de base de données pour inclure des objets de plusieurs bases de données dans un partage.

En poursuivant l’exemple étendu de ces instructions, les privilèges suivants sont accordés aux rôles de la base de données :

Rôle de la base de données

Privilège

Objet

d1.r1

USAGE

Base de données d1

USAGE

Schéma d1.s1

SELECT

Vue sécurisée d1.s1.v1

d1.r2

USAGE

Base de données d1

USAGE

Schéma d1.s1

SELECT

Vue sécurisée d1.s1.v2

Les instructions SQL suivantes accordent les privilèges au rôle de base de données d1.r1 :

GRANT USAGE ON SCHEMA d1.s1 TO DATABASE ROLE d1.r1;
GRANT SELECT ON VIEW d1.s1.v1 TO DATABASE ROLE d1.r1;
Copy

Les instructions SQL suivantes accordent les privilèges au rôle de base de données d1.r2 :

GRANT USAGE ON SCHEMA d1.s1 TO DATABASE ROLE d1.r2;
GRANT SELECT ON VIEW d1.s1.v2 TO DATABASE ROLE d1.r2;
Copy

Notez qu’il n’est pas nécessaire d’accorder le privilège USAGE sur la base de données parente. Ce privilège est accordé implicitement lorsqu’un rôle de base de données est créé.

Pour afficher tous les privilèges accordés à un rôle de base de données, exécutez SHOW GRANTS TO DATABASE ROLE en utilisant des identificateurs entièrement qualifiés :

SHOW GRANTS TO DATABASE ROLE d1.r1;
SHOW GRANTS TO DATABASE ROLE d1.r2;
Copy

Sinon, définissez la base de données souhaitée comme la base de données actuelle dans la session, puis exécutez la commande :

USE DATABASE d1;

SHOW GRANTS TO DATABASE ROLE r1;
SHOW GRANTS TO DATABASE ROLE r2;
Copy

Étape 3 : Créer un partage

Créez un partage à l’aide de CREATE SHARE. Le partage est un conteneur vide à ce stade du processus.

Par exemple, créez un nouveau partage nommé share1 :

CREATE SHARE share1;
Copy

Étape 4 : Ajouter la base de données en accordant le privilège USAGE au partage

Actuellement, il est nécessaire d’accorder le privilège USAGE sur une base de données pour l’inclure dans un partage.

Par exemple, accordez le privilège USAGE sur la base de données d1 au partage share1 :

GRANT USAGE ON DATABASE d1 TO SHARE share1;
Copy

Étape 5 : Ajouter des objets en accordant des rôles de base de données au partage

Ajoutez des bases de données et des objets de base de données à un partage en accordant des rôles de base de données au partage en utilisant GRANT DATABASE ROLE … TO SHARE.

Par exemple, accordez les rôles de base de données d1.r1 et d1.r2 au partage share1 :

GRANT DATABASE ROLE d1.r1 TO SHARE share1;
GRANT DATABASE ROLE d1.r2 TO SHARE share1;
Copy

Étape 6 : Partager les objets de base de données avec un ou plusieurs comptes de consommateurs de données

Modifiez le partage ALTER SHARE … ADD ACCOUNTS et ajoutez les comptes de consommateurs de base de données avec lesquels vous souhaitez partager les objets de base de données.

L’exemple suivant ajoute les comptes consumer1 et consumer2 de l’organisation org1 au partage share1 :

ALTER SHARE share1 ADD ACCOUNTS = org1.consumer1,org1.consumer2;
Copy

Gestion des rôles de bases de données

Cette section fournit des instructions pour gérer les rôles de base de données qui sont accordés aux partages.

Fournisseurs de données : Renommer les rôles des bases de données partagées

Renommez les rôles de base de données en utilisant l’instruction ALTER DATABASE ROLE … RENAME TO.

Par exemple, renommez le rôle de la base de données d1.r1 en d1.r3 :

ALTER DATABASE ROLE d1.r1 RENAME TO d1.r3;
Copy

Tous les privilèges accordés à d1.r1 sont conservés après le renommage du rôle de base de données.

Notifie à tous les consommateurs de données d’un partage que le nom du rôle de la base de données a changé.

Notez qu’il est interdit de déplacer un rôle de base de données vers une autre base de données en utilisant la clause RENAME TO. Par exemple :

ALTER DATABASE ROLE d1.r1 RENAME TO d2.r1;
Copy

Fournisseurs de données : Suppression des rôles de base de données partagées

Supprimez les rôles de la base de données en utilisant DROP DATABASE ROLE.

Par exemple, supprimez le rôle de base de données d1.r2 :

DROP DATABASE ROLE d1.r2;
Copy

Notifie tout consommateur de données d’un partage qui inclut le rôle de base de données. L’accès à tous les objets accordés au rôle de base de données est révoqué.

Fournisseurs de données : Création de nouveaux rôles de bases de données partagées

Créez de nouveaux rôles de base de données en utilisant CREATE DATABASE ROLE. Pour plus d’informations, voir Étape 1 : Créer des rôles de base de données (dans cette rubrique). Accordez des privilèges sur les objets de base de données à un rôle de base de données, puis accordez le rôle de base de données à un partage.

Notifiez tous les consommateurs de données d’un partage qui inclut le nouveau rôle de base de données. Ils doivent accorder le nouveau rôle de base de données à leurs propres rôles de compte pour permettre à ces rôles d’accéder aux objets associés au rôle de base de données.

Option 2 : Accorder des privilèges directement à un partage

Cette section fournit des instructions aux fournisseurs de données pour permettre aux consommateurs d’accéder à toutes les bases de données et à tous les objets de base de données d’un partage en accordant un privilège unique sur les bases de données partagées.

Étape 1 : Créer un partage

Utilisez CREATE SHARE pour créer un partage. À cette étape, le partage est simplement un conteneur attendant l’ajout d’objets et de comptes.

Étape 2 : Ajouter des objets au partage en accordant des privilèges

Utilisez GRANT <privilège> … TO SHARE pour accorder les privilèges d’objet suivants au partage :

  • Privilège USAGE sur la base de données que vous souhaitez partager.

  • Privilège USAGE sur chaque schéma de base de données contenant les objets que vous souhaitez partager.

  • Privilège SELECT pour partager des objets spécifiques dans chaque schéma partagé :

    • Tables

    • Tables externes

    • Vues sécurisées

    • Vues matérialisées sécurisées

    • UDFs sécurisés

Important

Si vous prévoyez de partager en toute sécurité des données avec des consommateurs de données dans différentes régions ou plates-formes Cloud, notez qu’actuellement, la réplication d’une base de données principale est bloquée si une ou plusieurs tables externes existent dans la base de données.

Note

Il n’est pas recommandé de créer des vues sécurisées sur les flux et de partager ensuite ces vues avec les consommateurs. Au lieu de cela, permettez aux consommateurs de créer leurs propres flux sur les tables et les vues sécurisées que vous partagez. Pour plus d’informations, voir Flux sur les objets partagés.

En option, utilisez SHOW GRANTS pour voir les attributions d’objet au partage.

Astuce

Effectuez cette validation minimale du partage à ce stade, car une fois l’étape suivante terminée, le partage est visible pour tous les comptes qui sont ajoutés au partage.

Pour effectuer une validation plus approfondie du partage, vous pouvez simuler un compte consommateur dans votre compte. Pour plus de détails, reportez-vous à Utilisation d’objets sécurisés pour contrôler l’accès aux données.

Étape 3 : Ajouter un ou plusieurs comptes au partage

Utilisez ALTER SHARE pour ajouter un ou plusieurs comptes au partage. Pour consulter les comptes ajoutés au partage, vous pouvez utiliser SHOW GRANTS.

Le partage peut maintenant être consommé par les comptes indiqués. Pour des instructions plus détaillées sur l’exécution de ces tâches et d’autres tâches relatives aux fournisseurs de données, voir Utilisation des partages.

Exemple

L’exemple suivant illustre l’ensemble du processus du fournisseur tel que décrit ci-dessus.

Cet exemple suppose les éléments suivants :

  • Une base de données nommée sales_db existe avec un schéma nommé aggregates_eula et une table nommée aggregate_1.

  • La base de données, le schéma et la table seront partagés avec deux comptes nommés xy12345 et yz23456.

USE ROLE accountadmin;

CREATE SHARE sales_s;

GRANT USAGE ON DATABASE sales_db TO SHARE sales_s;
GRANT USAGE ON SCHEMA sales_db.aggregates_eula TO SHARE sales_s;
GRANT SELECT ON TABLE sales_db.aggregates_eula.aggregate_1 TO SHARE sales_s;

SHOW GRANTS TO SHARE sales_s;

ALTER SHARE sales_s ADD ACCOUNTS=xy12345, yz23456;

SHOW GRANTS OF SHARE sales_s;
Copy