Sicherheit auf Zeilenebene mit anderen BigQuery-Features verwenden
In diesem Dokument wird gezeigt, wie Sie die Zugriffssicherheit auf Zeilenebene mit anderen BigQuery-Features verwenden.
Bevor Sie dieses Dokument lesen, machen Sie sich mit dem Konzept der Sicherheit auf Zeilenebene vertraut, indem Sie Einführung in BigQuery-Sicherheit auf Zeilenebene und Mit Sicherheit auf Zeilenebene arbeiten lesen.
Der Filter TRUE
.
Mit den Richtlinien für den Zugriff auf Zeilenebene können Sie die Ergebnisdaten filtern, die beim Ausführen von Abfragen angezeigt werden. Zum Ausführen von Nicht-Abfragevorgängen wie DML benötigen Sie uneingeschränkten Zugriff auf alle Zeilen der Tabelle. Vollzugriff wird durch Verwendung einer Zeilenzugriffsrichtlinie mit dem Filterausdruck TRUE
gewährt. Diese Zugriffsrichtlinie auf Zeilenebene wird als TRUE
-Filter bezeichnet.
Jeder Nutzer kann TRUE
-Filterzugriff erhalten, auch ein Dienstkonto.
Beispiele für Nicht-Abfragevorgänge sind:
- Andere BigQuery APIs, z. B. die BigQuery Storage Read API.
- Einige Befehle des
bq
-Befehlszeilentools, z. B. der Befehlbq head
. - Tabelle kopieren
Beispiel für TRUE
-Filter
CREATE ROW ACCESS POLICY all_access ON project.dataset.table1
GRANT TO ("group:all-rows-access@example.com")
FILTER USING (TRUE);
Features, die mit dem TRUE
-Filter funktionieren
Wenn Sie einen DML-Vorgang auf einer Tabelle ausführen, die durch Zeilenzugriffsrichtlinien geschützt ist, müssen Sie einen TRUE
-Filter verwenden, der Zugriff auf die gesamte Tabelle impliziert. Bei allen Vorgängen, die das Tabellenschema nicht ändern, bleiben alle Zugriffsrichtlinien für Zeilen in der Tabelle erhalten.
Mit der Anweisung ALTER TABLE RENAME
TO
werden beispielsweise Zugriffsrichtlinien für Zeilen aus der ursprünglichen Tabelle in die neue Tabelle kopiert.
Mit der Anweisung TRUNCATE
TABLE
werden beispielsweise alle Zeilen aus einer Tabelle entfernt, das Tabellenschema und alle Zugriffsrichtlinien für Zeilen bleiben jedoch erhalten.
Kopierjobs
Zum Kopieren einer Tabelle mit einer oder mehreren Zugriffsrichtlinien auf Zeilenebene müssen Sie zuerst den TRUE
-Filterzugriff für die Quelltabelle gewähren. Alle Zugriffsrichtlinien auf Zeilenebene in der Quelltabelle werden auch in die neue Zieltabelle kopiert. Wenn Sie eine Quelltabelle ohne Zugriffsrichtlinien auf Zeilenebene in eine Zieltabelle mit Zugriffsrichtlinien auf Zeilenebene kopieren, werden die Zugriffsrichtlinien auf Zeilenebene aus der Zieltabelle entfernt, es sei denn, das Flag --append_table
wird verwendet oder "writeDisposition": "WRITE_APPEND"
ist festgelegt.
Regionenübergreifende Kopien sind zulässig und alle Richtlinien werden kopiert. Nachfolgende Abfragen können nach Abschluss des Kopiervorgangs fehlerhaft werden, wenn die Abfragen ungültige Tabellenverweise in Unterabfragerichtlinien enthalten.
Zugriffsrichtlinien auf Zeilenebene für eine Tabelle müssen eindeutige Namen haben. Ein Konflikt mit den Namen der Zugriffsrichtlinien auf Zeilenebene während des Kopiervorgangs führt zu einem ungültigen Eingabefehler.
Erforderliche Berechtigungen zum Kopieren einer Tabelle mit einer Zugriffsrichtlinie auf Zeilenebene
Zum Kopieren einer Tabelle mit einer oder mehreren Zugriffsrichtlinien auf Zeilenebene benötigen Sie neben den Rollen zum Kopieren von Tabellen und Partitionen die folgenden Berechtigungen.
Berechtigung | Ressource |
---|---|
bigquery.rowAccessPolicies.list
|
Die Quelltabelle. |
bigquery.rowAccessPolicies.getIamPolicy
|
Die Quelltabelle. |
Der TRUE -Filter.
|
Die Quelltabelle. |
bigquery.rowAccessPolicies.create
|
Die Zieltabelle. |
bigquery.rowAccessPolicies.setIamPolicy
|
Die Zieltabelle. |
Tabledata.list in der BigQuery API
Sie benötigen TRUE
-Filterzugriff, damit Sie die tabledata.list
-Methode in der BigQuery API für eine Tabelle mit Zugriffsrichtlinien auf Zeilenebene verwenden können.
DML
Zum Ausführen einer DML-Anweisung, die eine Tabelle mit Zugriffsrichtlinien auf Zeilenebene aktualisiert, benötigen Sie TRUE
-Filterzugriff für die Tabelle.
Insbesondere interagieren MERGE
-Anweisungen mit Zugriffsrichtlinien auf Zeilenebene in der folgenden Weise:
- Wenn eine Zieltabelle Zugriffsrichtlinien auf Zeilenebene enthält, benötigen Sie
TRUE
-Filterzugriff für die Zieltabelle. - Wenn eine Quelltabelle Zugriffsrichtlinien auf Zeilenebene enthält, gilt die Anweisung
MERGE
nur für Zeilen, die für den Nutzer sichtbar sind.
Tabellen-Snapshots
Tabellen-Snapshots unterstützen die Sicherheit auf Zeilenebene. Die erforderlichen Berechtigungen für die Basistabelle (Quelltabelle) und den Tabellen-Snapshot (Zieltabelle) werden unter Erforderliche Berechtigungen zum Kopieren einer Tabelle mit einer Zugriffsrichtlinie auf Zeilenebene erläutert.
BigQuery-Tabelle mit JSON-Spalten
Zugriffsrichtlinien auf Zeilenebene können nicht auf JSON-Spalten angewendet werden. Weitere Informationen zu den Einschränkungen für die Sicherheit auf Zeilenebene finden Sie unter Einschränkungen.
Ausführungsgrafik
Sie können den Abfrageausführungsgraphen nicht für Jobs mit Zugriffsrichtlinien auf Zeilenebene verwenden.
Extrahierungsjobs
Wenn für eine Tabelle Zugriffsrichtlinien auf Zeilenebene festgelegt sind, werden nur die Daten, die Sie sehen können, nach Cloud Storage exportiert, wenn Sie einen Extrahierungsjob ausführen.
Partitionierte und geclusterte Tabellen
Die Sicherheit auf Zeilenebene ist nicht Teil der Abfragebereinigung, einer Funktion von partitionierten Tabellen.
Die Sicherheit auf Zeilenebene ist zwar mit partitionierten und geclusterten Tabellen kompatibel, die Zugriffsrichtlinien auf Zeilenebene, nach denen Zeilendaten gefiltert werden, werden jedoch nicht während der Partitionsbereinigung angewendet. Sie können die Partitionsbereinigung auch für eine Tabelle verwenden, die Sicherheit auf Zeilenebene verwendet. Geben Sie dazu eine WHERE
-Klausel an, die auf die Partitionsspalte angewendet wird. Auch die Zugriffsrichtlinien auf Zeilenebene selbst bieten keine Leistungsvorteile für Abfragen von geclusterten Tabellen, beeinträchtigen jedoch nicht andere von Ihnen angewendete Filter.
Die Abfragebereinigung wird während der Ausführung von Zugriffsrichtlinien auf Zeilenebene mithilfe der Filter mit den Richtlinien durchgeführt.
Tabelle umbenennen
Sie benötigen keinen TRUE
-Filterzugriff, um eine Tabelle mit einer oder mehreren Zugriffsrichtlinien auf Zeilenebene umzubenennen. Sie können eine Tabelle mit einer DDL-Anweisung umbenennen.
Alternativ können Sie außerdem eine Tabelle kopieren und der Zieltabelle einen anderen Namen geben. Wenn die Quelltabelle eine Zugriffsrichtlinie auf Zeilenebene enthält, finden Sie weitere Informationen unter Tabellenkopierjobs.
Streaming-Updates
Um UPDATE
- oder DELETE
-Vorgänge für die Streamingtabelle mit Change Data Capture auszuführen, benötigen Sie Filterzugriff vom Typ TRUE
.
Zeitreise
Nur ein Tabellenadministrator kann auf Verlaufsdaten für eine Tabelle zugreifen, die Zugriffsrichtlinien auf Zeilenebene hat oder hatte. Andere Nutzer erhalten die Fehlermeldung access
denied
, wenn sie einen Zeitreise-Decorator für eine Tabelle mit Zugriff auf Zeilenebene verwenden. Weitere Informationen finden Sie unter Zeitreise und Zugriff auf Zeilenebene.
Logische, materialisierte und autorisierte Ansichten
In diesem Abschnitt werden verschiedene Arten von BigQuery-Ansicht beschrieben und wie sie mit der Sicherheit auf Zeilenebene interagieren.
Logische oder materialisierte Ansichten
Logische oder materialisierte Ansichten werden aus Abfragen an Tabellen erstellt. Die Abfrageergebnisse sind in der Regel eine Teilmenge der Tabellendaten.
Die in beiden Ansichtstypen angezeigten Daten werden entsprechend den Zugriffsrichtlinien der zugrunde liegenden Quelltabelle gefiltert. Sie können in Zugriffsrichtlinien auf Zeilenebene jedoch nicht auf Ansichten oder materialisierte Ansichten verweisen.
Leistung von materialisierten Ansichten
Wenn eine materialisierte Ansicht aus einer zugrunde liegenden Tabelle abgeleitet wird, die Zugriffsrichtlinien auf Zeilenebene enthält, entspricht die Abfrageleistung außerdem der direkten Abfrage der Quelltabelle. Mit anderen Worten: Wenn die Quelltabelle Sicherheit auf Zeilenebene bietet, haben Sie nicht die typischen Leistungsvorteile der Abfrage einer materialisierten Ansicht im Vergleich zur Abfrage der Quelltabelle.
Autorisierte Ansichten
Sie können auch eine logische oder materialisierte Ansicht autorisieren, d. h. die Ansicht für bestimmte Nutzer oder Gruppen (Principals) freigeben. Hauptkonten können dann eine Ansicht abfragen, haben aber keinen Zugriff auf die zugrunde liegende Tabelle. Weitere Informationen zu Autorisierte Ansichten.
Platzhalterabfragen
Platzhalterabfragen für Tabellen mit Zugriffsrichtlinien auf Zeilenebene schlagen mit dem Fehler INVALID_INPUT
fehl.
Nächste Schritte
- Informationen zu den Best Practices für Zugriffsrichtlinien auf Zeilenebene finden Sie unter Best Practices für die Sicherheit auf Zeilenebene in BigQuery.