Usar la seguridad a nivel de fila con otras funciones de BigQuery

En este documento se describe cómo usar la seguridad de acceso a nivel de fila con otras funciones de BigQuery.

Antes de leer este documento, familiarícese con la seguridad a nivel de fila leyendo los artículos Introducción a la seguridad a nivel de fila de BigQuery y Trabajar con la seguridad a nivel de fila.

El filtro TRUE

Las políticas de acceso a nivel de fila pueden filtrar los datos de los resultados que ves al ejecutar consultas. Para ejecutar operaciones que no sean consultas, como DML, necesitas acceso completo a todas las filas de la tabla. El acceso completo se concede mediante una política de acceso a filas con la expresión de filtro definida como TRUE. Esta política de acceso a nivel de fila se denomina filtro TRUE.

Se puede conceder acceso de TRUE a cualquier usuario, incluida una cuenta de servicio.

Estos son algunos ejemplos de operaciones que no son consultas:

Ejemplo de filtro TRUE

CREATE ROW ACCESS POLICY all_access ON project.dataset.table1
GRANT TO ("group:all-rows-access@example.com")
FILTER USING (TRUE);

Funciones que funcionan con el filtro TRUE

Cuando usas una operación de DML en una tabla protegida por políticas de acceso a las filas, debes usar un filtro TRUE, lo que implica el acceso a toda la tabla. Las operaciones que no modifiquen el esquema de la tabla conservarán las políticas de acceso a filas de la tabla.

Por ejemplo, la instrucción ALTER TABLE RENAME TO copia las políticas de acceso a filas de la tabla original en la nueva. Otro ejemplo es la instrucción TRUNCATE TABLE que elimina todas las filas de una tabla, pero mantiene el esquema de la tabla y las políticas de acceso a filas.

Tareas de copia

Para copiar una tabla que tenga una o varias políticas de acceso a nivel de fila, primero debes tener TRUEacceso de filtroTRUE en la tabla de origen. Todas las políticas de acceso a nivel de fila de la tabla de origen también se copian en la nueva tabla de destino. Si copias una tabla de origen sin políticas de acceso a nivel de fila en una tabla de destino que sí las tiene, estas políticas se eliminarán de la tabla de destino, a menos que se use la marca --append_table o se defina "writeDisposition": "WRITE_APPEND".

Se permiten las copias entre regiones y se copian todas las políticas. Es posible que las consultas posteriores no funcionen después de completar la copia si contienen referencias de tabla no válidas en las políticas de subconsultas.

Las políticas de acceso a nivel de fila de una tabla deben tener nombres únicos. Si se produce un conflicto en los nombres de las políticas de acceso a nivel de fila durante la copia, se produce un error de entrada no válida.

Permisos necesarios para copiar una tabla con una política de acceso a nivel de fila

Para copiar una tabla con una o varias políticas de acceso a nivel de fila, debes tener los siguientes permisos, además de los roles para copiar tablas y particiones.

Permiso Recurso
bigquery.rowAccessPolicies.list La tabla de origen.
bigquery.rowAccessPolicies.getIamPolicy La tabla de origen.
El filtro TRUE La tabla de origen.
bigquery.rowAccessPolicies.create La tabla de destino.
bigquery.rowAccessPolicies.setIamPolicy La tabla de destino.

Tabledata.list en la API de BigQuery

Necesitas acceso de filtro TRUE para usar el método tabledata.list en la API de BigQuery en una tabla con políticas de acceso a nivel de fila.

DML

Para ejecutar una instrucción DML que actualice una tabla que tenga políticas de acceso a nivel de fila, necesitas TRUE acceso de filtro a la tabla.

En concreto, las instrucciones MERGE interactúan con las políticas de acceso a nivel de fila de la siguiente manera:

  • Si una tabla de destino contiene políticas de acceso a nivel de fila, debes tener acceso de filtro TRUE a la tabla de destino.
  • Si una tabla de origen contiene políticas de acceso a nivel de fila, la instrucción MERGE solo se aplica a las filas que son visibles para el usuario.

Capturas de tablas

Las capturas de tablas admiten la seguridad a nivel de fila. Los permisos que necesitas para la tabla base (tabla de origen) y la captura de tabla (tabla de destino) se describen en Permisos necesarios para copiar una tabla con una política de acceso a nivel de fila.

Tabla de BigQuery con columnas JSON

Las políticas de acceso a nivel de fila no se pueden aplicar a las columnas JSON. Para obtener más información sobre las limitaciones de la seguridad a nivel de las filas, consulta Limitaciones.

Gráfico de ejecución

No puedes usar el gráfico de ejecución de consultas en trabajos con políticas de acceso a nivel de fila.

Tareas de extracción

Si una tabla tiene políticas de acceso a nivel de fila, solo se exportarán a Cloud Storage los datos que puedas ver cuando ejecutes un trabajo de extracción.

Tablas con particiones y agrupadas en clústeres

La seguridad a nivel de fila no participa en la poda de consultas, que es una función de las tablas particionadas.

Aunque la seguridad a nivel de fila es compatible con las tablas particionadas y en clúster, las políticas de acceso a nivel de fila que filtran los datos de las filas no se aplican durante la eliminación de particiones. Puedes seguir usando el recorte de particiones en una tabla que use seguridad a nivel de las filas especificando una cláusula WHERE que opere en la columna de partición. Del mismo modo, las políticas de acceso a nivel de fila no mejoran el rendimiento de las consultas en tablas agrupadas, pero no interfieren con otros filtros que apliques.

La poda de consultas se lleva a cabo durante la ejecución de las políticas de acceso a nivel de fila mediante los filtros de las políticas.

Cambiar el nombre de una tabla

No necesitas acceso de filtro TRUE para cambiar el nombre de una tabla que tenga una o varias políticas de acceso a filas. Puedes cambiar el nombre de una tabla con una declaración de DDL.

También puedes copiar una tabla y darle un nombre diferente a la tabla de destino. Si la tabla de origen tiene una política de acceso a nivel de fila, consulta la sección sobre tareas de copia de tablas de esta página para obtener más información.

Actualizaciones del flujo de actividades

Para realizar operaciones de UPDATE o DELETE en tablas de streaming con captura de datos de cambios, debes tener acceso de filtro TRUE.

Viaje en el tiempo

Solo un administrador de la tabla puede acceder al historial de datos de una tabla que tenga o haya tenido políticas de acceso a nivel de fila. Otros usuarios recibirán un error access denied si usan un decorador de viaje en el tiempo en una tabla que tenga acceso a nivel de fila. Para obtener más información, consulta Desplazamiento en el tiempo y acceso a nivel de fila.

Vistas lógicas, materializadas y autorizadas

En esta sección se describen los distintos tipos de vistas de BigQuery y cómo interactúan con la seguridad a nivel de fila.

Vistas lógicas o materializadas

Las vistas lógicas o materializadas se crean a partir de consultas en tablas. Los resultados de la consulta suelen ser un subconjunto de los datos de la tabla.

Los datos que se muestran en ambos tipos de vistas se filtran según las políticas de acceso a nivel de fila de la tabla de origen subyacente. Sin embargo, no puedes hacer referencia a vistas ni a vistas materializadas en políticas de acceso a nivel de fila.

Rendimiento de las vistas materializadas

Además, cuando una vista materializada se deriva de una tabla subyacente que tiene políticas de acceso a nivel de fila, el rendimiento de las consultas es el mismo que cuando se consulta la tabla de origen directamente. En otras palabras, si la tabla de origen tiene seguridad a nivel de fila, no verás las ventajas de rendimiento típicas de consultar una vista materializada en comparación con la consulta de la tabla de origen.

Vistas autorizadas

También puedes autorizar una vista lógica o materializada, lo que significa compartir la vista con usuarios o grupos (principales) específicos. Los principales pueden consultar una vista, pero no tienen acceso a la tabla subyacente. Para obtener más información, consulta Vistas autorizadas.

Consultas con comodines

Las consultas con comodines en tablas con políticas de acceso a nivel de fila fallan y devuelven un error INVALID_INPUT.

Siguientes pasos