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 :
- D'autres API BigQuery, telles que l'API BigQuery Storage Read.
- Certaines commandes de l'outil de ligne de commande
bq
, telles que la commandebq head
. - Copier une table
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
- Pour en savoir plus sur les bonnes pratiques concernant les règles d'accès au niveau des lignes, consultez la page Bonnes pratiques en matière de sécurité au niveau des lignes dans BigQuery.