Impacto sobre las operaciones de escritura desde el control de acceso a nivel de columna

En esta página, se explica el impacto que se genera en las operaciones de escritura cuando usas el control de acceso a nivel de columnas 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 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 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 para 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 sentencias DELETE, UPDATE y MERGE, BigQuery verifica el permiso detallado de lector en las columnas analizadas. Estas columnas no se analizan a través de estas instrucciones, a menos que incluyas una cláusula WHERE o alguna otra cláusula o subconsulta que requiera la consulta para leer los datos.

Carga 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 la carga de datos no requiere la lectura de contenido de la tabla de destino.

La transmisión en 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 de origen. BigQuery no verifica si el usuario tiene permiso detallado de lector para 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 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 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? No
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? No
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 cuando se transmite con la API de transmisión insertAll heredada o la API de Storage Write. Para la captura de datos modificados de BigQuery, las etiquetas de política se verifican en las columnas de clave primaria.

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