Erste Schritte mit Secure Data Sharing¶
Secure Data Sharing ist ein extrem leistungsstarkes und einfach zu verwendendes Feature. Ihr Einstieg als Datenanbieter ist in wenigen Schritten möglich.
Unter diesem Thema werden die Aufgaben beschrieben, die erforderlich sind, um Datenbanken und deren Objekte über eine Freigabe für ein oder mehrere Konten freizugeben. Um Verbrauchern eine Freigabe bereitzustellen, können Sie direkte Freigaben oder Freigabeangebote verwenden.
Sie können eine Freigabe in ein Angebot einbinden oder eine direkte Freigabe mit aktiven Verbrauchern in ein Freigabeangebot umwandeln. Eine Anleitung dazu finden Sie unter Direkte Freigabe in Freigabeangebot umwandeln.
Unter diesem Thema:
Auswählen der Freigabemethode für Datenbankobjekte¶
Bevor Sie fortfahren, bestimmen Sie, welche der folgenden Optionen zum Hinzufügen von Objekten zu einer Freigabe Ihren Anforderungen am besten entspricht:
Option 1: Datenbankrolle einer Freigabe zuweisen:
Segmentieren Sie die sicherungsfähigen Objekte einer Freigabe, indem Sie mehrere Datenbankrollen in der Datenbank einer Freigabe erstellen. Jeder Datenbankrolle werden Berechtigungen für eine Teilmenge der Objekte in der Datenbank erteilt. Weisen Sie dann jede Datenbankrolle der Freigabe zu.
Nach dem Erstellen einer Datenbank aus einer Freigabe, die Datenbankrollen enthält, weisen die Datenverbraucher diese Datenbankrollen einer oder mehreren Kontorollen des eigenen Kontos zu.
Wenn keine Datenbankrollen verwendet werden, erteilen die Kontoadministratoren der Datenverbraucherkonten den Rollen nur die Berechtigung IMPORTED PRIVILEGES, wodurch ihre Benutzer Zugriff auf alle Datenbanken und Datenbankobjekte (Tabellen, sichere Ansichten usw.) einer Freigabe erhalten. Es gibt keine Option, bei der verschiedenen Benutzergruppen eines Datenverbraucherkontos der Zugriff auf Teilmengen der freigegebenen Objekte gestattet wird. Bei diesem Alles-oder-Nichts-Ansatz müssen Sie mehrere Freigaben erstellen, um den Zugriff auf verschiedene Objekte in derselben Datenbank zu ermöglichen.
Bemerkung
Wenn Sie planen, Daten aus mehreren Datenbanken in eine einzige Freigabe aufzunehmen, können Sie diese Option nicht verwenden, da einer Datenbankrolle die REFERENCE_USAGE-Berechtigung nicht zugewiesen werden kann. Hinweise zum Freigeben von Daten aus mehreren Datenbanken finden Sie unter Freigeben von Daten aus mehreren Datenbanken.
Alternativ können Sie eine Freigabe erstellen, die Datenbankrollen einer Freigabe zuweist (Option 1), oder Sie weisen derselben Freigabe Berechtigungen für Objekte direkt zu, ohne einer Datenbankrolle Berechtigungen für diese Objekte zuweisen zu müssen (Option 2). Datenverbraucher, die Datenbanken aus der Freigabe erstellen, können auf die der Freigabe zugewiesenen Objekte direkt zugreifen, indem sie lokalen Rollen die Berechtigung IMPORTED PRIVILEGES für die Datenbank zuweisen.
Tipp
Eine Datenbankrolle für eine freigegebene Datenbank unterstützt keine zukünftigen Berechtigungszuweisungen zu Objekten. Weitere Details dazu finden Sie unter GRANT DATABASE ROLE … TO SHARE.
Option 2: Berechtigungen für Objekte direkt einer Freigabe zuweisen:
Weist einer Freigabe direkt Berechtigungen für bestimmte Objekte der Datenbank zu. Mit dieser Option können Sie Daten aus mehreren Datenbanken einer Freigabe einbeziehen, sofern diese Datenbanken zu demselben Konto gehören. Hinweise zum Freigeben von Daten aus mehreren Datenbanken finden Sie unter Freigeben von Daten aus mehreren Datenbanken.
Kontoadministratoren von Datenverbraucherkonten weisen einer oder mehreren Rollen die Berechtigung IMPORTED PRIVILEGES für freigegebene Datenbanken zu, um ihren Benutzern den Zugriff auf die Datenbanken und die Datenbankobjekte (Tabellen, sichere Ansichten usw.) einer Freigabe zu ermöglichen.
Beachten Sie, dass diese Option keine Unterstützung für das rollenbasierte Segmentieren von Datenbankobjekten einer Freigabe bietet. Für eine Zugriffssteuerung auf dieser Ebene nutzen Sie Option 1.
Option 1: Zuweisen von Datenbankrollen zu einer Freigabe¶
Dieser Abschnitt enthält eine Anleitung für Datenanbieter, um den Zugriff auf Datenbanken und Datenbankobjekte einer Freigabe mithilfe von Datenbankrollen einzuschränken.
Bemerkung
Um die unter diesem Thema beschriebenen Aufgaben ausführen zu können, muss Ihre Rolle über die globalen Berechtigungen CREATE DATABASE und CREATE SHARE verfügen.
In dem erweiterten Beispiel in diesem Abschnitt gibt ein Datenanbieter die folgenden Objekte für Datenverbraucher frei:
Datenbanken |
|
|
---|---|---|
Schemas |
|
|
Sichere Ansichten |
Das Resultset dieser Ansicht enthält Datensätze aus der Tabelle |
Das Resultset dieser Ansicht enthält Datensätze aus den Tabellen |
Der Datenanbieter erstellt zwei Datenbankrollen in der Datenbank d1
, um den Zugriff auf diese Objekte zu steuern: d1.r1
und d1.r2
.
Das folgende Diagramm zeigt die Beziehungen zwischen diesen Objekten und gibt die Berechtigungen an, die den Datenbankrollen erteilt werden:
Weitere Informationen zu den Berechtigungen finden Sie unter Zugriffssteuerungsrechte.
Schritt 1: Datenbankrollen erstellen¶
Erstellen Sie eine neue Datenbankrolle, oder ersetzen Sie eine vorhandene Datenbankrolle mit CREATE DATABASE ROLE.
Erstellen Sie zum Beispiel die Datenbankrollen d1.r1
und d1.r2
mit vollqualifizierten Bezeichnern:
CREATE DATABASE ROLE d1.r1;
CREATE DATABASE ROLE d1.r2;
Alternativ dazu können Sie die gewünschte Datenbank als aktuelle Datenbank in der Sitzung festlegen und dann die Datenbankrollen erstellen:
USE DATABASE d1;
CREATE DATABASE ROLE r1;
CREATE DATABASE ROLE r2;
Schritt 2: Datenbankrollen Berechtigungen für Objekte zuweisen¶
Weisen Sie jeder Datenbankrolle mit GRANT <Berechtigungen> die Berechtigungen für eine einzelne Datenbank und für eine Teilmenge der Objekte in der Datenbank zu. Erteilen Sie nur Berechtigungen für Objekte, auf die die Datenbankrolle Zugriff gewähren soll.
Geben Sie entweder den vollqualifizierten Namen einer Datenbankrolle an, oder legen Sie die Datenbank als aktive Datenbank einer Sitzung fest und geben Sie dann den relativen Namen an.
Bemerkung
Um die unter diesem Thema beschriebenen Aufgaben auszuführen, müssen Sie die Rolle ACCOUNTADMIN oder eine Rolle, die über die erforderlichen Berechtigungen verfügt, verwenden. Weitere Informationen, einschließlich weiterer Szenarios für das Data Sharing, finden Sie unter Verwenden von Freigaben.
Die einer Datenbankrolle zugewiesenen Berechtigungen beschränken sich auf die USAGE-Berechtigung für die Datenbank und das Schema beschränkt, die die Datenbankrolle enthalten, sowie auf Berechtigungen für andere Objekte in derselben Datenbank. Beachten Sie insbesondere, dass die REFERENCE_USAGE-Berechtigung einer Datenbankrolle nicht erteilt werden kann, um Objekte aus mehreren Datenbanken in eine Freigabe aufzunehmen.
In Fortsetzung des erweiterten Beispiels in dieser Anleitung werden den Datenbankrollen die folgenden Berechtigungen erteilt:
Datenbankrollen |
Berechtigung |
Objekt |
---|---|---|
|
USAGE |
Datenbank |
USAGE |
Schema |
|
SELECT |
Sichere Ansicht |
|
|
USAGE |
Datenbank |
USAGE |
Schema |
|
SELECT |
Sichere Ansicht |
Mit den folgenden SQL-Anweisungen werden die Berechtigungen der Datenbankrolle d1.r1
zugewiesen:
GRANT USAGE ON SCHEMA d1.s1 TO DATABASE ROLE d1.r1;
GRANT SELECT ON VIEW d1.s1.v1 TO DATABASE ROLE d1.r1;
Mit den folgenden SQL-Anweisungen werden die Berechtigungen der Datenbankrolle d1.r2
zugewiesen:
GRANT USAGE ON SCHEMA d1.s1 TO DATABASE ROLE d1.r2;
GRANT SELECT ON VIEW d1.s1.v2 TO DATABASE ROLE d1.r2;
Beachten Sie, dass das Erteilen der USAGE-Berechtigung für die übergeordnete Datenbank nicht erforderlich ist. Diese Berechtigung wird implizit zugewiesen, wenn eine Datenbankrolle erstellt wird.
Um alle einer Datenbankrolle erteilten Berechtigungen anzuzeigen, führen Sie SHOW GRANTS TO DATABASE ROLE unter Verwendung vollqualifizierter Bezeichner aus:
SHOW GRANTS TO DATABASE ROLE d1.r1;
SHOW GRANTS TO DATABASE ROLE d1.r2;
Alternativ können Sie auch die gewünschte Datenbank als aktuelle Datenbank der Sitzung festlegen und dann den Befehl ausführen:
USE DATABASE d1;
SHOW GRANTS TO DATABASE ROLE r1;
SHOW GRANTS TO DATABASE ROLE r2;
Schritt 3: Freigabe erstellen¶
Erstellen Sie eine Freigabe mit CREATE SHARE. Die Freigabe ist in dieser Phase des Prozesses ein leerer Container.
Erstellen Sie zum Beispiel eine neue Freigabe mit dem Namen share1
:
CREATE SHARE share1;
Schritt 4: Datenbank durch Erteilen der USAGE-Berechtigung zur Freigabe hinzufügen¶
Derzeit ist es erforderlich, die USAGE-Berechtigung einer Datenbank zu erteilen, damit sie in eine Freigabe aufgenommen wird.
Erteilen Sie beispielsweise der Freigabe share1
die USAGE-Berechtigung für die Datenbank d1
:
GRANT USAGE ON DATABASE d1 TO SHARE share1;
Schritt 5: Objekte durch Zuweisen von Datenbankrollen zur Freigabe hinzufügen¶
Fügen Sie Datenbanken und Datenbankobjekte zu einer Freigabe hinzu, indem Sie der Freigabe mit GRANT DATABASE ROLE … TO SHARE Datenbankrollen zuweisen.
Weisen Sie beispielsweise der Freigabe share1
die Datenbankrollen d1.r1
und d1.r2
zu.
GRANT DATABASE ROLE d1.r1 TO SHARE share1;
GRANT DATABASE ROLE d1.r2 TO SHARE share1;
Schritt 6: Datenbankobjekte für ein oder mehrere Datenverbraucherkonten freigeben¶
Ändern Sie die Freigabe mit ALTER SHARE … ADD ACCOUNTS, und fügen Sie Datenbank-Verbraucherkonten hinzu, für die Sie die Datenbankobjekte freigeben möchten.
Im folgende Beispiel werden die Konten consumer1
und consumer2
der Organisation org1
zur Freigabe share1
hinzugefügt:
ALTER SHARE share1 ADD ACCOUNTS = org1.consumer1,org1.consumer2;
Verwalten von Datenbankrollen¶
In diesem Abschnitt wird das Verwalten von Datenbankrollen beschrieben, die Freigaben zugewiesen sind.
Datenanbieter: Umbenennen von Datenbankrollen der freigegebenen Datenbank¶
Datenbankrollen werden mit einer ALTER DATABASEROLE … RENAME TO-Anweisung umbenannt.
Beispielsweise wir die Datenbankrolle d1.r1
in d1.r3
wie folgt umbenannt:
ALTER DATABASE ROLE d1.r1 RENAME TO d1.r3;
Alle Berechtigungen, die d1.r1
erteilt wurden, bleiben nach dem Umbenennen der Datenbankrolle erhalten.
Benachrichtigen Sie alle Datenverbraucher einer Freigabe, dass sich der Name der Datenbankrolle geändert hat.
Beachten Sie, dass das Verschieben einer Datenbankrolle in eine andere Datenbank mit der RENAME TO-Klausel nicht zulässig ist. Beispiel:
ALTER DATABASE ROLE d1.r1 RENAME TO d2.r1;
Datenanbieter: Löschen von Datenbankrollen der freigegebenen Datenbank¶
Datenbankrollen werden mit DROP DATABASE ROLE gelöscht.
So löschen Sie beispielsweise die Datenbankrolle d1.r2
:
DROP DATABASE ROLE d1.r2;
Benachrichtigen Sie alle Datenverbraucher der Freigabe, die diese Datenbankrolle enthält. Der Zugriff auf alle Objekte, die der Datenbankrolle zugewiesen wurden, wird entzogen.
Datenanbieter: Erstellen neuer Datenbankrollen für die freigegebene Datenbank¶
Neue Datenbankrollen werden mit CREATE DATABASE ROLE erstellt. Weitere Informationen dazu finden Sie unter Schritt 1: Datenbankrollen erstellen (unter diesem Thema). Erteilen Sie einer Datenbankrolle Berechtigungen für Datenbankobjekte, und weisen Sie dann die Datenbankrolle der Freigabe zu.
Benachrichtigen Sie alle Datenverbraucher der Freigabe, die diese neue Datenbankrolle enthält. Die Verbraucher müssen die neue Datenbankrolle ihren eigenen Kontorollen zuweisen, damit diese Rollen auf die mit der Datenbankrolle verbundenen Objekte zugreifen können.
Option 2: Direktes Zuweisen von Berechtigungen zu einer Freigabe¶
Dieser Abschnitt enthält eine Anleitung für Datenanbieter, um Verbrauchern den Zugriff auf alle Datenbanken und Datenbankobjekte in einer Freigabe zu ermöglichen, indem nur eine einzige Berechtigung für freigegebene Datenbanken erteilt wird.
Schritt 1: Freigabe erstellen¶
Verwenden Sie CREATE SHARE, um eine Freigabe zu erstellen. In diesem Schritt ist die Freigabe lediglich ein Container, der darauf wartet, dass Objekte und Konten hinzugefügt werden.
Schritt 2: Objekte durch Erteilen von Berechtigungen zur Freigabe hinzufügen¶
Verwenden Sie GRANT <Berechtigung> … TO SHARE, um der Freigabe die folgenden Objektberechtigungen zu erteilen:
USAGE-Berechtigung für die Datenbank, die Sie freigeben möchten.
USAGE-Berechtigung für jedes Datenbankschema, das die Objekte enthält, die Sie freigeben möchten.
SELECT-Berechtigung zum Freigeben bestimmter Objekte in jedem freigegebenen Schema:
Tabellen
Externe Tabellen
Sichere Ansichten
Sichere materialisierte Ansichten
Sichere UDFs
Wichtig
Wenn Sie Daten sicher für Datenverbraucher in verschiedenen Regionen oder auf verschiedenen Cloudplattformen freigeben möchten, beachten Sie, dass die Replikation einer Primärdatenbank derzeit blockiert ist, wenn eine oder mehrere externe Tabellen in der Datenbank vorhanden sind.
Bemerkung
Es wird nicht empfohlen, sichere Ansichten von Streams zu erstellen und diese Ansichten dann für Verbraucher freizugeben. Erlauben Sie stattdessen den Verbrauchern, eigene Streams auf den von Ihnen freigegebenen Tabellen und sicheren Ansichten zu erstellen. Weitere Informationen dazu finden Sie unter Streams auf freigegebenen Objekten.
Verwenden Sie optional SHOW GRANTS, um die der Freigabe erteilten Objektberechtigungen anzuzeigen.
Tipp
Führen Sie an diesem Punkt mindestens diese Validierung der Freigabe durch, da die Freigabe nach Abschluss des nächsten Schrittes für alle Konten, die der Freigabe hinzugefügt wurden, sichtbar ist.
Um eine umfassendere Validierung der Freigabe vorzunehmen, können Sie ein Verbraucherkonto in Ihrem Konto simulieren. Weitere Informationen dazu finden Sie unter Verwenden von sicheren Objekten zur Steuerung des Datenzugriffs.
Schritt 3: Ein oder mehrere Konten zur Freigabe hinzufügen¶
Verwenden Sie ALTER SHARE, um ein oder mehrere Konten zur Freigabe hinzuzufügen. Um die der Freigabe hinzugefügten Konten zu überprüfen, können Sie SHOW GRANTS verwenden.
Die Freigabe kann nun von den angegebenen Konten genutzt werden. Eine detaillierte Anleitung zum Ausführen dieser und anderer Datenanbieteraufgaben finden Sie unter Verwenden von Freigaben.
Beispiel¶
Das folgende Beispiel veranschaulicht den gesamten oben beschriebenen Anbieterprozess.
Beachten Sie, dass dieses Beispiel von folgenden Voraussetzungen ausgeht:
Es existiert eine Datenbank namens
sales_db
mit einem Schemaaggregates_eula
und einer Tabelleaggregate_1
.Datenbank, Schema und Tabelle werden für zwei Konten mit dem Namen
xy12345
undyz23456
freigegeben.USE ROLE accountadmin; CREATE SHARE sales_s; GRANT USAGE ON DATABASE sales_db TO SHARE sales_s; GRANT USAGE ON SCHEMA sales_db.aggregates_eula TO SHARE sales_s; GRANT SELECT ON TABLE sales_db.aggregates_eula.aggregate_1 TO SHARE sales_s; SHOW GRANTS TO SHARE sales_s; ALTER SHARE sales_s ADD ACCOUNTS=xy12345, yz23456; SHOW GRANTS OF SHARE sales_s;Copy