Freigeben von Daten aus mehreren Datenbanken

Snowflake-Datenanbieter können Daten aus mehreren Datenbanken freigeben, indem sie sichere Ansichten verwenden. Eine sichere Ansicht kann auf Objekte wie Schemas, Tabellen und andere Ansichten, die in einer oder mehreren Datenbanken enthalten sind, verweisen, sofern diese Datenbanken zu demselben Konto gehören.

Das Freigeben einer sicheren Ansicht, die auf Objekte aus verschiedenen Datenbanken verweist, unterscheidet sich vom Freigeben von Daten, die in nur einer Datenbank enthalten sind.

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

Bemerkung

Sie können keine Datenbankrollen verwenden, um Daten aus mehreren Datenbanken freizugeben. Sie können einer Datenbankrolle nicht die Berechtigung REFERENCE_USAGE erteilen, und Sie können keine Datenbankrolle verwenden, um einer Freigabe eine sichere Ansicht zuzuweisen, die Objekte aus mehreren Datenbanken referenziert.

Sie müssen die Berechtigung REFERENCE_USAGE für jede Datenbank, die in einer sicheren Ansicht referenziert wird, separat erteilen, bevor Sie die sichere Ansicht einer Freigabe zuweisen.

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 Objekte referenziert, die in verschiedenen Datenbanken enthalten sind, müssen Sie nur der Datenbank, in der die sichere Ansicht erstellt wird, die USAGE-Berechtigung erteilen. Sie können nur einer Datenbank pro Freigabe die USAGE-Berechtigung erteilen.

    Durch das Erteilen der USAGE-Berechtigung für die Datenbank wird die Freigabe mit einer Datenbank verknüpft, die erforderlich ist, um der Freigabe andere Berechtigungen zuzuweisen.

  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. Fügen Sie die Ansicht zur Freigabe hinzu, indem Sie mit GRANT <Berechtigung> … TO SHARE die SELECT-Berechtigung für die Ansicht erteilen.

  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.

Beziehung zwischen Datenbanken, Datenbankobjekten, Freigaben und Konten
  1. Erstellen Sie Datenbank database1 und Daten:

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

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

    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 die erforderlichen Berechtigungen, um die Freigabe einzurichten:

    CREATE SHARE share1;
    GRANT USAGE ON DATABASE database3 TO SHARE share1;
    GRANT USAGE ON SCHEMA database3.sch TO SHARE share1;
    
    Copy
  6. Erteilen Sie die Berechtigungen, die erforderlich sind, um die sichere Ansicht view3 zur Freigabe hinzuzufügen.

    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:

    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.

Beziehung zwischen Datenbanken, Datenbankobjekten, Freigaben und Konten

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 die erforderlichen Berechtigungen, um die Freigabe einzurichten:

    CREATE SHARE share1;
    
    GRANT USAGE ON DATABASE new_db TO SHARE share1;
    GRANT USAGE ON SCHEMA new_db.sch TO SHARE share1;
    
    Copy
  6. Erteilen Sie die Berechtigungen, die erforderlich sind, um die sichere Ansicht view3 zur Freigabe hinzuzufügen.

    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:

    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.