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 | OBLIGATORIO | policy-tag-1 |
credit_score |
INTEGER | NULLABLE | policy-tag-2 |
ssn |
STRING | NULLABLE | 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. 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? | Sí | 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? | Sí | 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? | Sí | 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? | Sí | No |
Columnas verificadas | customers.user_id customers.credit_score customers.ssn |
customers_dest.user_id customers_dest.credit_score customers_dest.ssn |