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

Wichtig

Die Berechtigung REFERENCE_USAGE kann einer Datenbankrolle nicht erteilt werden, um Objekte aus mehreren Datenbanken in eine Freigabe aufzunehmen. Diese Einschränkung gilt auch für Objekte wie sichere Ansichten, die eine oder mehrere zugrunde liegende Tabellen in einer separaten Datenbank haben.

Um mehrere Datenbanken in eine Freigabe einzubeziehen, müssen Sie der Freigabe direkt Berechtigungen für die Objekte erteilen. Weitere Informationen zu dieser Option finden Sie unter Option 2: Direktes Zuweisen von Berechtigungen zu einer Freigabe.

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-Berechtigung 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 SHARE verfügt, eine Verbindung zu Ihrem Snowflake-Konto her. Weitere Details zur Berechtigung CREATE SHARE 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.

Bemerkung

Um eine sichere Ansicht freizugeben, die auf eine UDF in einer anderen Datenbank verweist, müssen Sie die UDF sicher machen. Weitere Informationen zum Erstellen einer sicheren UDF finden Sie unter Erstellen einer sicheren UDF oder einer sicheren gespeicherten Prozedur.

Beispiele

In den folgenden Beispielen wird das Erstellen von sicheren Ansichten gezeigt.

Beispiel 1: Sichere Ansicht in einer bestehenden Datenbank erstellen und freigeben

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) in anderen Datenbanken verknüpft.

Relationship between databases, database objects, shares, and accounts
  1. Datenbank database1 und Daten erstellen:

    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. Datenbank database2 und Daten erstellen:

    CREATE DATABASE database2;
    CREATE SCHEMA database2.sch;
    CREATE TABLE database2.sch.table2 (id INT);
    
    Copy
  3. Datenbank database3 und Daten erstellen:

    CREATE DATABASE database3;
    CREATE SCHEMA database3.sch;
    CREATE TABLE database3.sch.table3 (id INT);
    
    Copy
  4. Erstellen Sie die sichere Ansicht mit den Daten, die in database3 freigegeben werden sollen:

    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. Erstellen Sie die Freigabe, und erteilen Sie alle erforderlichen Berechtigungen.

    Die Daten, auf die in zusätzlichen Datenbanken durch die sichere Ansicht view3 verwiesen wird, erfordert das Erteilen der REFERENCE_USAGE-Berechtigung für database1 und database2 für die Freigabe:

    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

Sie können diese Daten für Verbraucher in anderen Regionen freigeben, indem Sie eine Replikationsgruppe verwenden, um Daten auf ein Konto in einer anderen Region zu replizieren. Eine Anleitung dazu finden Sie unter Beispiel 3: Daten aus mehreren Datenbanken freigeben.

Beispiel 2: Sichere Ansicht in einer separaten Datenbank erstellen und freigeben

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:

  1. Erstellen Sie die Kundendatenbank customer1_db und die Daten:

    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. Erstellen Sie die Kundendatenbank customer2_db und die Daten:

    CREATE DATABASE customer2_db;
    CREATE SCHEMA customer2_db.sch;
    CREATE TABLE customer2_db.sch.table2 (id INT);
    
    Copy
  3. Erstellen Sie die neue Datenbank new_db und das Schema sch:

    CREATE DATABASE new_db;
    CREATE SCHEMA new_db.sch;
    
    Copy
  4. Erstellen Sie die sichere Ansicht in new_db, die auf Objekte in customer1_db und customer2_db verweist:

    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. Erstellen Sie die Freigabe, und erteilen Sie alle erforderlichen Berechtigungen.

    Die Daten, auf die in zusätzlichen Datenbanken durch die sichere Ansicht view3 verwiesen wird, erfordert das Erteilen der REFERENCE_USAGE-Berechtigung für customer1_db und customer2_db für die Freigabe:

    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

Freigeben von Daten aus mehreren Datenbanken mit Verbrauchern in anderen Regionen

Sie können Daten aus mehreren Datenbanken für Verbraucherkonten in anderen Regionen und auf Cloudplattformen freigeben, indem Sie eine Replikationsgruppe verwenden. Fügen Sie die Freigabe und jede Datenbank, auf die die Freigabe verweist, in die Gruppe ein, um Daten auf ein Snowflake-Konto in einer anderen Region zu replizieren. Anschließend können Sie der replizierten Freigabe Verbraucherkonten hinzufügen. Detaillierte Anweisungen finden Sie unter Sicheres Data Sharing über Regionen und Cloudplattformen hinweg.