Freigeben von Daten aus mehreren Datenbanken

Snowflake-Datenanbieter können Daten, die sich in verschiedenen Datenbanken befinden, mithilfe sicherer Ansichten freigeben. Eine sichere Ansicht kann auf Objekte wie Schemas, Tabellen und andere Ansichten aus einer oder mehreren Datenbanken verweisen, sofern diese Datenbanken demselben Konto angehören.

Die Freigabe einer sicheren Ansicht, die auf Objekte aus verschiedenen Datenbanken verweist, unterscheidet sich geringfügig von der Freigabe von Daten in einer einzelnen Datenbank.

Sie müssen nicht nur alle Standardschritte zum Freigeben von Daten ausführen, sondern auch die Berechtigung REFERENCE_USAGE für jede Datenbank erteilen, auf die von einer sicheren Ansicht verwiesen wird, die Sie freigeben möchten. Sie müssen REFERENCE_USAGE jedoch nicht für die Datenbank gewähren, in der die sichere Ansicht erstellt wird.

Sie müssen die Berechtigung für jede Datenbank, auf die in einer Ansicht verwiesen wird, separat erteilen, bevor Sie die Ansicht einer Freigabe hinzufügen (d. h. SELECT für die freizugebende Ansicht erteilen).

So geben Sie eine sichere Ansicht frei, die auf Objekte aus mehreren Datenbanken verweist:

  1. Stellen Sie als Benutzer mit der Rolle ACCOUNTADMIN oder einer Rolle, die über die globale Berechtigung CREATE SHARES verfügt, eine Verbindung zu Ihrem Snowflake-Konto her. Weitere Details zur Berechtigung CREATE SHARES finden Sie unter Aktivieren von Nicht-ACCOUNTADMIN-Rollen zur Ausführung von Data Sharing-Aufgaben.

  2. Erstellen Sie eine Freigabe mit CREATE SHARE.

  3. Erteilen Sie mit GRANT <Berechtigung> … TO SHARE die USAGE-Berechtigung für die Datenbank, die Sie freigeben möchten.

    Bemerkung

    Wenn Sie eine sichere Ansicht freigeben, die auf Objekte verweist, die zu mehreren Datenbanken gehören, müssen Sie die Berechtigung USAGE nur der Datenbank erteilen, in der die sichere Ansicht erstellt wird. Sie können nur einer Datenbank pro Freigabe USAGE gewähren.

  4. Gewähren Sie die Berechtigung USAGE für jedes Schema in der Datenbank, das Sie mit GRANT <Berechtigung> … TO SHARE freigeben möchten.

  5. Gewähren Sie die Berechtigung REFERENCE_USAGE für jede zusätzliche Datenbank, die Objekte enthält, auf die in der Ansicht verwiesen wird, die Sie mithilfe von GRANT <Berechtigung> … TO SHARE freigeben möchten.

  6. Erteilen Sie die Berechtigung SELECT für die Ansicht, die Sie mit GRANT <Berechtigung> … TO SHARE freigeben möchten.

  7. Fügen Sie mit ALTER SHARE ein oder mehrere Verbraucherkonten zur Freigabe hinzu.

Die Freigabe kann nun von den angegebenen Konten genutzt werden.

Beispiele

Beispiel 1

Ein Anbieter, der Daten basierend auf den Merkmalen von Daten und Geschäftsanforderungen in verschiedenen Datenbanken organisiert, möchte eine sichere Ansicht in einer Datenbank freigeben, die Daten in dieser Datenbank mit Objekten (z. B. Schema, Tabelle, Ansicht) aus anderen Datenbanken verknüpft.

Relationship between databases, database objects, shares, and accounts

Beispielcode:

-- Sample database database1
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;

-- Sample database database2
CREATE DATABASE database2;
CREATE SCHEMA database2.sch;
CREATE TABLE database2.sch.table2 (id int);

-- Sample database to be shared
CREATE DATABASE database3;
CREATE SCHEMA database3.sch;

-- Create a table in the database to be shared.
CREATE TABLE database3.sch.table3 (id int);

-- Sample view to be shared.
-- This will require granting REFERENCE_USAGE on database1 and database2
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;

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;

Beispiel 2

Ein Anbieter speichert Kundendaten in separaten Datenbanken und möchte in diesen Datenbanken keine neuen Objekte erstellen. Zur Freigabe von Daten erstellt der Anbieter eine neue Datenbank mit einer sicheren Ansicht. Die sichere Ansicht verweist auf Objekte (Schema, Tabelle, Ansicht) in den Datenbanken mit Kundendaten.

Relationship between databases, database objects, shares, and accounts

Beispielcode:

-- Sample database customer1DB
CREATE DATABASE customer1DB;
CREATE SCHEMA customer1DB.sch;
CREATE TABLE customer1DB.sch.table1 (id int);
CREATE VIEW customer1DB.sch.view1 AS SELECT * FROM customer1DB.sch.table1;

-- Sample database customer2DB
CREATE DATABASE customer2DB;
CREATE SCHEMA customer2DB.sch;
CREATE TABLE customer2DB.sch.table2 (id int);

-- Sample database to be shared
CREATE DATABASE newDB;
CREATE SCHEMA newDB.sch;
-- Sample view to be shared
-- This will require granting REFERENCE_USAGE on customer1DB and customer2DB
CREATE SECURE VIEW newDB.sch.view3 AS
SELECT view1.id AS view1Id, table2.id AS table2ID
FROM customer1DB.sch.view1 view1,
   customer2DB.sch.table2 table2;

CREATE SHARE share1;
GRANT USAGE ON DATABASE newDB TO SHARE share1;
GRANT USAGE ON SCHEMA newDB.sch TO SHARE share1;

GRANT REFERENCE_USAGE ON DATABASE customer1DB TO SHARE share1;
GRANT REFERENCE_USAGE ON DATABASE customer2DB TO SHARE share1;

GRANT SELECT ON VIEW newDB.sch.view3 TO SHARE share1;