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:
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.
Erstellen Sie eine Freigabe mit CREATE SHARE.
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.
Gewähren Sie die Berechtigung USAGE für jedes Schema in der Datenbank, das Sie mit GRANT <Berechtigung> … TO SHARE freigeben möchten.
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.
Fügen Sie die Ansicht zur Freigabe hinzu, indem Sie mit GRANT <Berechtigung> … TO SHARE die SELECT-Berechtigung für die Ansicht erteilen.
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.
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;
CopyErstellen Sie Datenbank
database2
und Daten:CREATE DATABASE database2; CREATE SCHEMA database2.sch; CREATE TABLE database2.sch.table2 (id INT);
CopyErstellen Sie Datenbank
database3
und Daten:CREATE DATABASE database3; CREATE SCHEMA database3.sch; CREATE TABLE database3.sch.table3 (id INT);
CopyErstellen 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;
CopyErstellen 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;
CopyErteilen 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ürdatabase1
unddatabase2
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.
Beispielcode:
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;
CopyErstellen 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);
CopyErstellen Sie die neue Datenbank
new_db
und das Schemasch
:CREATE DATABASE new_db; CREATE SCHEMA new_db.sch;
CopyErstellen Sie die sichere Ansicht in
new_db
, die auf Objekte incustomer1_db
undcustomer2_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;
CopyErstellen 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;
CopyErteilen 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ürcustomer1_db
undcustomer2_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.