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

Les fournisseurs de données Snowflake peuvent partager des données résidant dans différentes bases de données à l’aide de 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 à partir d’une ou de plusieurs bases de données, à condition que ces bases de données appartiennent au même compte.

Le processus de 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 résidant 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 où la vue sécurisée est créée.

Important

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

Pour inclure plusieurs bases de données dans un partage, vous devez accorder des privilèges sur les objets directement au partage. Pour plus d’informations sur cette option, voir Option 2 : Accorder des privilèges directement à un partage.

Vous devez accorder le privilège séparément sur chaque base de données référencée dans une vue avant d’ajouter la vue à un partage (c’est-à-dire accorder le privilège SELECT sur la vue donnant accès à 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 appartenant à plusieurs bases de données, vous devez accorder le privilège USAGE uniquement à la base de données où la vue sécurisée est créée. Vous ne pouvez accorder USAGE qu’à une seule base de données par 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. Accordez le privilège SELECT sur la vue que vous souhaitez partager à l’aide de 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.

Relationship between databases, database objects, shares, and accounts
  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 tous les privilèges nécessaires.

    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 :

    CREATE SHARE share1;
    GRANT USAGE ON DATABASE database3 TO SHARE share1;
    GRANT USAGE ON SCHEMA database3.sch TO SHARE share1;
    
    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.

Relationship between databases, database objects, shares, and accounts

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 tous les privilèges nécessaires.

    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 :

    CREATE SHARE share1;
    
    GRANT USAGE ON DATABASE new_db TO SHARE share1;
    GRANT USAGE ON SCHEMA new_db.sch TO SHARE share1;
    
    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.