Efecto en las escrituras del control de acceso a nivel de columna

En esta página se explica el impacto en las escrituras cuando se usa el control de acceso a nivel de columna de BigQuery para restringir el acceso a los datos a nivel de columna. Para obtener información general sobre el control de acceso a nivel de columna, consulta el artículo Introducción al control de acceso a nivel de columna de BigQuery.

El control de acceso a nivel de columna requiere que un usuario tenga permiso de lectura para las columnas protegidas por etiquetas de política. Algunas operaciones de escritura necesitan leer datos de columnas antes de escribir en una columna. En esas operaciones, BigQuery comprueba el permiso de lectura del usuario para asegurarse de que tiene acceso a la columna. Por ejemplo, si un usuario actualiza datos que incluyen la escritura en una columna protegida, debe tener permiso de lectura para esa columna. Si el usuario inserta una nueva fila de datos que incluye la escritura en una columna protegida, no necesita acceso de lectura a la columna protegida. Sin embargo, el usuario que escriba una fila de este tipo no podrá leer los datos recién escritos a menos que tenga permiso de lectura para las columnas protegidas.

En las siguientes secciones se proporcionan detalles sobre los diferentes tipos de operaciones de escritura. En los ejemplos de este tema se usan tablas customers con el siguiente esquema:

Nombre del campo Tipo Modo Etiqueta de política
user_id STRING REQUIRED policy-tag-1
credit_score INTEGER ADMITE VALORES NULOS policy-tag-2
ssn STRING ADMITE VALORES NULOS policy-tag-3

Usar el lenguaje de manipulación de datos (DML) de BigQuery

Insertar datos

En el caso de una instrucción INSERT, BigQuery no comprueba el permiso de lector pormenorizado en las etiquetas de política de las columnas analizadas ni de las actualizadas. Esto se debe a que INSERT no requiere leer ninguno de los datos de la columna. Sin embargo, aunque insertes valores correctamente en columnas en las que no tienes permiso de lectura, una vez insertados, los valores se protegerán como es debido.

Eliminar, actualizar y combinar datos

En el caso de las instrucciones DELETE, UPDATE y MERGE, BigQuery comprueba si se tiene el permiso de lector detallado en las columnas analizadas. Estas instrucciones no analizan las columnas a menos que incluyas una cláusula WHERE u otra cláusula o subconsulta que requiera que la consulta lea datos.

Cargando datos

Cuando se cargan datos en una tabla (por ejemplo, desde Cloud Storage o archivos locales), BigQuery no comprueba el permiso de lector detallado en las columnas de la tabla de destino. Esto se debe a que la carga de datos no requiere leer contenido de la tabla de destino.

La transmisión a BigQuery es similar a LOAD y INSERT. BigQuery te permite transmitir datos a una columna de una tabla de destino, aunque no tengas el permiso de lector detallado.

Copiar datos

En el caso de una operación de copia, BigQuery comprueba si el usuario tiene el permiso Lector pormenorizado en la tabla de origen. BigQuery no comprueba si el usuario tiene el permiso Lector pormenorizado para las columnas de la tabla de destino. Al igual que con LOAD, INSERT y el streaming, una vez que se haya completado la copia, no podrás leer los datos que se acaban de escribir, a menos que tengas el permiso de lectura detallado para las columnas de la tabla de destino.

Ejemplos de DML

INSERT

Ejemplo:

INSERT INTO customers VALUES('alice', 85, '123-456-7890');
Columnas de origen Actualizar columnas
¿Se han comprobado las etiquetas de política del rol Lector pormenorizado? N/A No
Columnas marcadas N/A user_id
credit_score
ssn

UPDATE

Ejemplo:

UPDATE customers SET credit_score = 0
  WHERE user_id LIKE 'alice%' AND credit_score < 30
Columnas de origen Actualizar columnas
¿Se han comprobado las etiquetas de política del rol Lector pormenorizado? No
Columnas marcadas user_id
credit_score
credit_score

DELETE

Ejemplo:

DELETE customers WHERE credit_score = 0
Columnas de origen Actualizar columnas
¿Se han comprobado las etiquetas de política del rol Lector pormenorizado? No
Columnas marcadas credit_score user_id
credit_score
ssn

Cargar ejemplos

Cargar datos desde un archivo local o Cloud Storage

Ejemplo:

load --source_format=CSV samples.customers \
  ./customers_data.csv \
  ./customers_schema.json
Columnas de origen Actualizar columnas
¿Se han comprobado las etiquetas de política del rol Lector pormenorizado? N/A No
Columnas marcadas N/A user_id
credit_score
ssn

Streaming

No se comprueban las etiquetas de políticas al transmitir contenido con la API de streaming insertAll antigua o con la API Storage Write. En el registro de cambios de datos de BigQuery, las etiquetas de política se comprueban en las columnas de clave principal.

Copiar ejemplos

Añadir datos a una tabla

Ejemplo:

cp -a samples.customers samples.customers_dest
Columnas de origen Actualizar columnas
¿Se han comprobado las etiquetas de política del rol Lector pormenorizado? No
Columnas marcadas customers.user_id
customers.credit_score
customers.ssn
customers_dest.user_id
customers_dest.credit_score
customers_dest.ssn

Guardar los resultados de una consulta en una tabla de destino

Ejemplo:

query --use_legacy_sql=false \
--max_rows=0 \
--destination_table samples.customers_dest \
--append_table "SELECT * FROM samples.customers LIMIT 10;"
Columnas de origen Actualizar columnas
¿Se han comprobado las etiquetas de política del rol Lector pormenorizado? No
Columnas marcadas customers.user_id
customers.credit_score
customers.ssn
customers_dest.user_id
customers_dest.credit_score
customers_dest.ssn