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 :
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.
Créez un partage à l’aide de CREATE SHARE.
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.
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.
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.
Ajoutez la vue au partage en accordant le privilège SELECT sur la vue via GRANT <privilège> … TO SHARE.
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.
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;
CopyCré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);
CopyCré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);
CopyCré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;
CopyCré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;
CopyAccordez 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 surdatabase1
et surdatabase2
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.
Exemple de code :
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;
CopyCré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);
CopyCréez la nouvelle base de données
new_db
et le schémasch
:CREATE DATABASE new_db; CREATE SCHEMA new_db.sch;
CopyCréez la vue sécurisée dans
new_db
qui fait référence aux objets danscustomer1_db
et danscustomer2_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;
CopyCré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;
CopyAccordez 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 surcustomer1_db
et surcustomer2_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.