Impact sur les opérations d'écriture avec le contrôle des accès au niveau des colonnes

Cette page explique l'impact sur les écritures de l'utilisation du contrôle des accès au niveau des colonnes de BigQuery pour restreindre l'accès aux données au niveau de la colonne. Pour obtenir des informations générales sur le contrôle des accès au niveau des colonnes, consultez la page Présentation du contrôle des accès au niveau des colonnes de BigQuery.

Le contrôle des accès au niveau des colonnes nécessite que l'utilisateur dispose d'une autorisation de lecture pour les colonnes qui sont protégées par des tags avec stratégie. Certaines opérations d'écriture doivent lire les données des colonnes avant de les écrire dans une colonne. Pour ces opérations, BigQuery vérifie l'autorisation de lecture de l'utilisateur pour s'assurer que celui-ci a accès à la colonne. Par exemple, si un utilisateur modifie des données et qu'il doit écrire dans une colonne protégée, il doit disposer d'une autorisation de lecture pour cette colonne protégée. Si l'utilisateur insère une nouvelle ligne de données et qu'il doit écrire dans une colonne protégée, il n'a pas besoin d'un accès en lecture pour la colonne protégée. Cependant, l'utilisateur qui écrit une telle ligne ne pourra pas lire les données nouvellement écrites, sauf s'il dispose de l'autorisation en lecture pour les colonnes protégées.

Les sections suivantes fournissent des détails sur les différents types d'opérations d'écriture. Les exemples de cette section utilisent des tables customers avec le schéma suivant :

Nom du champ Type Mode Tag avec stratégie
user_id STRING OBLIGATOIRE policy-tag-1
credit_score INTEGER NULLABLE policy-tag-2
ssn STRING NULLABLE policy-tag-3

Utiliser le langage de manipulation de données (LMD) BigQuery

Insérer des données

Pour une instruction INSERT, BigQuery ne vérifie pas l'autorisation "Lecteur détaillé" sur les tags avec stratégie pour les colonnes analysées ou pour les colonnes mises à jour. En effet, INSERT ne nécessite aucune lecture des données de la colonne. Toutefois, même si vous insérez correctement des valeurs dans des colonnes pour lesquelles vous ne disposez pas d'une autorisation de lecture, une fois insérées, les valeurs sont protégées comme prévu.

Supprimer, mettre à jour et fusionner des données

Pour les instructions DELETE, UPDATE et MERGE, BigQuery vérifie l'autorisation Lecteur détaillé sur les colonnes analysées. Les colonnes ne sont pas analysées par ces instructions, sauf si vous incluez une clause WHERE, ou une autre clause ou sous-requête nécessitant que la requête lise les données.

Chargement des données

Lors du chargement de données (par exemple, de Cloud Storage ou de fichiers locaux) vers une table, BigQuery ne vérifie pas l'autorisation de lecteur détaillé sur les colonnes de la table de destination. En effet, le chargement de données ne nécessite pas de lire le contenu de la table de destination.

Le streaming dans BigQuery est semblable à LOAD et INSERT. BigQuery vous permet de diffuser des données en flux continu dans une colonne de table de destination, même si vous ne disposez pas de l'autorisation "Lecteur détaillé".

Copie de données

Pour une opération de copie, BigQuery vérifie si l'utilisateur dispose de l'autorisation "Lecteur détaillé" sur la table source. BigQuery ne vérifie pas si l'utilisateur dispose de l'autorisation "Lecteur détaillé" sur les colonnes de la table de destination. Comme LOAD, INSERT et la diffusion en flux continu, une fois la copie terminée, vous ne pourrez pas lire les données qui viennent d'être écrites, sauf si vous disposez de l'autorisation de lecteur détaillé sur les colonnes de la table de destination.

Exemples de LMD

INSERT

Exemple :

INSERT INTO customers VALUES('alice', 85, '123-456-7890');
Colonnes sources Mettre à jour les colonnes
Tags avec stratégie vérifiés pour l'autorisation "Lecteur détaillé" ? N/A Non
Colonnes vérifiées N/A user_id
credit_score
ssn

UPDATE

Exemple :

UPDATE customers SET credit_score = 0
  WHERE user_id LIKE 'alice%' AND credit_score < 30
Colonnes sources Mettre à jour les colonnes
Tags avec stratégie vérifiés pour l'autorisation "Lecteur détaillé" ? Oui Non
Colonnes vérifiées user_id
credit_score
credit_score

DELETE

Exemple :

DELETE customers WHERE credit_score = 0
Colonnes sources Mettre à jour les colonnes
Tags avec stratégie vérifiés pour l'autorisation "Lecteur détaillé" ? Oui Non
Colonnes vérifiées credit_score user_id
credit_score
ssn

Exemples de chargement

Charger des données depuis un fichier local ou Cloud Storage

Exemple :

load --source_format=CSV samples.customers \
  ./customers_data.csv \
  ./customers_schema.json
Colonnes sources Mettre à jour les colonnes
Tags avec stratégie vérifiés pour l'autorisation "Lecteur détaillé" ? N/A Non
Colonnes vérifiées N/A user_id
credit_score
ssn

Streaming

Aucun tag avec stratégie n'est vérifié lors du streaming avec l'ancienne API de diffusion insertAll ou l'API Storage Write. Pour BigQuery, la capture des données modifiées est vérifiée dans les colonnes de clé primaire.

Copier des exemples

Ajouter des données à une table existante

Exemple :

cp -a samples.customers samples.customers_dest
Colonnes sources Mettre à jour les colonnes
Tags avec stratégie vérifiés pour l'autorisation "Lecteur détaillé" ? Oui Non
Colonnes vérifiées customers.user_id
customers.credit_score
customers.ssn
customers_dest.user_id
customers_dest.credit_score
customers_dest.ssn

Enregistrer des résultats de requête dans une table de destination

Exemple :

query --use_legacy_sql=false \
--max_rows=0 \
--destination_table samples.customers_dest \
--append_table "SELECT * FROM samples.customers LIMIT 10;"
Colonnes sources Mettre à jour les colonnes
Tags avec stratégie vérifiés pour l'autorisation "Lecteur détaillé" ? Oui Non
Colonnes vérifiées customers.user_id
customers.credit_score
customers.ssn
customers_dest.user_id
customers_dest.credit_score
customers_dest.ssn