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 |