Utiliser la sécurité au niveau des lignes avec d'autres fonctionnalités BigQuery

Ce document explique comment utiliser la sécurité et les accès au niveau des lignes avec d'autres fonctionnalités BigQuery.

Avant de lire ce document, familiarisez-vous avec la sécurité au niveau des lignes en consultant la page Présentation de la sécurité au niveau des lignes de BigQuery et Utiliser la sécurité au niveau des lignes.

Le filtre TRUE

Les règles d'accès au niveau des lignes peuvent filtrer les données de résultat que vous obtenez lors de l'exécution de requêtes. Pour exécuter des opérations non liées aux requêtes, telles que les instructions LMD, vous avez besoin d'un accès complet à toutes les lignes de la table. L'accès complet est accordé à l'aide d'une règle d'accès aux lignes avec l'expression de filtre définie sur TRUE. Cette règle d'accès au niveau des lignes est appelée filtre TRUE.

Tout utilisateur peut disposer du filtre TRUE, y compris d'un compte de service.

Exemples d'opérations non liées aux requêtes :

Exemple de filtre TRUE

CREATE ROW ACCESS POLICY all_access ON project.dataset.table1
GRANT TO ("group:all-rows-access@example.com")
FILTER USING (TRUE);

Fonctionnalités compatibles avec le filtre TRUE

Lorsque vous utilisez une opération DML sur une table protégée par des règles d'accès aux lignes, vous devez utiliser un filtre TRUE, ce qui implique l'accès à l'ensemble de la table. Toutes les opérations qui ne modifient pas le schéma de la table conservent les règles d'accès aux lignes de la table.

Par exemple, l'instruction ALTER TABLE RENAME TO copie les règles d'accès aux lignes de la table d'origine vers la nouvelle table. Par exemple, l'instruction TRUNCATE TABLE supprime toutes les lignes d'une table, mais conserve le schéma de la table ainsi que toutes les règles d'accès aux lignes.

Tâches de copie

Pour copier une table avec une ou plusieurs règles d'accès au niveau des lignes, vous devez d'abord disposer d'un accès par filtre TRUE sur la table source. Toutes les règles d'accès au niveau des lignes de la table source sont également copiées dans la nouvelle table de destination. Si vous copiez une table source sans règles d'accès au niveau des lignes dans une table de destination qui dispose de règles d'accès au niveau des lignes, les règles d'accès au niveau des lignes sont supprimées de la table de destination, à moins d'utiliser l'option --append_table ou d'avoir défini "writeDisposition": "WRITE_APPEND".

Les copies interrégionales sont autorisées, et toutes les règles sont copiées. Les requêtes suivantes peuvent être interrompues une fois la copie terminée si elles contiennent des références de table non valides dans les règles de sous-requêtes.

Les règles d'accès au niveau des lignes d'une table doivent porter des noms uniques. Un conflit entre les noms des règles d'accès au niveau des lignes lors de la copie entraîne une erreur de saisie non valide.

Autorisations requises pour copier une table avec une règle d'accès au niveau des lignes

Pour copier une table avec une ou plusieurs règles d'accès au niveau des lignes, vous devez disposer des autorisations suivantes, en plus des rôles permettant de copier des tables et des partitions.

Autorisation Ressource
bigquery.rowAccessPolicies.list La table source.
bigquery.rowAccessPolicies.getIamPolicy La table source.
Le filtre TRUE La table source.
bigquery.rowAccessPolicies.create La table de destination.
bigquery.rowAccessPolicies.setIamPolicy La table de destination.

Tabledata.list dans l'API BigQuery

Vous avez besoin d'un accès avec le filtre TRUE pour utiliser la méthode tabledata.list de l'API BigQuery sur une table dotée de règles d'accès au niveau des lignes.

LMD

Pour exécuter une instruction LMD qui met à jour une table disposant de règles d'accès au niveau des lignes, vous devez disposer d'un accès avec le filtre TRUE pour la table.

Plus précisément, les instructions MERGE interagissent avec les règles d'accès au niveau des lignes comme suit :

  • Si une table cible contient des règles d'accès au niveau des lignes, vous devez disposer d'un filtre TRUE pour accéder à la table cible.
  • Si une table source contient des règles d'accès au niveau des lignes, l'instruction MERGE n'agit que sur les lignes visibles par l'utilisateur.

Instantanés de table

Les instantanés de table sont compatibles avec la sécurité au niveau des lignes. Les autorisations dont vous avez besoin pour la table de base (table source) et l'instantané de la table (table de destination) sont décrites dans la section Autorisations requises pour copier une table avec une règle d'accès au niveau de la ligne.

Table BigQuery avec colonnes JSON

Les règles d'accès au niveau des lignes ne peuvent pas être appliquées aux colonnes JSON. Pour en savoir plus sur les limites de la sécurité au niveau des lignes, consultez la section Limites.

Graphique d'exécution

Vous ne pouvez pas utiliser le graphique d'exécution des requêtes pour les jobs avec des règles d'accès au niveau des lignes.

Tâches d'extraction

Si une table dispose de règles d'accès au niveau des lignes, seules les données que vous pouvez afficher sont exportées vers Cloud Storage lorsque vous exécutez une tâche d'extraction.

Tables partitionnées et en cluster

La sécurité au niveau des lignes ne participe pas à l'élimination des requêtes, qui constitue une fonctionnalité des tables partitionnées.

Bien que la sécurité au niveau des lignes soit compatible avec les tables partitionnées et en cluster, les règles d'accès au niveau des lignes qui filtrent les données des lignes ne sont pas appliquées lors de l'élimination des partitions. Vous pouvez toujours éliminer des partitions dans une table qui utilise la sécurité au niveau des lignes en spécifiant une clause WHERE qui agit sur la colonne de partition. De même, les règles d'accès au niveau des lignes ne créent aucun avantage en termes de performances pour les requêtes sur les tables en cluster, mais elles n'interfèrent pas avec les autres filtres que vous appliquez.

L'élimination des requêtes est effectuée lors de l'exécution des règles d'accès au niveau des lignes à l'aide des filtres avec les règles.

Renommer une table

Vous n'avez pas besoin d'accéder au filtre TRUE pour renommer une table avec une ou plusieurs règles d'accès aux lignes. Vous pouvez renommer une table avec une instruction LDD.

Vous pouvez également copier une table et lui attribuer un nom différent. Si la table source est associée à une règle d'accès au niveau des lignes, consultez la section Tâches de copie de table de cette page pour plus d'informations.

Mises à jour en continu

Pour effectuer des opérations UPDATE ou DELETE de table de flux avec la capture des données modifiées, vous devez disposer d'un accès avec le filtre TRUE.

Fonctionnalité temporelle

Seul un administrateur de table peut accéder aux données de l'historique d'une table qui dispose ou a déjà eu des règles d'accès au niveau des lignes. Les autres utilisateurs obtiennent une erreur access denied s'ils utilisent un décorateur de fonctionnalité temporelle sur une table qui a eu un accès au niveau des lignes. Pour en savoir plus, consultez la section Fonctionnalité temporelle et accès au niveau des lignes.

Vues logiques, matérialisées et autorisées

Cette section décrit les différents types de vues BigQuery et leur interaction avec la sécurité au niveau des lignes.

Vues logiques ou matérialisées

Les vues logiques ou matérialisées sont créées à partir de requêtes sur des tables. Les résultats de la requête sont généralement un sous-ensemble des données de la table.

Les données affichées dans les deux types de vues sont filtrées en fonction des règles d'accès au niveau des lignes de la table source sous-jacente. Toutefois, vous ne pouvez pas référencer de vues ni de vues matérialisées dans des règles d'accès au niveau des lignes.

Performances des vues matérialisées

En outre, lorsqu'une vue matérialisée est dérivée d'une table sous-jacente dotée de règles d'accès au niveau des lignes, les performances des requêtes sont identiques à celles obtenues lorsque vous interrogez la source. directement. Entre autres, si la table source présente une sécurité au niveau des lignes, vous ne verrez pas les avantages en termes de performances consistant à interroger une vue matérialisée par rapport à l'interrogation de la table source.

Vues autorisées

Vous pouvez également autoriser une vue logique ou matérialisée, ce qui signifie partager la vue avec des utilisateurs ou des groupes (principaux) spécifiques. Les principaux peuvent ensuite interroger une vue, mais n'ont pas accès à la table sous-jacente. Pour en savoir plus, consultez la page Vues autorisées.

Requêtes génériques

Les requêtes génériques sur les tables contenant des règles d'accès au niveau des lignes échouent et renvoient une erreur INVALID_INPUT.

Étape suivante