- Verbinden mit Snowflake
- Laden von Daten in Snowflake
- Entladen von Daten aus Snowflake
- Verwenden von Snowflake
- Sicheres Freigeben von Daten in Snowflake
- Einführung in Secure Data Sharing
- Übersicht über Produktangebote für Secure Data Sharing
- Erteilen von Berechtigungen für andere Rollen
- Verwenden von freigegebenen Daten
- Sichere direkte Datenfreigaben
- Datenanbieter
- Datenverbraucher
- Snowflake Marketplace
- Data Exchange
- Verwalten Ihrer Snowflake-Organisation
- Verwalten Ihres Snowflake-Kontos
- Verwalten der Sicherheit in Snowflake
- Verwalten von Governance in Snowflake
- Verwalten der Kosten in Snowflake
- Dokumentation »
- Sicheres Freigeben von Daten in Snowflake »
- Sichere direkte Datenfreigaben »
- Datenverbraucher
Datenverbraucher¶
Unter diesem Thema wird die Erstellung von Datenbanken aus den von Datenanbietern zur Verfügung gestellt Freigaben sowie die anschließende Verwendung der Datenbanken für Abfragen und andere Operationen beschrieben.
Zur Ausführung dieser Aufgaben müssen Sie die Rolle ACCOUNTADMIN (oder eine Rolle, der die globale Berechtigung IMPORT SHARES erteilt wurde) verwenden. Weitere Details zur Berechtigung IMPORT SHARES finden Sie unter Aktivieren von Nicht-ACCOUNTADMIN-Rollen zur Ausführung von Data Sharing-Aufgaben.
Bemerkung
Die unter diesem Thema beschriebenen Aufgaben gelten nicht für Konten mit Leseberechtigung. Wenn Sie zur Nutzung von freigegebenen Daten ein Konto mit Leseberechtigung verwenden, müssen Sie keine der Aufgaben ausführen, da diese bereits von einem Administrator des Anbieterkontos erledigt wurden.
Unter diesem Thema:
Allgemeine Beschränkungen für freigegebene Datenbanken¶
Freigegebene Datenbanken unterliegen für Verbraucher den folgenden Einschränkungen:
Freigegebene Datenbanken sind schreibgeschützt. Benutzer mit einem Verbraucherkonto können Daten anzeigen/abfragen, aber keine Daten einfügen, aktualisieren oder Objekte in der Datenbank erstellen.
Die folgenden Aktionen werden nicht unterstützt:
Erstellen eines Klons einer freigegebenen Datenbank oder von Schemas/Tabellen in der Datenbank.
Time Travel für eine freigegebene Datenbank oder von Schemas/Tabellen in der Datenbank.
Bearbeiten der Kommentare einer freigegebenen Datenbank.
Freigegebene Datenbanken und alle Objekte in der Datenbank können nicht weitergeleitet (d. h. mit anderen Konten neu freigegeben) werden.
Anzeigen von verfügbaren Freigaben¶
Sie können Freigaben, die für die Nutzung mit Ihrem Konto verfügbar sind, entweder über die Weboberfläche oder über SQL anzeigen:
- Classic Web Interface
Klicken Sie auf Shares
und dann auf Inbound.
Auf der Seite werden alle Freigaben angezeigt, die für Ihr Konto verfügbar sind. Die Spalte Database zeigt den Namen der Datenbank an, die aus der Freigabe erstellt wurde. Wenn die Spalte leer ist, wurde in Ihrem Konto noch keine Datenbank aus der Freigabe erstellt.
- SQL
Führen Sie die Anweisung SHOW SHARES oder DESCRIBE SHARE aus.
Beispiel mit SQL:
SHOW SHARES; +---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+ | created_on | kind | name | database_name | to | owner | comment | |---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------| | Thu, 15 Jun 2017 17:02:29 -0700 | INBOUND | XY12345.SALES_S | | | | | | Thu, 15 Jun 2017 17:32:44 -0700 | INBOUND | XY12345.SALES_S2 | | | | | | Sat, 09 Jul 2016 19:18:09 -0700 | INBOUND | SFC_SAMPLES.SAMPLE_DATA | SNOWFLAKE_SAMPLE_DATA | | | Sample data sets provided by Snowflake | +---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+Die Ausgabe zeigt Folgendes:
Zwei Freigaben,
sales_s
undsales_s2
, sind verfügbar.INBOUND
in der Spaltekind
gibt an, dass ein Datenanbieter die Freigabe für Ihr Konto zur Nutzung bereitgestellt hat.In der Spalte
name
wird der vollqualifizierte Name jeder Freigabe in der Formprovider_account.share_name
(z. B.xy12345.sales_s
) angezeigt.Wenn die Spalte
database_name
leer ist, wurde in Ihrem Konto noch keine Datenbank aus der Freigabe erstellt.
Das nächste Beispiel verwendet den Befehl DESCRIBE SHARE, um die Objekte (Datenbank, Schemas und Tabellen) anzuzeigen, die sich in der Freigabe sales_s
befinden:
DESC SHARE xy12345.sales_s; +----------+------------------------------------+---------------------------------+ | kind | name | shared_on | |----------+------------------------------------+---------------------------------| | DATABASE | <DB> | Thu, 15 Jun 2017 17:03:16 -0700 | | SCHEMA | <DB>.AGGREGATES_EULA | Thu, 15 Jun 2017 17:03:16 -0700 | | TABLE | <DB>.AGGREGATES_EULA.AGGREGATE_1 | Thu, 15 Jun 2017 17:03:16 -0700 | | VIEW | <DB>.AGGREGATES_EULA.AGGREGATE_1_v | Thu, 15 Jun 2017 17:03:16 -0700 | +----------+------------------------------------+---------------------------------+Die Freigabe besteht aus dem Schema
aggregates_eula
mit der Tabelleaggregate_1
. Beachten Sie, dass jedem Objektname, einschließlich der Datenbank selbst, das Präfix<DB>
vorangestellt ist. Dies bedeutet, dass in Ihrem Konto noch keine Datenbank aus der Freigabe erstellt wurde.
Erstellen einer Datenbank aus einer Freigabe¶
Sie können eine Datenbank aus einer Freigabe erstellen, indem Sie entweder die Weboberfläche oder SQLverwenden:
- Classic Web Interface
Wählen Sie eine Freigabe aus, aus der noch keine Datenbank erstellt wurde (d. h. die Spalte Database ist leer).
Klicken Sie auf Create Database from Share.
Folgen Sie den im Dialogfeld angezeigten Anweisungen.
Beachten Sie, dass Sie zum Zeitpunkt der Erstellung wählen können, ob Sie die Berechtigung IMPORTED PRIVILEGES einer oder mehreren Rollen im System erteilen möchten, oder ob Sie die Berechtigung später vergeben möchten.
- SQL
Führen Sie eine CREATE DATABASE-Anweisung mit der folgenden Data Sharing-spezifischen Syntax aus:
CREATE DATABASE <name> FROM SHARE <provider_account>.<share_name>Dabei ist
provider_account
der Name des Kontos, das die Freigabe bereitgestellt hat, undshare_name
der Name der Freigabe, aus der die Datenbank erstellt werden soll.
Bemerkung
Eine Freigabe kann nur einmal pro Konto genutzt werden.
Um vor dem Erstellen der Datenbank die freigegebenen Objekte anzuzeigen, verwenden Sie den Befehl DESCRIBE SHARE.
Nachdem Sie eine Datenbank aus einer Freigabe erstellt haben, verwenden Sie entweder die Seite Databases
der Weboberfläche oder den Befehl GRANT <Berechtigungen> … TO ROLE, um anderen Rollen Zugriff auf die Datenbank zu erteilen.
Weitere Details dazu finden Sie unter diesem Thema unter Erteilen von Berechtigungen für eine freigegebene Datenbank.
SQL-Beispiele¶
Im folgende Beispiel wird in Ihrem Konto aus der Freigabe sales_s
eine neue Datenbank mit dem Namen snow_sales
erstellt:
CREATE DATABASE snow_sales FROM SHARE xy12345.sales_s;
Auflisten der neuen snow_sales
-Datenbank:
SHOW DATABASES LIKE 'snow%'; +---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------+ | created_on | name | is_default | is_current | origin | owner | comment | options | retention_time | |---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------| | Sun, 10 Jul 2016 23:28:50 -0700 | SNOWFLAKE_SAMPLE_DATA | N | N | SFC_SAMPLES.SAMPLE_DATA | ACCOUNTADMIN | | | 1 | | Thu, 15 Jun 2017 18:30:08 -0700 | SNOW_SALES | N | Y | xy12345.SALES_S | ACCOUNTADMIN | | | 1 | +---------------------------------+-----------------------+------------+------------+-------------------------+--------------+---------+---------+----------------+In diesem Beispiel zeigt die Spalte
origin
den vollqualifizierten Namen der Freigabe an, aus der die Datenbank erstellt wurde.
Ebenso enthalten die Ausgaben von SHOW SHARES und DESC SHARE nun den Namen der Datenbank, die aus der Freigabe erstellt wurde:
SHOW SHARES; +---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+ | created_on | kind | name | database_name | to | owner | comment | |---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------| | Thu, 15 Jun 2017 17:02:29 -0700 | INBOUND | xy12345.SALES_S | SNOW_SALES | | | | | Thu, 15 Jun 2017 17:32:44 -0700 | INBOUND | xy12345.SALES_S2 | | | | | | Sat, 09 Jul 2016 19:18:09 -0700 | INBOUND | SFC_SAMPLES.SAMPLE_DATA | SNOWFLAKE_SAMPLE_DATA | | | Sample data sets provided by Snowflake | +---------------------------------+---------+-------------------------+-----------------------+----+-------+---------------------------------------------+ DESC SHARE xy12345.sales_s; +----------+------------------------------------------+---------------------------------+ | kind | name | shared_on | |----------+------------------------------------------+---------------------------------| | DATABASE | SNOW_SALES | Thu, 15 Jun 2017 17:03:16 -0700 | | SCHEMA | SNOW_SALES.AGGREGATES_EULA | Thu, 15 Jun 2017 17:03:16 -0700 | | TABLE | SNOW_SALES.AGGREGATES_EULA.AGGREGATE_1 | Thu, 15 Jun 2017 17:03:16 -0700 | | VIEW | SNOW_SALES.AGGREGATES_EULA.AGGREGATE_1_v | Thu, 15 Jun 2017 17:03:16 -0700 | +----------+------------------------------------------+---------------------------------+
Erstellen von Streams auf freigegebenen Ansichten oder Tabellen¶
Durch das Erstellen von Streams auf freigegebenen Objekten können Sie die an diesen Objekten mit Datenbearbeitungssprache (DML) vorgenommenen Änderungen verfolgen. Diese Funktionalität ähnelt dem Erstellen und Verwenden von Streams auf „lokalen“ Objekten (d. h. in demselben Konto wie der Stream).
So erstellen Sie Streams auf freigegebenen Ansichten:
Führen Sie mit einer Rolle, die über die Berechtigung IMPORTED PRIVILEGES verfügt, die folgende SQL-Anweisung aus:
CREATE STREAM <name> ON VIEW <shared_db>.<schema>.<view>;
Erstellen Sie beispielsweise einen Stream auf der freigegebene Ansicht
aggregate_1_v
in Datenbank und Schemasnow_sales.aggregates_eula
:CREATE STREAM aggregate_1_v_stream ON VIEW snow_sales.aggregates_eula.aggregate_1_v;
So erstellen Sie Streams auf freigegebenen Tabellen:
Führen Sie mit einer Rolle, die über die Berechtigung IMPORTED PRIVILEGES verfügt, die folgende SQL-Anweisung aus:
CREATE STREAM <name> ON TABLE <shared_db>.<schema>.<table>;
Erstellen Sie beispielsweise einen Tabellenstream für die gemeinsam genutzte Tabelle
aggregate_1
in Datenbank und Schemasnow_sales.aggregates_eula
:CREATE STREAM aggregate_1_stream ON TABLE snow_sales.aggregates_eula.aggregate_1;
Weitere Informationen zum Erstellen von Streams finden Sie unter CREATE STREAM.
Bemerkung
Die Einstellung CREATE STREAM … SHOW_INITIAL_ROWS = TRUE wird für Streams auf freigegebenen Tabellen nicht unterstützt. Ein solcher Stream gibt nur Änderungsdatensätze für Aktualisierungen der Quelltabelle zurück, die nach dem Erstellen des Streams vorgenommen wurden.
Der Datenanbieter muss erst die Änderungsverfolgung für Ansichten oder Tabellen aktivieren, bevor Sie Streams auf diesen Objekten erstellen können. Wenn Sie keine Streams auf einem gewünschten freigegebenen Objekt erstellen können, wenden Sie sich an den Datenanbieter, um die Änderungsverfolgung für das Objekt zu aktivieren.
Verarbeiten Sie die Streamdatensätze noch während der Aufbewahrungsfrist der Tabelle in einer Transaktion, um zu verhindern, dass der Stream veraltet. Wenden Sie sich an den Datenanbieter, um die Datenaufbewahrungsfrist für die Tabelle zu ermitteln.
Führen Sie den Befehl DESCRIBE STREAM oder SHOW STREAMS aus, um festzustellen, ob ein Stream veraltet ist. Wenn der Spaltenwert STALE in der Befehlsausgabe TRUE ist, kann der Stream veraltet sein. In der Praxis kann das Lesen aus dem Stream einige Zeit nach der erwarteten STALE_AFTER erfolgen. Der Stream kann jedoch während dieses Zeitraums jederzeit veralten.
Erteilen von Berechtigungen für eine freigegebene Datenbank¶
Nur Rollen, die zum Erstellen einer Datenbank aus einer Freigabe verwendet werden, können die Datenbank anfänglich verwenden. Der Zugriff auf andere Rollen kann jedoch über die Data Sharing-spezifische Berechtigung IMPORTED PRIVILEGES erteilt werden.
Eine Rolle kann IMPORTED PRIVILEGES für eine importierte Datenbank nur gewähren, wenn eine der beiden folgenden Bedingungen erfüllt ist:
Die Rolle ist Eigentümer der importierten Datenbank (d. h. sie hat die Berechtigung OWNERSHIP für die Datenbank).
Der Rolle wurde die globale Berechtigung MANAGE GRANTS gewährt.
Zuweisen von IMPORTED PRIVILEGES zu anderen Rollen¶
Sie können diese Rolle anderen Rollen entweder über die Weboberfläche oder mit SQL zuordnen:
- Classic Web Interface
Klicken Sie auf Databases
» <Name_der_freigegebenen_Datenbank>.
Klicken Sie im Seitenbereich auf Grant Privileges, und weisen Sie die Berechtigung einer oder mehreren Rollen zu.
- SQL
Führen Sie eine GRANT <Berechtigungen> … TO ROLE-Anweisung aus.
Zur Anzeige der Rollen, die für eine freigegebene Datenbank über die Berechtigung USAGE verfügen, verwenden Sie die Weboberfläche oder den Befehl SHOW GRANTS.
SQL-Beispiele¶
Rolle
r1
erstellt Datenbanksnow_sales
aus Freigabexy12345.sales_s
:use role r1; create database snow_sales from share xy12345.sales_s;
Rolle
r1
gewährt Roller2
die Berechtigung IMPORTED PRIVILEGES für die Datenbanksnow_sales
:grant imported privileges on database snow_sales to role r2;
Da
r2
nicht über die Berechtigung OWNERSHIP für die Datenbank verfügt, muss die Roller2
die Berechtigung MANAGE GRANTS für das Konto besitzen, um eine der folgenden Berechtigungs- oder Widerrufsoperationen ausführen zu können:use role r2; grant imported privileges on database snow_sales to role r3; revoke imported privileges on database snow_sales from role r3;
Abfragen einer freigegebenen Datenbank¶
Das Abfragen einer freigegebenen Datenbank erfolgt auf die gleiche Weise wie das Abfragen jeder anderen Datenbank Ihres Kontos.
Beispiel:
USE ROLE r1; USE DATABASE snow_sales; SELECT * FROM aggregates_1;