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.

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

    Wählen Sie Option 2, wenn Sie Objekte aus mehreren Datenbanken in eine einzige Freigabe aufnehmen möchten. Die Berechtigung REFERENCE_USAGE kann einer Datenbankrolle nicht erteilt werden, um Objekte aus mehreren Datenbanken in eine Freigabe aufzunehmen. Beachten Sie, dass diese Einschränkung auch für Objekte wie sichere Ansichten gilt, die eine oder mehrere zugrunde liegende Tabellen in einer separaten Datenbank haben.

    Alternativ können Sie eine Freigabe erstellen, die die beiden Optionen 1 und 2 kombiniert. Das heißt, Sie können einer Freigabe Datenbankrollen zuweisen (Option 1), Sie können aber derselben Freigabe auch Berechtigungen für Objekte direkt zuweisen, ohne einer Datenbankrolle Berechtigungen für diese Objekte zuweisen zu müssen (Option 2). Datenverbraucher, die Datenbanken aus der Freigabe erstellen, können auf diese Objekte zugreifen, indem sie lokalen Rollen die Berechtigung IMPORTED PRIVILEGES für die Datenbank erteilen.

    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 Objekte (z. B. Tabellen und sichere Ansichten) aus mehreren Datenbanken einer Freigabe einbeziehen, sofern diese Datenbanken demselben Konto angehören.

    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

d1

Schemas

d1.s1

Sichere Ansichten

d1.s1.v1

Das Resultset dieser Ansicht enthält Datensätze aus der Tabelle d1.s1.t1.

d1.s1.v2

Das Resultset dieser Ansicht enthält Datensätze aus den Tabellen d1.s1.t2 und d1.s1.t3.

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:

Data sharing with database roles example

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;
Copy

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;
Copy

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

d1.r1

USAGE

Datenbank d1

USAGE

Schema d1.s1

SELECT

Sichere Ansicht d1.s1.v1

d1.r2

USAGE

Datenbank d1

USAGE

Schema d1.s1

SELECT

Sichere Ansicht d1.s1.v2

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;
Copy

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;
Copy

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;
Copy

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;
Copy

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;
Copy

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;
Copy

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;
Copy

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;
Copy

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;
Copy

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;
Copy

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;
Copy

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 Schema aggregates_eula und einer Tabelle aggregate_1.

  • Datenbank, Schema und Tabelle werden für zwei Konten mit dem Namen xy12345 und yz23456 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