Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Importante
Esta característica está en versión preliminar pública.
En esta página se describe cómo configurar directivas de filtro de fila y máscara de columna en el catálogo de Unity. Para obtener más información sobre el control de acceso basado en atributos (ABAC) y las directivas, consulte Control de acceso basado en atributos (ABAC) de Unity Catalog. Para aplicar etiquetas a objetos, consulte Etiquetas reguladas y Aplicar etiquetas a objetos protegibles del catálogo de Unity.
Requisitos de proceso
Para usar directivas de ABAC, debe usar una de las siguientes configuraciones de proceso:
- Computación sin servidor
- Proceso estándar en Databricks Runtime 16.4 o superior
- Cómputo dedicado en Databricks Runtime 16.4 o superior con filtrado de control de acceso fino habilitado
Los procesos estándar y dedicados que ejecutan tiempos de ejecución anteriores no pueden acceder a las tablas protegidas por ABAC. Como solución alternativa temporal, puede configurar ABAC para que se aplique solo a un grupo específico. Agregue los usuarios que desea restringir a ese grupo. Los usuarios que no están en el grupo todavía pueden acceder a las tablas.
Políticas de cuotas
A continuación se muestra el número de directivas de ABAC que puede crear en diferentes objetos protegibles:
- Catálogo: 10 directivas por catálogo
- Esquema: 10 directivas por esquema
- Tabla: 5 directivas por tabla
Creación de una directiva en un objeto
Para crear una directiva de filtro de fila o máscara de columna, debe tener:
- Una función definida por el usuario (UDF) existente en Unity Catalog sobre la que tiene el
EXECUTEprivilegio y que implementa la lógica de filtro de fila o máscara de columna que desea aplicar.
Para conocer los procedimientos recomendados, las limitaciones y los UDF de ejemplo, consulte Procedimientos recomendados para las directivas de ABAC. -
MANAGEen el objeto o propiedad del objeto .
Requisitos de proceso
- Debe usar cómputo en Databricks Runtime 16.4 o posterior o cómputo sin servidor.
El proceso que ejecuta entornos de ejecución anteriores no puede acceder a las tablas protegidas por ABAC. Como solución alternativa temporal, puede configurar ABAC para que se aplique solo a un grupo específico. Agregue los usuarios que desea restringir a ese grupo. Los usuarios que no están en el grupo todavía pueden acceder a las tablas.
Explorador de catálogos
En el área de trabajo de Azure Databricks, haga clic en
Catálogo.
Seleccione el objeto que determina el ámbito de la directiva, como un catálogo, un esquema o una tabla.
Haga clic en la pestaña Directivas.
Haga clic en Nueva directiva.
En general:
- En Nombre, escriba un nombre para la política.
- En Descripción, escriba una descripción de la directiva.
- En Aplicado a..., busque y seleccione los principales a los que se aplica la política.
- En Except for..., agregue cualquier principal que quiera excluir de la directiva.
- En Ámbito, elija el catálogo, los esquemas y las tablas a las que desea que se aplique la directiva.
Para propósito, elija si desea enmascarar columnas u ocultar filas.
En las secciones Condiciones y parámetros de función , configure cómo desea que la directiva enmascara las columnas u oculte filas. Para ello, especifique una función de enmascaramiento, junto con las condiciones para aplicar la función.
Haga clic en Crear directiva.
SQL
A continuación se muestra la sintaxis general para crear una directiva:
CREATE POLICY <policy_name>
ON <securable_type> <securable_name>
COMMENT '<policy_description>'
-- One of the following:
ROW FILTER <udf_name>
| COLUMN MASK <udf_name> ON COLUMN <target_column>
TO `<principal_name>`[, `<principal_name>`, ...]
[EXCEPT `<principal_name>`[, `<principal_name>`, ...]]
FOR TABLES
[WHEN hasTag('<key>') OR hasTagValue('<key>', '<value>')]
MATCH COLUMNS hasTag('<key>') OR hasTagValue('<key>', '<value>') AS <alias>
USING COLUMNS <alias>[, <alias>, ...];
Al definir condiciones de nivel de tabla (MATCH COLUMNS), la directiva solo se aplica a la tabla si cada condición coincide con al menos una columna. Si una condición no coincide con ninguna columna de la tabla, la directiva no se aplica a la tabla y Azure Databricks omite ningún filtrado de filas o enmascaramiento de columnas.
Por ejemplo, si una directiva define MATCH COLUMNS condition1, condition2, condition3, la directiva solo surte efecto si cada una de las tres condiciones coincide con al menos una columna de la tabla.
Una directiva puede incluir hasta tres condiciones de columna en la cláusula MATCH COLUMNS.
En este ejemplo se define una directiva de filtro de fila que excluye las filas de los clientes europeos de las consultas realizadas por analistas basados en Estados Unidos:
CREATE POLICY hide_eu_customers
ON SCHEMA prod.customers
COMMENT 'Hide rows with European customers from sensitive tables'
ROW FILTER non_eu_region
TO `us_analysts`
FOR TABLES
MATCH COLUMNS
hasTag('geo_region') AS region
USING COLUMNS (region);
En este ejemplo se define una directiva de máscara de columna que oculta los números de seguridad social de los analistas estadounidenses excepto los que se encuentran en el admins grupo.
CREATE POLICY mask_SSN
ON SCHEMA prod.customers
COMMENT 'Mask social security numbers'
COLUMN MASK mask_SSN
TO `us_analysts`
EXCEPT `admins`
FOR TABLES
MATCH COLUMNS
hasTagValue('pii', 'ssn') AS ssn
ON COLUMN ssn;
Advertencia
Los datos de etiqueta se almacenan como texto sin formato y se pueden replicar globalmente. No use nombres de etiqueta, valores ni descriptores que puedan poner en peligro la seguridad de los recursos. Por ejemplo, no use nombres de etiqueta, valores o descriptores que contengan información personal o confidencial.
Edición de una directiva
Permisos necesarios:MANAGE en el objeto o en el propietario del objeto.
Explorador de catálogos
- En el área de trabajo de Azure Databricks, haga clic en
Catálogo.
- Seleccione el objeto que determina el ámbito de la directiva, como un catálogo, un esquema o una tabla.
- Haga clic en la pestaña Directivas.
- Seleccione la directiva y realice modificaciones.
- Haz clic en Actualizar directiva.
SQL
CREATE OR REPLACE POLICY <policy_name>
ON <securable_type> <securable_name>
COMMENT '<policy_description>'
-- One of the following:
ROW FILTER <udf_name>
| COLUMN MASK <udf_name> ON COLUMN <target_column>
TO `<principal_name>`[, `<principal_name>`, ...]
[EXCEPT `<principal_name>`[, `<principal_name>`, ...]]
FOR TABLES
[WHEN hasTag('<key>') OR hasTagValue('<key>', '<value>')]
MATCH COLUMNS hasTag('<key>') OR hasTagValue('<key>', '<value>') AS <alias>
USING COLUMNS <alias>[, <alias>, ...];
Eliminar una directiva
Permisos necesarios:MANAGE en el objeto o en el propietario del objeto.
Explorador de catálogos
- En el área de trabajo de Azure Databricks, haga clic en
Catálogo.
- Seleccione el objeto que determina el ámbito de la directiva, como un catálogo, un esquema o una tabla.
- Haga clic en la pestaña Directivas.
- Seleccione la política.
- Haga clic en Eliminar directiva.
SQL
DROP POLICY <policy_name> ON <securable_type> <securable_name>
Solución de problemas de varios filtros o máscaras
Cuando un usuario consulta una tabla controlada por ABAC, solo un filtro de fila distinto por tabla puede resolverse para cada usuario. Además, solo una máscara de columna distinta por columna puede resolverse para cada usuario. Puede definir varias directivas de ABAC en una tabla siempre que cumplan estas restricciones. Esto evita resultados ambiguos cuando se aplican varios filtros o máscaras distintos al mismo usuario.
Cuando Azure Databricks detecta varios filtros o máscaras distintos durante la evaluación de directivas para un usuario determinado, genera un error INVALID_PARAMETER_VALUE.UC_ABAC_MULTIPLE_ROW_FILTERS o COLUMN_MASKS_FEATURE_NOT_SUPPORTED.MULTIPLE_MASKS. Este comportamiento es por diseño y bloquea el acceso a la tabla hasta que se resuelve el conflicto.
Descripción de cómo se producen varios filtros de fila o máscaras
Pueden surgir varios filtros o máscaras de varias maneras:
Una sola directiva genera varios filtros o máscaras.
Esto puede ocurrir cuando varias columnas coinciden con las condiciones de directiva. Por ejemplo, la siguiente directiva define un filtro de fila basado en columnas etiquetadas conregion=EMEA:CREATE OR REPLACE POLICY region_filter_policy ON TABLE my_catalog.my_schema.customer_data ROW FILTER my_catalog.my_schema.filter_by_region TO `account users` FOR TABLES MATCH COLUMNS hasTagValue('region', 'EMEA') AS region_cols USING COLUMNS (region_cols);Si la
customer_datatabla tiene varias columnas etiquetadas conregion=EMEA, esta directiva única genera un filtro de fila por columna coincidente. Cuando Azure Databricks evalúa la directiva, detecta varios filtros de fila y produce el error.Varias directivas definen filtros o máscaras en la misma tabla o columna. Si se aplica más de una directiva de ABAC a la misma tabla o columna, Azure Databricks detecta varios filtros o máscaras eficaces.
Una tabla o columna ya tiene un filtro o una máscara aplicados manualmente. Los conflictos también pueden producirse cuando una tabla o columna incluye un filtro de fila o máscara de columna aplicado manualmente (no ABAC) y uno o varios filtros o máscaras definidos por ABAC.
Cómo resolver el error
Puede resolver el error de varios filtros de fila con cualquiera de los métodos siguientes:
Perfeccionar las coincidencias de las columnas de su directiva: actualice la cláusula
MATCH COLUMNSpara que sea más específica, asegurándose de que coincida solo con una columna. Por ejemplo, combine varias condiciones para acotar la coincidencia.Ajuste las etiquetas reguladas: revise qué columnas tienen las etiquetas reguladas que desencadenan la directiva. Quite o modifique estas etiquetas si no deben incluirse en el filtro de fila.
Reestructurar las directivas: en lugar de depender de condiciones que puedan coincidir con varias columnas, considere crear directivas independientes con orientación explícita a columnas. Esto le proporciona más control sobre qué columnas desencadenan filtros de fila.