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? | Sí | 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? | Sí | 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? | Sí | 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? | Sí | No |
Columnas marcadas | customers.user_id customers.credit_score customers.ssn |
customers_dest.user_id customers_dest.credit_score customers_dest.ssn |