Cuándo usar ABAC frente a filtros de fila a nivel de tabla y máscaras de columna

Unity Catalog admite dos enfoques para la seguridad de nivel de fila y de columna: directivas de ABAC y filtros de fila de nivel de tabla y máscaras de columna. Ninguno de los métodos concede acceso a los datos por sí solos; ambos agregan restricciones sobre los privilegios de nivel de objeto existentes. Debe conceder acceso a la tabla base por separado a través de permisos de nivel de objeto (GRANT).

La diferencia principal es dónde se definen las restricciones. Los filtros de fila a nivel de tabla y las máscaras de columna aplican controles de sensibilidad directamente en tablas individuales utilizando ALTER TABLE. Los propietarios de tablas administran su propia protección de datos sin necesidad de un sistema de etiquetas regulado. Esto es sencillo para un pequeño número de tablas, pero cada tabla debe configurarse individualmente, y los propietarios de tablas pueden modificar o quitar sus propios filtros y máscaras.

Las directivas de ABAC se adjuntan en el nivel de catálogo, esquema o tabla y coinciden dinámicamente con tablas y columnas basadas en etiquetas reguladas. Una directiva definida en el nivel de catálogo se aplica a todas las tablas de ese catálogo y los propietarios de tablas individuales no pueden quitarlo, modificarlo ni omitirlo. La directiva reside en el catálogo y se evalúa en Unity Catalog antes de que la consulta llegue al entorno de ejecución. Esto permite a los administradores de nivel superior aplicar reglas de toda la organización y asegurarse de que los administradores y propietarios de nivel inferior no pueden eludirlas.

Resumen detallado de la comparación

En esta tabla se resumen las diferencias entre las políticas ABAC, los filtros a nivel de fila de tabla, y las máscaras de columna.

Consideración Directivas de ABAC Filtros de fila de nivel de tabla y máscaras de columna
Sintaxis SQL CREATE POLICY ... ON CATALOG/SCHEMA/TABLE ALTER TABLE ... SET ROW FILTER / ALTER TABLE ... ALTER COLUMN ... SET MASK
Ámbito Todas las tablas dentro del ámbito de la política (catálogo, esquema o tabla) y sus descendientes. Las nuevas tablas etiquetadas se cubren automáticamente. Una sola tabla en la que se configura el filtro o la máscara. Cada tabla debe configurarse individualmente.
Coincidencia dinámica Las tablas y columnas se coinciden dinámicamente en función de las etiquetas reguladas mediante has_tag() y has_tag_value(). No hay coincidencia dinámica. Los filtros y máscaras se enlazan a tablas y columnas específicas.
Principales dirigidos TO / EXCEPT cláusulas de la definición de directiva, además de funciones de identidad en la UDF. Funciones de identidad como current_user() en la UDF.
Gobernanza de políticas Las directivas se pueden establecer por propietarios de catálogos o esquemas. Después de establecerse en un nivel superior, los propietarios de tablas no pueden invalidarlos, modificarlos ni quitarlos. Administrado por propietarios de tablas, que pueden modificar o quitar filtros y máscaras en sus propias tablas.
Características no admitidas Las operaciones como el viaje en el tiempo, la clonación y el uso compartido de Delta se pueden ejecutar por los principales en la EXCEPT cláusula. Consulte Diseño de fallo cerrado. No hay EXCEPT cláusula, por lo que las funciones no admitidas siguen sin estar disponibles para las tablas protegidas.
Directivas eficaces SHOW EFFECTIVE POLICIES para ver qué directivas se aplican a una tabla y un usuario concretos. Visible directamente en la definición de la tabla.
Auditabilidad DESCRIBE POLICY y SHOW POLICIES para inspeccionar las definiciones de directiva. INFORMATION_SCHEMA.ROW_FILTERS y INFORMATION_SCHEMA.COLUMN_MASKS.

En general, use políticas de ABAC cuando:

  • Necesita reglas de acceso coherentes en muchas tablas, esquemas o catálogos.
  • Su organización separa las tareas. Por ejemplo, los autores de directivas definen reglas y los administradores de datos clasifican los datos con etiquetas.
  • El conjunto de datos está creciendo y desea que las nuevas tablas se cubran automáticamente cuando son etiquetadas.
  • Necesita la EXCEPT cláusula para permitir operaciones como el viaje en el tiempo, Delta Sharing o la optimización completa de consultas para principales específicos.

En general, use filtros a nivel de fila de tabla y máscaras de columna cuando:

  • Cada tabla tiene una lógica estricta y específica que no se generaliza en otras tablas.
  • Los propietarios de tablas deben administrar sus propios filtros y máscaras directamente, sin un sistema de etiquetas centralizado.
  • Tiene un conjunto pequeño y estable de tablas que cambian con poca frecuencia.

Combinación de ABAC y filtros de fila a nivel de tabla y máscaras de columna

ABAC y los filtros de fila de nivel de tabla y máscaras de columna pueden coexistir en la misma tabla. En el momento de la consulta, las directivas se evalúan de forma independiente para el usuario que consulta con las siguientes reglas:

  • Solo se puede aplicar un filtro de fila distinto.
  • Solo se puede resolver una máscara de columna distinta por columna.

Azure Databricks evalúa el conflicto comparando las funciones aplicadas, no la salida de datos. Si una directiva de ABAC y un filtro o máscara de nivel de tabla aplican la misma función de filtro de fila o máscara de columna para el mismo usuario, Azure Databricks permite la ejecución. Si aplican funciones diferentes, Azure Databricks bloquea el acceso y devuelve un error, incluso si esas funciones producen una salida de datos idéntica.

Para más información sobre la resolución de conflictos y la solución de problemas, consulte Reglas para varios filtros y máscaras.

Seguridad de nivel de fila y de nivel de columna con vistas dinámicas

Las vistas dinámicas también pueden implementar la seguridad de nivel de fila y de nivel de columna mediante la inserción de funciones de identidad como current_user() y is_account_group_member() directamente en la definición de vista. Las vistas dinámicas, los filtros de fila y las máscaras de columna aplican lógica de filtrado o transformación en el momento de la consulta, pero difieren en cómo se administran, tienen ámbito y se exponen a los usuarios.

Se aplica a Cómo se administra Es más adecuado para
Vistas dinámicas Vistas Lógica SQL en la definición de vista Control de acceso específico que abarca varias tablas de origen o reconfigura los datos para el uso compartido
Filtros de fila y máscaras de columna Tablas y columnas Directivas ABAC o asignación a nivel de tabla Control de acceso de nivel de fila y de nivel de columna sin introducir nuevos objetos

Use vistas dinámicas cuando necesite un control de acceso específico que abarque varias tablas de origen o vuelva a dar forma a los datos para compartirlos. Use filtros de fila y máscaras de columna cuando desee controlar el acceso en tablas individuales sin introducir nuevos objetos.

Por ejemplo, una vista dinámica puede enmascarar una columna de correo electrónico para no auditores:

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  CASE
    WHEN is_account_group_member('auditors') THEN email
    ELSE regexp_extract(email, '^.*@(.*)$', 1)
  END AS email,
  country,
  product,
  total
FROM sales_raw

Las vistas dinámicas admiten completamente la optimización de consultas y la propagación de predicados, por lo que pueden ofrecer un mejor rendimiento de las consultas que los filtros de fila y las máscaras de columna. También impiden que los usuarios modifiquen las tablas subyacentes.

Sin embargo, las vistas dinámicas tienen dos desventajas para la gobernanza de datos:

  • Auditoría limitada: las vistas dinámicas carecen de metadatos semánticos, como etiquetas o definiciones de directivas en tablas del sistema, lo que hace que sean más difíciles de auditar a escala.
  • Vulnerabilidad al sondeo: dado que carecen de una SecureView barrera, no protegen contra ataques de sondeo, donde un usuario crea un predicado con efectos secundarios para deducir información sobre las filas filtradas. Vea Comprender la aplicación de predicado en tablas protegidas.