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

Créer le 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

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 autorisations requises pour copier une table sans règle d'accès au niveau de la ligne.

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.

DML

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.

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 et vues matérialisées

Les données affichées dans une vue ou dans une vue matérialisée sont filtrées en fonction des règles d'accès au niveau des lignes de la table source sous-jacente.

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.

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.

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