Zugriffsverlauf¶
Unter diesem Thema werden Konzepte zum Benutzerzugriffsverlauf in Snowflake bereitgestellt.
Überblick¶
Der Zugriffsverlauf in Snowflake bezieht sich darauf, wann die Benutzerabfrage Daten liest und wann die SQL-Anweisung eine Datenschreiboperation wie INSERT, UPDATE und DELETE sowie Variationen des COPY-Befehls vom Quelldatenobjekt zum Zieldatenobjekt ausführt. Der Benutzerzugriffsverlauf kann durch Abfrage der Ansicht ACCESS_HISTORY in den Schemata ACCOUNT_USAGE und ORGANIZATION_USAGE gefunden werden. Die Datensätze in diesen Ansichten erleichtern die Prüfung der Einhaltung von Vorschriften und bieten Einblicke in beliebte und häufig verwendete Tabellen und Spalten, da eine direkte Verbindung zwischen dem Benutzer (d. h. dem Abfrageoperator), der Abfrage, der Tabelle oder Ansicht, der Spalte und den Daten besteht.
Jede Zeile in der ACCESS_HISTORY-Ansicht enthält einen einzelnen Datensatz pro SQL-Anweisung. Der Datensatz enthält die folgenden Arten von Informationen:
Die Quellspalten, auf die die Abfrage direkt und indirekt zugreift, wie die zugrunde liegenden Tabellen, aus denen die Daten für die Abfrage stammen.
Die projizierten Spalten, die dem Benutzer im Abfrageergebnis angezeigt werden, wie z. B. die in einer SELECT-Anweisung angegebenen Spalten.
Die Spalten, die zur Bestimmung des Abfrageergebnisses verwendet, aber nicht projiziert werden, wie z. B. Spalten in einer WHERE-Klausel zum Filtern des Ergebnisses.
Beispiel:
Die Spalten C1 und C2 sind Quellspalten, auf die die Ansicht direkt zugreift und die in der Spalte
base_objects_accessedder ACCESS_HISTORY-Ansicht erfasst werden.Die Spalte C3 wird verwendet, um die Zeilen zu filtern, die die Ansicht enthält, die in der Spalte
base_objects_accessedder ACCESS_HISTORY-Ansicht erfasst wird.Die Spalten VC1 und VC2 sind projizierte Spalten, die dem Benutzer beim Abfragen der Ansicht mit
SELECT * FROM v1;angezeigt und die in der Spaltedirect_objects_accessedder ACCESS_HISTORY-Ansicht erfasst werden.
Das gleiche Verhalten gilt für eine Schlüsselspalte einer WHERE-Klausel. Beispiel:
Zum Erstellen der Ansicht sind zwei verschiedene Tabellen erforderlich:
bt(Basistabelle) undjt(Verknüpfungstabelle).Die Spalten C1, C2 und C3 aus der Basistabelle und die Spalte C1 aus der Verknüpfungstabelle werden alle in der Spalte
base_objects_accessedder ACCESS_HISTORY-Ansicht erfasst.Die Spalten VC1, VC2 und C1 sind projizierte Spalten, die dem Benutzer beim Abfragen der Ansicht mit
SELECT * FROM join_v;angezeigt und die in der Spaltedirect_objects_accessedder ACCESS_HISTORY-Ansicht erfasst werden.
Bemerkung
Datensätze in der Account Usage-Ansicht QUERY_HISTORY werden nicht immer in der Ansicht ACCESS_HISTORY erfasst. Die Struktur der SQL-Anweisung bestimmt, ob Snowflake Datensätze in der ACCESS_HISTORY-Ansicht erfasst.
Einzelheiten zu den Lese- und Schreiboperationen, die Snowflake in der ACCESS_HISTORY-Ansicht unterstützt, finden Sie unter Nutzungshinweise.
Verfolgen von Lese- und Schreiboperationen¶
Die Ansicht ACCESS_HISTORY enthält sowohl im Schema ACCOUNT_USAGE als auch ORGANIZATION_USAGE die folgenden Spalten:
Leseoperationen werden über die ersten fünf Spalten verfolgt, während die letzte Spalte objects_modified die Datenschreibinformationen angibt, die Snowflake-Spalten, -Tabellen und -Stagingbereiche betreffen.
Die Abfrage in Snowflake und die Methode zum Erstellen von Datenbankobjekten bestimmen die Informationen, die Snowflake in den Spalten direct_objects_accessed, base_objects_accessed und objects_modified zurückgibt.
Gleiches gilt, wenn die Abfrage auf ein Objekt verweist, das durch eine Zeilenzugriffsrichtlinie geschützt ist, oder auf eine Spalte, die durch eine Maskierungsrichtlinie geschützt ist, erfasst Snowflake die Richtlinieninformationen in der Spalte policies_referenced.
In der Spalte object_modified_by_ddl wird die auf einer Datenbank, einem Schema, einer Tabelle, einer Ansicht oder einer Spalte ausgeführte DDL-Operation erfasst. Zu diesen Operationen gehören auch Anweisungen, die eine Zeilenzugriffsrichtlinie auf einer Tabelle oder Ansicht, eine Maskierungsrichtlinie auf einer Spalte sowie Tag-Aktualisierungen (z. B. Setzen eines Tags, Ändern eines Tag-Werts) auf dem Objekt oder der Spalte angeben.
Die Spalten parent_query_id und root_query_id erfassen die Abfrage-IDs, die Folgendem entsprechen:
Abfrage, die eine Lese- oder Schreiboperation auf einem anderen Objekt ausführt.
Abfrage, die eine Lese- oder Schreiboperation auf einem Objekt ausführt, die eine gespeicherte Prozedur aufruft, einschließlich verschachtelter Prozeduraufrufe. Weitere Informationen dazu finden Sie unter Vorgängerabfragen (unter diesem Thema).
Weitere Informationen zu den Spalten finden Sie im Abschnitt Spalten zur ACCESS_HISTORY-Ansicht.
Lesen¶
Betrachten Sie das folgende Szenario, um ein besseres Verständnis der Leseabfrage und der Erfassung dieser Informationen in der ACCESS_HISTORY-Ansicht zu erhalten:
Eine Reihe von Objekten:
base_table»view_1»view_2»view_3.Eine Leseabfrage auf
view_2, wie z. B.:
In diesem Beispiel gibt Snowflake Folgendes zurück:
view_2in der Spaltedirect_objects_accessed, weil in der Abfrageview_2angegeben ist.base_tablein der Spaltebase_objects_accessed, da dies die ursprüngliche Quelle der Daten inview_2ist.
Beachten Sie, dass view_1 und view_3 nicht in den Spalten direct_objects_accessed und base_objects_accessed enthalten sind, da keine dieser Ansichten in der Abfrage enthalten war und sie nicht das Basisobjekt sind, das als Quelle für die Daten in view_2 dient.
Schreiben¶
Betrachten Sie das folgende Szenario, um ein besseres Verständnis der Schreiboperation und der Erfassung dieser Informationen in der ACCESS_HISTORY-Ansicht zu erhalten:
Eine Datenquelle:
base_tableErstellen Sie eine Tabelle aus der Datenquelle (d. h. CTAS):
In diesem Beispiel gibt Snowflake Folgendes zurück:
base_tablein den Spaltenbase_objects_accessedunddirect_objects_accessed, da auf die Tabelle direkt zugegriffen wurde und sie die Quelle der Daten ist.table_1in der Spalteobjects_modifiedmit den Spalten, in die beim Erstellen der Tabelle geschrieben wurde.
Unterstützte Operationen¶
Eine vollständige Beschreibung der von der ACCESS_HISTORY-Ansicht unterstützten Lese- und Schreiboperationen finden Sie im Abschnitt „Nutzungshinweise“ unter Ansicht ACCESS_HISTORY.
Mehrere Anweisungen in einer einzigen Anfrage¶
Snowflake unterstützt die gleichzeitige Ausführung mehrerer Anweisungen in einer einzigen Anfrage. Wie Sie die Anfrage im Zugriffsverlauf verfolgen, hängt davon ab, ob sie in Snowsight oder programmatisch ausgeführt wurde.
Wenn Sie Snowsight verwenden, um mehrere Anweisungen auszuführen, führt es die Abfragen nacheinander aus und gibt die
query_idder zuletzt ausgeführten Abfrage zurück. Sie können alle ausgeführten Anweisungen und ihre Rückgabewerte in der Ansicht ACCESS_HISTORY finden.Features wie der Snowflake Python-Konnektor oder die Snowflake SQL API fassen mehrere SQL-Anweisungen in einer einzigen Anfrage zusammen und geben eine einzige
query_idfür alle Anweisungen zurück. Diese Nummer ist eigentlich eine übergeordnete Abfrage-ID für alle einzelnen Anweisungen. Um diequery_idjeder Anweisung zurückzugeben, aus der die Anfrage bestand, müssen Sie die Ansicht ACCESS_HISTORY mit dem Befehlparent_query_idabfragen. Wenn die Anfrage zum Beispielquery_id = 6789zurückgegeben hat, können Sie die Abfrage-IDs der einzelnen Anweisungen zurückgeben, indem Sie Folgendes ausführen:
Vorteile¶
Der Zugriffsverlauf in Snowflake bietet die folgenden Vorteile in Bezug auf Lese- und Schreiboperationen:
- Datenerkennung:
Erkennen von nicht verwendeten Daten, um zu entscheiden, ob die Daten archiviert oder gelöscht werden sollen.
- Verfolgen der Bewegung sensibler Daten:
Verfolgen Sie Datenbewegungen von einem externen Cloudspeicherort (z. B. Amazon S3-Bucket) zur Snowflake-Zieltabelle und umgekehrt.
Verfolgen Sie interne Datenbewegungen von einer Snowflake-Tabelle zu einer anderen Snowflake-Tabelle.
Nachdem Sie die Bewegung sensibler Daten verfolgt haben, wenden Sie Richtlinien (Maskierung und Zeilenzugriff) an, um die Daten zu schützen, aktualisieren Sie die Zugriffssteuerungseinstellungen, um den Zugriff auf Stagingbereich und Tabelle weiter zu regulieren, und setzen Sie Tags, um sicherzustellen, dass Stagingbereiche, Tabellen und Spalten mit sensiblen Daten für Compliance-Anforderungen nachverfolgt werden können.
- Datenvalidierung:
Die Genauigkeit und Integrität von Berichten, Dashboards und Datenvisualisierungsprodukten wie Diagrammen und Grafiken werden validiert, da die Daten bis zu ihrer ursprünglichen Quelle zurückverfolgt werden können.
Datenverwalter können Benutzer benachrichtigen, bevor eine bestimmte Tabelle oder Ansicht gelöscht oder geändert wird.
- Compliance-Prüfung:
Identifizieren Sie den Snowflake-Benutzer, der eine Schreiboperation auf einer Tabelle oder einem Stagingbereich ausgeführt hat, und wann diese Schreiboperation stattgefunden hat, um Compliance-Anforderungen wie GDPR oder CCPA zu erfüllen.
- Verbesserung der allgemeinen Data Governance:
Die ACCESS_HISTORY-Ansicht bietet einen Gesamtüberblick, auf welche Daten zugegriffen wurde, wann der Datenzugriff stattfand und wie die Daten, auf die zugegriffen wurde, vom Datenquellenobjekt zum Datenzielobjekt verschoben wurden.
Spaltenherkunft¶
Spaltenherkunft (d. h. der Zugriffsverlauf von Spalten) erweitert die Account Usage-Ansicht ACCESS_HISTORY umd die Angabe, wie die Daten bei einer Schreiboperation von der Quellspalte zur Zielspalte gelangen. Snowflake verfolgt die Daten aus den Quellspalten über alle nachfolgenden Tabellenobjekte, die auf Daten aus den Quellspalten verweisen (z. B. INSERT, MERGE, CTAS), vorausgesetzt, dass Objekte in der Herkunftsabfolge nicht gelöscht werden. Snowflake stellt die Spaltenherkunft bereit, indem die ACCESS_HISTORY-Ansicht um die Spalte objects_modified erweitert wird.
Spaltenherkunft bietet die folgenden Vorteile:
- Abgeleitete Objekte schützen:
Datenverwalter können auf Quellspalten mit sensiblen Daten auf einfache Weise Tags setzen, ohne dass nach dem Erstellen abgeleiteter Objekte (z. B. CTAS) zusätzlicher Aufwand erforderlich ist. Anschließend kann der Datenverwalter Tabellen, die sensible Spalten enthalten, mit einer Zeilenzugriffsrichtlinie schützen oder die sensiblen Spalten selbst entweder mit einer Maskierungsrichtlinie oder einer Tag-basierten Maskierungsrichtlinie schützen.
- Kopierhäufigkeit von Spalten mit sensiblen Daten:
Datenschutzbeauftragte können schnell die Objektanzahl (z. B. 1 Tabelle, 2 Ansichten) einer Spalte ermitteln, die sensible Daten enthält. Mit dem Wissen, wie oft eine Spalte mit sensiblen Daten in einem Tabellenobjekt vorkommt, können die Datenschutzbeauftragten nachweisen, wie Standards für die Einhaltung von Vorschriften, wie z. B. der Datenschutz-Grundverordnung (DGVO) in der Europäischen Union, erfüllt werden.
- Ursachenanalyse:
Die Spaltenherkunft bietet einen Mechanismus zur Rückverfolgung von Daten bis zu ihrer Quelle, was dazu beitragen kann, Fehlerpunkte zu identifizieren, die auf eine schlechte Datenqualität zurückzuführen sind, und die Anzahl der zu analysierenden Spalten während der Problembehandlung zu reduzieren.
Weitere Einzelheiten zur Spaltenherkunft finden Sie unter:
Spaltenherkunft (unter diesem Thema)
Richtlinienreferenzen zu Maskierungs- und Zeilenzugriffsrichtlinien¶
Die Spalte POLICY_REFERENCED gibt das Objekt an, das eine Zeilenzugriffsrichtlinie für eine Tabelle bzw. eine Maskierungsrichtlinie für eine Spalte hat, einschließlich aller Zwischenobjekte, die entweder durch eine Zeilenzugriffsrichtlinie oder eine Maskierungsrichtlinie geschützt sind. Snowflake erfasst die Richtlinie, die für die Tabelle oder Spalte erzwungen wird.
Betrachten Sie diese Objekte:
t1 » v1 » v2
Wobei:
t1ist eine Basistabelle.v1ist eine aus der Basistabelle erstellte Ansicht.v2ist eine ausv1erstellte Ansicht.
Wenn der Benutzer v2 abfragt, wird in der Spalte policies_referenced entweder die Zeilenzugriffsrichtlinie, die v2 schützt, oder jede Maskierungsrichtlinie, die die Spalten in v2 schützt, oder es werden ggf. beide Arten von Richtlinien erfasst. Außerdem werden in dieser Spalte alle Maskierungs- oder Zeilenzugriffsrichtlinien erfasst, die t1 und v1 schützen.
Anhand dieser Datensätze können Datenverwalter nachvollziehen, wie auf ihre richtliniengeschützten Objekte zugegriffen wird.
Die Spalte policies_referenced bietet weitere Vorteile für die ACCESS_HISTORY-Ansicht:
Identifizieren der richtliniengeschützten Objekte, auf die ein Benutzer in einer bestimmten Abfrage zugreift.
Vereinfachen des Prüfprozesses (Auditing) von Richtlinien.
Durch Abfragen der ACCESS_HISTORY-Ansicht sind keine komplexen Verknüpfungen mit anderen Account Usage-Ansichten (z. B. POLICY_REFERENCES und QUERY_HISTORY) mehr erforderlich, um Informationen zu den geschützten Objekten und den geschützten Spalten zu erhalten, auf die ein Benutzer Zugriff hat.
Zugriffsverlauf auf Konto- und Organisationsebene¶
Administratoren überwachen den Zugriffsverlauf auf Kontoebene, indem sie die Ansicht ACCESS_HISTORY im Schema ACCOUNT_USAGE des Kontos abfragen. Es entstehen keine zusätzlichen Kosten für die Ansicht ACCOUNT_USAGE.ACCESS_HISTORY.
Die Ansicht ACCESS_HISTORY im Schema ORGANIZATION_USAGE fasst den Zugriffsverlauf aller Konten in einer Organisation in einer einzigen Ansicht zusammen, um einen Zugriffsverlauf auf Organisationsebene zu bieten. Diese Ansicht ORGANIZATION_USAGE.ACCESS_HISTORY ist nur im Organisationskonto zu finden.
Der Zugriffsverlauf auf Organisationsebene im Schema ORGANIZATION_USAGE unterscheidet sich von jenem im Schema ACCOUNT_USAGE auf folgende Weise:
- Zusätzliche Spalten:
Die Ansicht ORGANIZATION_USAGE.ACCESS_HISTORY im Organisationskonto enthält zusätzliche Spalten, die Einblicke in die organisatorischen Freigabeangebote geben. Anhand dieser Spalten können Sie feststellen, auf welche der Datenprodukte, die mit einem organisatorischen Freigabeangebot verknüpft sind, die Abfrage eines Verbrauchers zugegriffen hat und ob diese Datenprodukte durch eine Richtlinie, z. B. eine Maskierungsrichtlinie, geschützt sind. Weitere Informationen dazu finden Sie unter Governance von Organisations-Freigabeangeboten.
- Zusätzliche Kosten:
Die Ansicht ORGANIZATION_USAGE.ACCESS_HISTORY im Organisationskonto ist eine Premium-Ansicht, bei der die folgenden Kosten anfallen:
Computekosten, die mit den serverlosen Aufgaben verbunden sind, welche die Ansicht ACCESS_HISTORY auffüllen.
Speicherkosten im Zusammenhang mit der Speicherung der Daten in der Ansicht ACCESS_HISTORY.
Weitere Informationen zu diesen Kosten finden Sie unter Kosten im Zusammenhang mit Premium-Ansichten.
Unterstützte Objekte¶
Verwenden Sie die folgende Tabelle, um festzustellen, ob die ACCESS_HISTORY-Ansicht einen Datensatz enthält, wenn eine SQL-Anweisung einen bestimmten Objekttyp betrifft. SQL-Aussagen umfassen die folgenden:
DML-Anweisungen (Data Manipulation Language). Zum Beispiel Anweisungen, die zum Einfügen von Daten in eine Tabelle verwendet werden.
DQL-Anweisungen (Data Query Language). Zum Beispiel Anweisungen, die eine SELECT-Anweisung verwenden, um Daten zu projizieren.
DDL-Anweisungen (Data Definition Language). Zum Beispiel Anweisungen, die ein Snowflake-Objekt erstellen oder ändern.
Objekt |
DML |
DQL |
DDL |
Anmerkungen |
|---|---|---|---|---|
DATABASE |
k.A. |
k.A. |
✔ |
|
DYNAMIC-TABLE |
Teilweise |
✔ |
✔ |
Die Unterstützung für DML gilt nur für den Befehl |
EXTERNAL TABLE |
✔ |
✔ |
✔ |
|
FUNCTION |
k.A. |
✔ |
✔ |
Die Unterstützung für DQL ist auf eine Funktion beschränkt, die in einer SELECT-Anweisung erscheint. |
ICEBERG TABLE |
Teilweise |
✔ |
✔ |
Full support (DML, DQL, DDL) for Snowflake-managed Apache Iceberg™ tables. Support for DQL and DDL only for externally managed Apache Iceberg™ tables. |
LISTING |
k.A. |
k.A. |
✔ |
|
MATERIALIZED VIEW |
k.A. |
✔ |
✔ |
|
POLICY |
k.A. |
✔ |
✔ |
Die Unterstützung für DDL zeigt an, wenn eine Richtlinie auf ein Objekt angewendet wird. Die Unterstützung für DQL zeigt die Richtlinien an, die bei einer Abfrage durchgesetzt werden. |
PROCEDURE |
k.A. |
✔ |
✔ |
Eine Prozedur kann mehrere SQL-Anweisungen haben, wobei jede Anweisung einen eigenen Datensatz erzeugt. |
ROLE |
k.A. |
k.A. |
✔ |
|
SCHEMA |
k.A. |
k.A. |
✔ |
|
SEQUENCE |
k.A. |
✔ |
Die Nicht-Unterstützung von DML ist beabsichtigt. |
|
SESSION |
k.A. |
k.A. |
✔ |
|
SHARE |
k.A. |
k.A. |
✔ |
|
STAGE |
Teilweise |
✔ |
Die Unterstützung für DML ist auf die Verwendung des Stagingbereichs als Quelle für eine Tabelle beschränkt. Für DQL gibt es keine Unterstützung für Abfragen gegen einen Stagingbereich. |
|
STREAM |
k.A. |
Teilweise |
✔ |
Die Unterstützung für DQL ist auf die Verwendung eines Streams als Quelle für eine Tabelle beschränkt. |
TABLE |
✔ |
✔ |
✔ |
|
TAG |
k.A. |
k.A. |
✔ |
|
VIEW |
k.A. |
✔ |
✔ |
Abfragen der ACCESS_HISTORY-Ansicht¶
Die folgenden Abschnitte enthalten Beispielabfragen für die ACCESS_HISTORY-Ansicht.
Beachten Sie, dass einige der Beispielabfragen nach der Spalte query_start_time filtern, um die Abfrageleistung zu erhöhen. Eine weitere Möglichkeit, die Leistung zu erhöhen, ist die Einengung des Zeitbereichs, auf dem die Abfrage ausgeführt wird.
Access history examples¶
Read queries¶
In den folgenden Unterabschnitten wird beschrieben, wie die ACCESS_HISTORY-Ansicht für Leseoperationen in den folgenden Anwendungsfälle abgefragt werden kann:
Abrufen des Zugriffsverlaufs für einen bestimmten Benutzer.
Vereinfachen der Compliance-Prüfungen für den Zugriff auf sensible Daten in den letzten 30 Tagen auf Basis von
object_id(z. B. einer Tabellen-ID), um die folgenden Fragen zu beantworten:Wer hat auf die Daten zugegriffen?
Wann wurde auf die Daten zugegriffen?
Auf welche Spalten wurde zugegriffen?
Benutzerzugriffsverlauf zurückgeben¶
Geben Sie den Zugriffsverlauf des Benutzers zurück, sortiert nach Benutzer und Startzeit der Abfrage, beginnend mit dem letzten Zugriff.
Compliance-Prüfungen vereinfachen¶
Die folgenden Beispiele helfen, die Einhaltung gesetzlicher Bestimmungen zu vereinfachen:
Fügen Sie den
object_id-Wert hinzu, um festzustellen, wer in den letzten 30 Tagen auf eine sensible Tabelle zugegriffen hat:Bestimmen Sie anhand des
object_id-Wertes von32998411400350, wann der Zugriff in den letzten 30 Tagen erfolgte:Bestimmen Sie anhand des
object_id-Wertes von32998411400350, auf welche Spalten in den letzten 30 Tagen zugegriffen wurde:
Write operations¶
In den folgenden Unterabschnitten wird beschrieben, wie die ACCESS_HISTORY-Ansicht für Schreiboperationen in den folgenden Anwendungsfälle abgefragt werden kann:
Laden von Daten aus einem Stagingbereich in eine Tabelle
Entladen von Daten aus einer Tabelle in einen Stagingbereich
Verwenden des PUT-Befehls zum Hochladen einer lokale Datei in einen Stagingbereich
Verwenden des GET-Befehls zum Abrufen von Datendateien aus einem Stagingbereich in ein lokales Verzeichnis
Verfolgen der Bewegung sensibler Stagingbereichsdaten
Daten aus einem Stagingbereich in eine Tabelle laden¶
Laden Sie eine Menge von Werten aus einer Datendatei in einen externen Cloudspeicher in Spalten einer Zieltabelle.
In den Spalten direct_objects_accessed und base_objects_accessed wird angegeben, dass auf einen externen benannten Stagingbereich zugegriffen wurde:
In der Spalte objects_modified wird angegeben, dass Daten in zwei Spalten der Tabelle geschrieben wurden:
Daten aus einer Tabelle in einen Stagingbereich entladen¶
Entladen Sie eine Menge von Werten aus einer Snowflake-Tabelle in den Cloudspeicher.
In den Spalten direct_objects_accessed und base_objects_accessed werden die Tabellenspalten angegeben, auf die zugegriffen wurde:
In der Spalte objects_modified wird der Stagingbereich angegeben, in den die abgerufenen Daten geschrieben wurden:
PUT-Befehl zum Hochladen einer lokalen Datei in einen Stagingbereich verwenden¶
Kopieren Sie eine Datendatei in einen internen (d. h. Snowflake) Stagingbereich.
In den Spalten direct_objects_accessed und base_objects_accessed wird der lokale Pfad zu der Datei angegeben, auf die zugegriffen wurde:
In der Spalte objects_modified wird der Stagingbereich angegeben, in den die abgerufenen Daten geschrieben wurden:
GET-Befehl zum Abrufen von Datendateien aus einem Stagingbereich in ein lokales Verzeichnis verwenden¶
Rufen Sie eine Datendatei aus einem internen Stagingbereich in ein Verzeichnis auf dem lokalen Rechner ab.
In den Spalten direct_objects_accessed und base_objects_accessed werden der Stagingbereich und das lokale Verzeichnis angegeben, auf die zugegriffen wurde:
In der Spalte objects_modified wird das Verzeichnis angegeben, in das die abgerufenen Daten geschrieben wurden:
Bewegung sensibler Stagingbereichsdaten verfolgen¶
Verfolgen Sie sensible Stagingbereichsdaten, während diese eine Serie von Abfragen in chronologischer Reihenfolge durchlaufen.
Führen Sie die folgenden Abfragen aus. Beachten Sie, dass fünf der Anweisungen auf Stagingbereiche zugreifen. Wenn Sie also die ACCESS_HISTORY-Ansicht für den Stagingbereichszugriff abfragen, sollte das Resultset fünf Zeilen enthalten.
Wobei:
T1,T2…T7geben die Namen der Tabellen an.
S1undS2geben die Namen der Stagingbereiche an.
Führen Sie eine Abfrage des Zugriffsverlaufs aus, um den Zugriff auf Stagingbereich S1 zu ermitteln.
Die Daten der Spalten
direct_objects_accessed,base_objects_accessedundobjects_modifiedsind in der folgenden Tabelle aufgeführt.
direct_objects_accessed
base_objects_accessed
objects_modifiedBeachten Sie bei diesem Abfragebeispiel Folgendes:
Verwendet einen rekursiven allgemeinen Tabellenausdruck.
Verwendet ein JOIN-Konstrukt anstelle einer USING-Klausel.
Die Abfrage liefert das folgende Resultset in Bezug auf die Datenbewegung in Stagingbereich
S1:
PATH
TARGET_NAME
TARGET_ID
TARGET_DOMAIN
TARGET_COLUMNS
TEST_DB.TEST_SCHEMA.S1–>TEST_DB.TEST_SCHEMA.T1
TEST_DB.TEST_SCHEMA.T1
66564
Tabelle
[„CONTENT“]
TEST_DB.TEST_SCHEMA.S1–>TEST_DB.TEST_SCHEMA.T1–>TEST_DB.TEST_SCHEMA.S2
TEST_DB.TEST_SCHEMA.S2
118
Stagingbereich
[]
TEST_DB.TEST_SCHEMA.S1–>TEST_DB.TEST_SCHEMA.T1–>TEST_DB.TEST_SCHEMA.T2
TEST_DB.TEST_SCHEMA.T2
66568
Tabelle
[„NAME“,“ID“]
TEST_DB.TEST_SCHEMA.S1–>TEST_DB.TEST_SCHEMA.T1–>TEST_DB.TEST_SCHEMA.T4
TEST_DB.TEST_SCHEMA.T4
66572
Tabelle
[„ID“,“NAME“]
TEST_DB.TEST_SCHEMA.S1–>TEST_DB.TEST_SCHEMA.T3
TEST_DB.TEST_SCHEMA.T3
66570
Tabelle
[„CUSTOMER_INFO“]
Spaltenherkunft¶
Im folgenden Beispiel wird die ACCESS_HISTORY-Ansicht abgefragt, und die Funktion FLATTEN wird verwendet, um die Spalte objects_modified zu vereinfachen.
Führen Sie als repräsentatives Beispiel die folgende SQL-Abfrage in Ihrem Snowflake-Konto aus, um die folgende Tabelle zu erstellen, in der die nummerierten Kommentare Folgendes angeben:
// 1: Ermittelt die Zuordnung zwischen dem FelddirectSourcesund der Zielspalte.// 2: Ermittelt die Zuordnung zwischen dem FeldbaseSourcesund der Zielspalte.
Rückgabewerte:
SOURCE_OBJECT_ID
SOURCE_OBJECT_NAME
SOURCE_COLUMN_NAME
SOURCE_COLUMN_TYPE
TARGET_OBJECT_NAME
TARGET_COLUMN_NAME
1
D.S.T0
NAME
BASE
D.S.T1
NAME
2
D.S.V1
NAME
DIRECT
D.S.T1
NAME
Track row access policy references¶
Gibt eine Zeile für jede Instanz zurück, wenn eine Zeilenzugriffsrichtlinie für eine Tabelle, Ansicht oder materialisierte Ansicht ohne Duplikate festgelegt ist:
Track masking policy references¶
Gibt eine Zeile für jede Instanz zurück, wenn eine Maskierungsrichtlinie eine Spalte ohne Duplikate schützt. Beachten Sie, dass eine zusätzliche Vereinfachung (Flattening) erforderlich ist, da die policies_referenced-Spalte die Maskierungsrichtlinie einer Spalte eine Ebene tiefer als die Zeilenzugriffsrichtlinie einer Tabelle angibt:
Track the enforced policy in a query¶
Gibt den Zeitpunkt zurück, zu dem die Richtlinie aktualisiert wurde (POLICY_CHANGED_TIME) und die Richtlinienbedingungen (POLICY_BODY) für eine bestimmte Abfrage in einem gegebenen Zeitrahmen.
Bevor Sie diese Abfrage verwenden, aktualisieren Sie die Eingabewerte der WHERE-Klausel:
Wobei:
query_start_time > '2023-07-07'Gibt den Anfangszeitstempel an.
query_start_time < '2023-07-08'Gibt den Endzeitstempel an.
query_id = '01ad7987-0606-6e2c-0001-dd20f12a9777'Gibt die Abfrage-ID in der Account Usage-Ansicht ACCESS_HISTORY an.
Führen Sie die Abfrage aus:
UDFs¶
Die folgenden UDF-Beispiele zeigen, wie die Account Usage-Ansicht ACCESS_HISTORY Daten erfasst:
Aufrufen einer UDF namens
get_product.Einfügen des Produkts aus dem Aufruf der Funktion
get_productin eine Tabelle namensmydb.tables.t1.Freigeben von UDFs.
Aufrufen einer UDF¶
Angenommen, die folgende SQL-UDF berechnet das Produkt zweier Zahlen und speichert das Ergebnis im Schema namens mydb.udfs:
Das direkte Aufrufen von get_product führt zum Erfassen der UDF-Details in der Spalte direct_objects_accessed:
Dieses Beispiel ist analog zum Aufrufen einer gespeicherten Prozedur (unter diesem Thema).
UDF mit INSERT DML¶
Betrachten Sie die folgende INSERT-Anweisung, mit der die Spalten 1 und 2 in der Tabelle mydb.tables.t1 aktualisiert werden:
Die ACCESS_HISTORY-Ansicht erfasst die get_product-Funktion in folgenden Spalten:
Spalte
direct_objects_accessed, da die Funktion in der SQL-Anweisung explizit genannt wirdSpalte
objects_modifiedim ArraydirectSources, da die Funktion die Quelle für die Werte ist, die in die Spalten eingefügt werden.
Außerdem wird auch Tabelle t1 in denselben Spalten erfasst:
direct_objects_accessed
objects_modified
Tracking objects modified by a DDL operation¶
Tag mit Schlüssel ALLOWED_VALUES erstellen¶
So erstellen Sie das Tag:
Spaltenwert:
Bemerkung
Wenn Sie beim Erstellen des Tags keine zulässigen Werte angeben, ist das Feld properties ein leeres Array (d. h. {}).
Tabelle mit einem Tag und Maskierungsrichtlinie erstellen¶
So erstellen Sie die Tabelle mit einer Maskierungsrichtlinie auf der Spalte, einem Tag auf der Spalte und einem Tag auf der Tabelle:
Spaltenwert:
Maskierungsrichtlinie auf ein Tag setzen¶
So legen Sie eine Maskierungsrichtlinie auf dem Tag fest (d. h. Tag-basiertes Maskieren):
Spaltenwert:
Tabelle austauschen¶
So tauschen Sie die Tabelle mit dem Namen t2 gegen die Tabelle mit dem Namen t3 aus:
Beachten Sie die beiden unterschiedlichen Datensätze in der Ansicht.
Datensatz 1:
Datensatz 2:
Maskierungsrichtlinie löschen¶
So löschen Sie die Maskierungsrichtlinie:
Spaltenwert:
Bemerkung
Der Spaltenwert ist repräsentativ und gilt für eine DROP-Operation auf einem Tag und einer Zeilenzugriffsrichtlinie.
Das Feld
propertiesist ein leeres Array. Es enthält keine Informationen zu der Richtlinie vor der DROP-Operation.
Tag-Referenzen auf einer Spalte verfolgen¶
Fragen Sie die Spalte object_modified_by_ddl ab, um zu überwachen, wie ein Tag auf eine Spalte gesetzt ist.
Als Administrator der Tabelle können Sie ein Tag auf eine Spalte setzen, das Tag wieder entfernen und das Tag mit einem anderen Zeichenfolgenwert aktualisieren:
Ändern Sie als Data Engineer den Tag-Wert:
Fragen Sie die ACCESS_HISTORY-Ansicht ab, um die Änderungen zu überwachen:
Rückgabewerte:
Call a stored procedure¶
Angenommen die folgende gespeicherte Prozedur ist im Schema namens mydb.procedures gespeichert:
Der direkte Aufruf von my_procedure führt dazu, dass die Details der Prozedur sowohl in der Spalte direct_objects_accessed als auch in der Spalte base_objects_accessed wie folgt erfasst werden:
Dieses Beispiel ist analog zum Aufrufen einer UDF (unter diesem Thema).
Ancestor queries with stored procedures¶
Sie können die Spalten parent_query_id und root_query_id verwenden, um zu verstehen, wie Aufrufe gespeicherter Prozeduren zueinander in Beziehung stehen.
Angenommen, Sie haben drei verschiedene Anweisungen für gespeicherte Prozeduren und führen diese in folgender Reihenfolge aus:
Bei einer Abfrage auf der Ansicht ACCESS_HISTORY werden die Informationen wie folgt erfasst:
Die erste Zeile entspricht dem Aufruf der zweiten Prozedur namens
myproc_parent, wie in der Spaltedirect_objects_accessedgezeigt.Die Spalten
parent_query_idundroot_query_idgeben NULL zurück, da Sie diese gespeicherte Prozedur direkt aufgerufen haben.Die zweite Zeile entspricht der Abfrage, die die erste Prozedur namens
myproc_childaufruft, wie in der Spaltedirect_objects_accessed columnangegeben.Die Spalten
parent_query_idundroot_query_idgeben dieselbe Abfrage-ID zurück, da die Abfrage, diemyproc_childaufruft, von der Abfrage initiiert wurde, diemyproc_parentaufruft, die Sie direkt aufgerufen haben.Die dritte Zeile entspricht der Abfrage, die in der Prozedur
myproc_childauf die Tabellemytablezugreift, wie in der Spaltedirect_objects_accessedangegeben.Die Spalte
parent_query_idgibt die Abfrage-ID der Abfrage zurück, die aufmytablezugegriffen hat, was einem Aufruf vonmyproc_childentspricht. Diese gespeicherte Prozedur wurde durch die Abfrage gestartet, diemyproc_parentaufruft. Sie wird in der Spalteroot_query_idangezeigt.
Sequence¶
Betrachten Sie die folgende SQL-Anweisung, die eine Sequenz erstellt:
Das Erstellen dieser Sequenz führt zu folgendem Eintrag im Zugriffsverlauf:
Join¶
Ein Join in einer Abfrage wird im Zugriffsverlauf als joinObject in der Spalte direct_accessed_objects angezeigt. Das joinObject erscheint nicht in anderen Spalten, da der Zugriffsverlauf nur Joins aufzeichnet, die in der Abfrage ausdrücklich erwähnt werden.
Betrachten Sie zum Beispiel die folgende Abfrage, die die Tabelle t1 mit der Tabelle t2 verknüpft:
Die Ausführung dieser Abfrage führt dazu, dass für das Objekt t1 in der Spalte direct_accessed_objects Folgendes angezeigt wird:
Bemerkung
In diesem Beispiel würde der Zugriffsverlauf kein joinObject für das Objekt t2 enthalten, da es redundant zu den Informationen wäre, die vom joinObject für die Tabelle t1 bereitgestellt werden.