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:
- Otras APIs de BigQuery, como la API Storage Read de BigQuery.
- Algunos comandos de la
bq
herramienta de línea de comandos, como el comandobq head
. - Copiar una tabla
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 TRUE
acceso 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
- Para obtener información sobre las prácticas recomendadas para las políticas de acceso a nivel de fila, consulta Prácticas recomendadas para la seguridad a nivel de fila en BigQuery.