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:

Beispiel

Den Filter TRUE erstellen

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

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 Erforderliche Berechtigungen zum Kopieren einer Tabelle ohne Zugriffsrichtlinie auf Zeilenebene 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.

BigQuery BI Engine und Looker Studio

BigQuery BI Engine beschleunigt keine Abfragen, die für Tabellen mit einer oder mehreren Zugriffsrichtlinien auf Zeilenebene ausgeführt werden. Diese Abfragen werden in BigQuery als Standardabfragen ausgeführt.

Die Daten in einem Looker Studio-Dashboard werden gemäß den Zugriffsrichtlinien der zugrunde liegenden Quelltabelle auf Zeilenebene gefiltert.

Sicherheit auf Spaltenebene

Die Sicherheit auf Zeilen- und Spaltenebene, die sowohl die Zugriffssteuerung auf Spaltenebene als auch die dynamische Datenmaskierung umfasst, sind vollständig kompatibel.

Die wichtigsten Punkte sind:

  • Sie können eine Zugriffsrichtlinie auf Zeilenebene anwenden, um Daten in beliebigen Spalten zu filtern, auch wenn Sie keinen Zugriff auf die Daten dieser Spalte haben.
    • Bei Versuchen mit der Zugriffsrichtlinie auf Unterabfrage-Zeilenebene auf diese Spalten zuzugreifen erfolgt ein Fehler, der angibt, dass der Zugriff verweigert wird. Diese Spalten gelten nicht als systemreferenzierte Spalten.
    • Bei Versuchen, mit der Zugriffsrichtlinie ohne Unterabfragen auf Zeilenebene auf die Spalten zuzugreifen, wird die Sicherheit auf Spaltenebene umgangen.
  • Wenn die Spalte aufgrund der Sicherheit auf Spaltenebene eingeschränkt ist und die Spalte in der SELECT-Anweisung der Abfrage oder in den Zugriffsrichtlinien auf Unterabfrage-Zeilenebene benannt wird, erhalten Sie eine Fehlermeldung.
  • Die Sicherheit auf Spaltenebene gilt auch mit einer SELECT *-Abfrageanweisung. SELECT * wird genauso behandelt wie eine Abfrage, die explizit eine eingeschränkte Spalte benennt.

Beispiel für die Interaktion der Sicherheit auf Zeilen- und Spaltenebene

In diesem Beispiel wird gezeigt, wie Sie eine Tabelle sichern und dann abfragen.

Die Daten

Angenommen, Sie haben die DataOwner-Rolle für ein Dataset mit dem Namen my_dataset, das eine dreispaltige Tabelle namens my_table enthält. Die Tabelle enthält die Daten der folgenden Tabelle.

In diesem Beispiel ist ein Nutzer Alice, deren E-Mail-Adresse alice@example.com lautet. Ein zweiter Nutzer ist Bob, ein Kollege von Alice.

Rang Obst Farbe
1 Apfel Rot
2 Orange Orange
3 Zitrone Gelb
4 Limette Grün

Die Sicherheit

Sie möchten, dass Alice alle Zeilen mit ungeraden Zahlen in der Spalte rank sehen kann, aber keine Zeilen mit geraden Zahlen. Sie möchten nicht, dass Bob eine Zeile sieht – egal, ob ungerade oder ungerade. Sie möchten, dass niemand die Daten in der Spalte fruit sieht.

  • Wenn Sie verhindern möchten, dass Alice die Zeilen mit geraden Zahlen sieht, erstellen Sie eine Zugriffsrichtlinie auf Zeilenebene mit einem Filterausdruck, der auf den Daten in der Spalte rank basiert. Damit Bob keine geraden oder ungeraden Zeilen sieht, nehmen Sie ihn nicht in die Empfängerliste auf.

    CREATE ROW ACCESS POLICY only_odd ON my_dataset.my_table GRANT
    TO ('user:alice@example.com') FILTER USING (MOD(rank, 2) = 1);
    
  • Wenn Sie verhindern möchten, dass alle Nutzer Daten in der Spalte fruit sehen, erstellen Sie ein Tag für Sicherheitsrichtlinien auf Spaltenebene, das allen Nutzern den Zugriff auf diese Daten verweigert.

Schließlich können Sie den Zugriff auf die Spalte namens color auf zwei Arten einschränken: Die Spalte wird über ein Sicherheitsrichtlinien-Tag auf Spaltenebene gesteuert, das den gesamten Zugriff verhindert. und sie wird von einer Zugriffsrichtlinie auf Zeilenebene beeinflusst, die einige Zeilendaten in der Spalte color filtert.

  • Durch diese zweite Zugriffsrichtlinie auf Zeilenebene werden nur Zeilen mit dem Wert green in der Spalte color angezeigt.

    CREATE ROW ACCESS POLICY only_green ON my_dataset.my_table
    GRANT TO ('user:alice@example.com') FILTER USING (color="green");
    

Abfrage von Bob

Wenn Alices Kollege Bob versucht, Daten von my_dataset.my_table abzufragen, werden keine Zeilen angezeigt, da Bob nicht in der Liste der berechtigten Personen einer Zugriffsrichtlinie auf Zeilenebene für die Tabelle enthalten ist.

Abfrage my_dataset.my_table Kommentare
rank

(Einige Daten sind von der Zeilenzugriffsrichtlinie only_odd betroffen.)
fruit

(Alle Daten sind durch ein CLS-Richtlinien-Tag gesichert.)
color

Alle Daten sind durch ein CLS-Richtlinien-Tag gesichert und einige Daten sind von den Zeilenzugriffsrichtlinie only_green betroffen.)
SELECT rank FROM my_dataset.my_table
(0) Zeilen zurückgegeben.
Bob ist nicht in der Empfängerliste der Zugriffsrichtlinie auf Zeilenebene aufgeführt. Daher ist diese Abfrage erfolgreich, es werden jedoch keine Zeilendaten zurückgegeben.

Es wird Bob eine Nachricht angezeigt, dass seine Ergebnisse möglicherweise von der Zeilenzugriffsrichtlinie gefiltert werden.

Abfragen von Alice

Die Ergebnisse der Abfrage von Alice für den Zugriff auf Daten von my_dataset.my_table hängen von der ausgeführten Abfrage und der Sicherheit ab, wie in der folgenden Tabelle dargestellt.

Abfrage my_dataset.my_table Kommentare
rank

(Einige Daten sind von der Zeilenzugriffsrichtlinie only_odd betroffen.)
fruit

(Alle Daten sind durch ein CLS-Richtlinien-Tag gesichert.)
color

Alle Daten sind durch ein CLS-Richtlinien-Tag gesichert und einige Daten sind von den Zeilenzugriffsrichtlinie only_green betroffen.)

SELECT rank FROM my_dataset.my_table


(2) Zeilen mit ungeraden Zahlen werden zurückgegeben.
Alice ist in der Empfängerliste für die Zugriffsrichtlinie only_odd auf Zeilenebene für Daten in der Rangspalte aufgeführt. Daher sieht Alice nur die Datenzeilen mit ungeraden Zahlen. Zeilen mit geraden Zahlen werden durch die Zugriffsrichtlinie auf Zeilenebene namens only_odd ausgeblendet.

Erika erhält eine Nachricht, dass die Ergebnisse möglicherweise durch die Zugriffsrichtlinie für Zeilen gefiltert wurde.

SELECT fruit FROM my_dataset.my_table


access denied

Die Spalte fruit wurde in der Abfrage explizit benannt.

Die Sicherheit auf Spaltenebene gilt.

Zugriff wird verweigert

SELECT color FROM my_dataset.my_table


access denied

Die Spalte color wurde in der Abfrage explizit benannt.

Die Sicherheit auf Spaltenebene wird angewendet, bevor die Zugriffsrichtlinie auf Zeilenebene für Daten in der Spalte color gilt.

Zugriff wird verweigert

SELECT rank, fruit FROM my_dataset.my_table


access denied

Die Spalte „fruit“ wurde in der Abfrage explizit benannt.

Die Sicherheit auf Spaltenebene wird angewendet, bevor die Zugriffsrichtlinie auf Zeilenebene für Daten in der Spalte rank gilt.

Zugriff wird verweigert

SELECT rank, color FROM my_dataset.my_table


access denied

Die Spalte color wurde in der Abfrage explizit benannt

Die Sicherheit auf Spaltenebene in der Spalte color gilt, bevor Zugriffsrichtlinien auf Zeilenebene für Daten in den Spalten rank und color aktiv sind.

Zugriff wird verweigert.

SELECT fruit, color FROM my_dataset.my_table


access denied


access denied

Die Spalten fruit und color wurden in der Abfrage explizit benannt.

Die Sicherheit auf Spaltenebene für die Spalten fruit und color wird angewendet, bevor die Zugriffsrichtlinie für Zeilen auf die Daten in der Spalte color gilt.

Zugriff wird verweigert

SELECT * FROM my_dataset.my_table


access denied


access denied

Die Spalten fruit und color wurden implizit mit „SELECT *“ in der Abfrage benannt.

Die Sicherheit auf Spaltenebene für die Spalten fruit und color gilt, bevor die Zugriffsrichtlinien für Zeilen auf Daten in den Spalten rank und color aktiviert sind.

Zugriff wird verweigert.

TRUE-Filterzugriff

Wie im Abschnitt zum TRUE-Filterzugriff erläutert, können Alice oder Bob mit TRUE-Filterzugriff alle Zeilen in der Tabelle sehen und ihn in Nicht-Abfragejobs verwenden. Wenn für die Tabelle jedoch eine Sicherheit auf Spaltenebene festgelegt ist, gilt diese weiterhin und kann sich auf die Ergebnisse auswirken.

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.

Legacy-SQL

Zugriffsrichtlinien auf Zeilenebene sind nicht mit Legacy-SQL kompatibel. Abfragen von Tabellen mit Zugriffsrichtlinien auf Zeilenebene müssen GoogleSQL verwenden. Legacy-SQL-Abfragen werden abgelehnt.

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 TRUE-Filterzugriff nicht, 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.

Ansichten und materialisierte Ansichten

Die in einer Ansicht oder einer materialisierten Ansicht angezeigten Daten werden entsprechend den Zugriffsrichtlinien der zugrunde liegenden Quelltabelle gefiltert.

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.

Sie können in Zugriffsrichtlinien auf Zeilenebene nicht auf Ansichten oder materialisierte Ansichten verweisen.

Platzhalterabfragen

Platzhalterabfragen für Tabellen mit Zugriffsrichtlinien auf Zeilenebene schlagen mit dem Fehler INVALID_INPUT fehl.

Nächste Schritte