Partage des données de plusieurs bases de données

Les fournisseurs de données Snowflake peuvent partager des données provenant de plusieurs bases de données via des vues sécurisées. Une vue sécurisée peut référencer des objets tels que des schémas, des tables et d’autres vues contenus dans une ou plusieurs bases de données, à condition que ces bases de données appartiennent au même compte.

Le partage d’une vue sécurisée faisant référence à des objets de plusieurs bases de données diffère du partage de données contenues dans une seule base de données.

En plus d’effectuer toutes les étapes standards pour partager des données, vous devez également accorder le privilège REFERENCE_USAGE sur chaque base de données référencée par une vue sécurisée que vous souhaitez partager. Cependant, vous n’avez pas besoin d’accorder REFERENCE_USAGE sur la base de données contenant la vue sécurisée.

Note

Vous ne pouvez pas utiliser de rôles de base de données pour partager des données provenant de plusieurs bases de données. Vous ne pouvez pas accorder le privilège REFERENCE_USAGE à un rôle de base de données et vous ne pouvez pas utiliser de rôle de base de données pour accorder à un partage une vue sécurisée qui référence des objets provenant de plusieurs bases de données.

Vous devez accorder le privilège REFERENCE_USAGE séparément à chaque base de données référencée dans une vue sécurisée avant d’accorder la vue sécurisée à un partage.

Pour partager une vue sécurisée faisant référence à des objets de plusieurs bases de données :

  1. Connectez-vous à votre compte Snowflake en tant qu’utilisateur avec le rôle ACCOUNTADMIN ou un rôle doté du privilège global CREATE SHARE. Pour plus de détails sur le privilège CREATE SHARE, voir Autoriser les rôles non ACCOUNTADMIN à effectuer des tâches de partage de données.

  2. Créez un partage à l’aide de CREATE SHARE.

  3. Accordez le privilège USAGE sur la base de données que vous souhaitez partager avec GRANT <privilège> … TO SHARE.

    Note

    Si vous partagez une vue sécurisée faisant référence à des objets contenus dans plusieurs bases de données, vous devez accorder le privilège USAGE uniquement à la base de données dans laquelle la vue sécurisée est créée. Vous ne pouvez accorder USAGE qu’à une seule base de données par partage.

    L’octroi du privilège USAGE à la base de données associe le partage à une base de données, condition obligatoire pour accorder d’autres privilèges au partage.

  4. Accordez le privilège USAGE sur chaque schéma de la base de données que vous souhaitez partager à l’aide de GRANT <privilège> … TO SHARE.

  5. Accordez le privilège REFERENCE_USAGE sur chaque base de données supplémentaire contenant des objets référencés par la vue que vous souhaitez partager à l’aide de GRANT <privilège> … TO SHARE.

  6. Ajoutez la vue au partage en accordant le privilège SELECT sur la vue via GRANT <privilège> … TO SHARE.

  7. Ajoutez un ou plusieurs comptes au partage avec ALTER SHARE.

Le partage peut maintenant être consommé par les comptes indiqués.

Note

Pour partager une vue sécurisée qui référence une UDF dans une autre base de données, vous devez sécuriser l’UDF. Pour plus de détails sur la création d’une UDF, voir Création d’une UDF ou d’une procédure stockée sécurisée.

Exemples

Reportez-vous aux exemples suivants pour créer des vues sécurisées.

Exemple 1 : Créer et partager une vue sécurisée dans une base de données existante

Un fournisseur qui organise les données dans différentes bases de données en fonction des caractéristiques des données et des besoins de l’entreprise souhaite partager une vue sécurisée dans une base de données qui associe les données de la base de données à des objets (par exemple, un schéma, une table, une vue) se trouvant dans d’autres bases.

Relations entre les bases de données, les objets de base de données, les partages et les comptes
  1. Créez la base de données database1 et les données :

    CREATE DATABASE database1;
    CREATE SCHEMA database1.sch;
    CREATE TABLE database1.sch.table1 (id INT);
    CREATE VIEW database1.sch.view1 AS SELECT * FROM database1.sch.table1;
    
    Copy
  2. Créez la base de données database2 et les données :

    CREATE DATABASE database2;
    CREATE SCHEMA database2.sch;
    CREATE TABLE database2.sch.table2 (id INT);
    
    Copy
  3. Créez la base de données database3 et les données :

    CREATE DATABASE database3;
    CREATE SCHEMA database3.sch;
    CREATE TABLE database3.sch.table3 (id INT);
    
    Copy
  4. Créez la vue sécurisée avec les données à partager dans database3 :

    CREATE SECURE VIEW database3.sch.view3 AS
      SELECT view1.id AS View1Id,
             table2.id AS table2id,
             table3.id AS table3id
      FROM database1.sch.view1 view1,
           database2.sch.table2 table2,
           database3.sch.table3 table3;
    
    Copy
  5. Créez le partage et accordez les privilèges nécessaires pour configurer le partage.

    CREATE SHARE share1;
    GRANT USAGE ON DATABASE database3 TO SHARE share1;
    GRANT USAGE ON SCHEMA database3.sch TO SHARE share1;
    
    Copy
  6. Accordez les privilèges requis nécessaires pour ajouter la vue sécurisée view3 au partage.

    Les données référencées dans des bases de données supplémentaires par la vue sécurisée view3 nécessitent l’octroi du privilège REFERENCE_USAGE sur database1 et sur database2 au partage :

    GRANT REFERENCE_USAGE ON DATABASE database1 TO SHARE share1;
    GRANT REFERENCE_USAGE ON DATABASE database2 TO SHARE share1;
    
    GRANT SELECT ON VIEW database3.sch.view3 TO SHARE share1;
    
    Copy

Vous pouvez partager ces données avec des consommateurs d’autres régions en utilisant un groupe de réplication pour répliquer les données sur un compte dans une autre région. Pour obtenir des instructions, voir Exemple 3 : Partager des données provenant de plusieurs bases de données.

Exemple 2 : Créer et partager une vue sécurisée dans une base de données distincte

Un fournisseur stocke les données client dans des bases de données distinctes et ne veut pas créer de nouveaux objets dans ces bases de données. Pour partager des données, le fournisseur crée une nouvelle base de données avec une vue sécurisée. La vue sécurisée référence des objets (schéma, table, vue) dans les bases de données avec les données du client.

Relations entre les bases de données, les objets de base de données, les partages et les comptes

Exemple de code :

  1. Créez la base de données client customer1_db et les données :

    CREATE DATABASE customer1_db;
    CREATE SCHEMA customer1_db.sch;
    CREATE TABLE customer1_db.sch.table1 (id INT);
    CREATE VIEW customer1_db.sch.view1 AS SELECT * FROM customer1_db.sch.table1;
    
    Copy
  2. Créez la base de données client customer2_db et les données :

    CREATE DATABASE customer2_db;
    CREATE SCHEMA customer2_db.sch;
    CREATE TABLE customer2_db.sch.table2 (id INT);
    
    Copy
  3. Créez la nouvelle base de données new_db et le schéma sch :

    CREATE DATABASE new_db;
    CREATE SCHEMA new_db.sch;
    
    Copy
  4. Créez la vue sécurisée dans new_db qui fait référence aux objets dans customer1_db et dans customer2_db :

    CREATE SECURE VIEW new_db.sch.view3 AS
      SELECT view1.id AS view1Id,
             table2.id AS table2ID
      FROM customer1_db.sch.view1 view1,
           customer2_db.sch.table2 table2;
    
    Copy
  5. Créez le partage et accordez les privilèges nécessaires pour configurer le partage :

    CREATE SHARE share1;
    
    GRANT USAGE ON DATABASE new_db TO SHARE share1;
    GRANT USAGE ON SCHEMA new_db.sch TO SHARE share1;
    
    Copy
  6. Accordez les privilèges requis nécessaires pour ajouter la vue sécurisée view3 au partage.

    Les données référencées dans des bases de données supplémentaires par la vue sécurisée view3 nécessitent l’octroi du privilège REFERENCE_USAGE sur customer1_db et sur customer2_db au partage :

    GRANT REFERENCE_USAGE ON DATABASE customer1_db TO SHARE share1;
    GRANT REFERENCE_USAGE ON DATABASE customer2_db TO SHARE share1;
    
    GRANT SELECT ON VIEW new_db.sch.view3 TO SHARE share1;
    
    Copy

Partage de données provenant de plusieurs bases de données avec des consommateurs d’autres régions

Vous pouvez partager les données de plusieurs bases de données avec des comptes consommateurs dans d’autres régions et plateformes Cloud via un groupe de réplication. Incluez le partage et chaque base de données que le partage référence dans le groupe pour répliquer les données vers un compte Snowflake dans une autre région. Vous pouvez ensuite ajouter des comptes consommateurs au partage répliqué. Pour des instructions détaillées, voir Partage sécurisé des données entre les régions et les plateformes Cloud.