Impacto sobre las operaciones de escritura desde la seguridad a nivel de columna

En esta página, se explica el impacto que se genera en las escrituras cuando usas la seguridad a nivel de columnas de BigQuery para restringir el acceso a los datos a nivel de columna. Para obtener información general sobre la seguridad a nivel de columnas, consulta Introducción a la seguridad a nivel de columnas de BigQuery.

La seguridad a nivel de columnas requiere que un usuario tenga permiso de lectura en las columnas que están protegidas por etiquetas de política. Para algunas operaciones de escritura, es necesario leer los datos de una columna antes de escribir en ella. Para esas operaciones, BigQuery verifica el permiso de lectura del usuario con el fin de garantizar que tenga acceso a la columna. Por ejemplo, si un usuario realiza una actualización de datos para la que se debe escribir en una columna protegida, el usuario debe tener permiso de lectura en esa columna. Si el usuario inserta una fila de datos nueva para la que se debe escribir en una columna protegida, el usuario no necesita tener acceso de lectura en esa columna. Sin embargo, el usuario que escribe esa fila no podrá leer los datos recién escritos, a menos que tenga permiso de lectura en 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 OBLIGATORIA policy-tag-1
credit_score NÚMERO ENTERO ACEPTA VALOR NULL policy-tag-2
ssn STRING ACEPTA VALOR NULL policy-tag-3

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

Inserta datos

En el caso de una declaración INSERT, BigQuery no verifica el permiso detallado de lector en las etiquetas de política de las columnas analizadas o las columnas actualizadas. Esto se debe a que, para INSERT, no es necesario leer datos de la columna. Sin embargo, incluso si insertas valores con éxito en columnas en las que no tienes permiso de lectura, una vez que los insertas, estos se protegen como se espera.

Borra, actualiza y combina datos

En el caso de las declaraciones DELETE, UPDATE y MERGE, BigQuery verifica el permiso detallado de lector en las columnas analizadas y las columnas actualizadas. La declaración DELETE, aunque borre datos, primero analiza la tabla y, por lo tanto, su éxito puede ser condicional en los valores de la columna.

Cargar datos

Cuando cargas datos (por ejemplo, desde Cloud Storage o archivos locales) a una tabla, BigQuery no verifica el permiso detallado de lector en las columnas de la tabla de destino. Esto se debe a que para cargar datos no es necesario 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 tabla de destino, incluso si no tienes el permiso detallado de lector.

Copiar datos

Para una operación de copia, BigQuery verifica si el usuario tiene el permiso detallado de lector en la tabla fuente. BigQuery no verifica si el usuario tiene permiso detallado de lector en las columnas de la tabla de destino. Al igual que LOAD, INSERT y la transmisión, una vez que se complete la copia, no podrás leer los datos que se acaban de escribir, a menos que tengas el permiso detallado de lector a las columnas de la tabla de destino.

Ejemplos de DML

INSERT

Ejemplo:

INSERT INTO customers VALUES('alice', 85, '123-456-7890');
Columnas de origen Columnas actualizadas
¿Se verificó si las etiquetas de política tienen permiso detallado de lector? N/A No
Columnas verificadas 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 Columnas actualizadas
¿Se verificó si las etiquetas de política tienen permiso detallado de lector?
Columnas verificadas user_id
credit_score
credit_score

DELETE

Ejemplo:

DELETE customers WHERE credit_score = 0
Columnas de origen Columnas actualizadas
¿Se verificó si las etiquetas de política tienen permiso detallado de lector?
Columnas verificadas credit_score user_id
credit_score
ssn

Ejemplos de carga

Carga datos desde un archivo local o Cloud Storage

Ejemplo:

load --source_format=CSV samples.customers \
  ./customers_data.csv \
  ./customers_schema.json
Columnas de origen Columnas actualizadas
¿Se verificó si las etiquetas de política tienen permiso detallado de lector? N/A No
Columnas verificadas N/A user_id
credit_score
ssn

Transmisión

No se verifican las etiquetas de política durante la transmisión, ya sea una transmisión heredada o de Vortex.

Ejemplos de copia

Adjunta datos a una tabla existente

Ejemplo:

cp -a samples.customers samples.customers_dest
Columnas de origen Columnas actualizadas
¿Se verificó si las etiquetas de política tienen permiso detallado de lector? No
Columnas verificadas customers.user_id
customers.credit_score
customers.ssn
customers_dest.user_id
customers_dest.credit_score
customers_dest.ssn

Guarda los resultados de las consultas 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 Columnas actualizadas
¿Se verificó si las etiquetas de política tienen permiso detallado de lector? No
Columnas verificadas customers.user_id
customers.credit_score
customers.ssn
customers_dest.user_id
customers_dest.credit_score
customers_dest.ssn