Compartir vía


Creación de una vista dinámica

En el catálogo de Unity, puede usar vistas dinámicas para configurar control de acceso pormenorizado, lo que incluye:

  • Seguridad en el nivel de columnas o filas.
  • Enmascaramiento de datos.

Nota:

El control de acceso específico mediante vistas dinámicas no está disponible en clústeres con modo de acceso de usuario único .

El catálogo de Unity presenta las funciones siguientes, que permiten limitar dinámicamente qué usuarios pueden acceder a una fila, columna o registro de una vista:

  • current_user(): devuelve la dirección de correo electrónico del usuario actual.
  • is_account_group_member(): devuelve TRUE si el usuario actual es miembro de un grupo de nivel de cuenta específico. Se recomienda su uso en vistas dinámicas con datos del catálogo de Unity.
  • is_member(): devuelve TRUE si el usuario actual es miembro de un grupo de nivel de área de trabajo específico. Esta función se proporciona por compatibilidad con el repositorio metastore de Hive existente. Evite usarla con vistas de los datos del catálogo de Unity, ya que no evalúa la pertenencia a grupos de nivel de cuenta.

Azure Databricks recomienda no conceder a los usuarios la capacidad de leer las tablas y vistas a las que se hace referencia en la vista.

En los ejemplos siguientes se muestra cómo crear vistas dinámicas en el catálogo de Unity.

Permisos de nivel de columna

Con una vista dinámica, puede limitar las columnas a las que puede acceder un usuario o grupo determinado. En el ejemplo siguiente, solo los miembros del grupo auditors pueden acceder a las direcciones de correo electrónico de la tabla sales_raw. Durante el análisis de consultas, Apache Spark reemplaza la instrucción CASE por la cadena literal REDACTED o el contenido real de la columna de dirección de correo electrónico. Otras columnas se devuelven con normalidad. Esta estrategia no tiene ningún efecto negativo en el rendimiento de las consultas.

-- Alias the field 'email' to itself (as 'email') to prevent the
-- permission logic from showing up directly in the column name results.
CREATE VIEW sales_redacted AS
SELECT
  user_id,
  CASE WHEN
    is_account_group_member('auditors') THEN email
    ELSE 'REDACTED'
  END AS email,
  country,
  product,
  total
FROM sales_raw

Permisos de nivel de fila

Con una vista dinámica, puede especificar permisos hasta el nivel de fila o campo. En el ejemplo siguiente, solo los miembros del grupo managers pueden ver los importes de transacciones cuando superan 1 000 000 USD. Los resultados coincidentes se filtran para otros usuarios.

CREATE VIEW sales_redacted AS
SELECT
  user_id,
  country,
  product,
  total
FROM sales_raw
WHERE
  CASE
    WHEN is_account_group_member('managers') THEN TRUE
    ELSE total <= 1000000
  END;

Enmascaramiento de datos

Dado que las vistas del catálogo de Unity usan Spark SQL, puede implementar enmascaramiento de datos avanzado mediante expresiones SQL y expresiones regulares más complejas. En el ejemplo siguiente, todos los usuarios pueden analizar los dominios de correo electrónico, pero solo los miembros del grupo auditors pueden ver la dirección de correo electrónico completa de un usuario.

-- The regexp_extract function takes an email address such as
-- user.x.lastname@example.com and extracts 'example', allowing
-- analysts to query the domain name.

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