Descargo de responsabilidad: Todas las opiniones y puntos de vista expresados en el blog pertenecen exclusivamente al autor y no necesariamente al empleador del autor o a cualquier otro grupo o individuo. Este artículo no es una promoción para ninguna plataforma de gestión de datos/nube. Todas las imágenes y fragmentos de código están disponibles públicamente en el sitio web de Azure/Databricks.
En mis otros artículos de DZone, he discutido qué es Databricks Unity Catalog, cómo funciona el modelo de privilegios en Unity Catalog, nivel de esquema, y un script para automatizar la gestión de permisos tanto a nivel de catálogo como de esquema.
En este artículo, mi objetivo es proporcionar el script que automatizará la gestión de permisos a nivel de tabla en el Unity Catalog.
Privilegios a Nivel de Tabla en el Unity Catalog
En Unity Catalog (Databricks), aplicar permisos a nivel de tabla es necesario cuando deseas controlar el acceso a tablas o vistas específicas, en lugar de aplicar permisos a todos los objetos dentro de un esquema. Los permisos a nivel de tabla son útiles en los siguientes escenarios:
1. Control de Acceso Granular
Cuando necesitas otorgar o restringir el acceso a tablas o vistas específicas sin afectar todo el esquema.
Esto es especialmente importante cuando un esquema contiene datos sensibles y deseas permitir el acceso a algunas tablas mientras limitas el acceso a otras.
2. Protección de Datos Sensibles
Si ciertas tablas dentro de un esquema contienen datos confidenciales o restringidos (por ejemplo, información personal identificable, datos financieros), puedes aplicar permisos a nivel de tabla para asegurar que solo los usuarios autorizados puedan ver o consultar esas tablas.
Por ejemplo, podrías permitir el acceso a algunas tablas de datos resumidos o agregados pero restringir el acceso a tablas crudas y detalladas que contienen información sensible.
3. Delegación de Acceso a Equipos/Usuarios Específicos Si el Esquema Contiene Tablas Destinadas a Múltiples Equipos
Cuando diferentes usuarios o equipos necesitan acceso a diferentes tablas dentro del mismo esquema. Por ejemplo, el equipo de ventas podría necesitar acceso a tablas relacionadas con clientes, mientras que el equipo financiero necesita acceso a tablas de ingresos.
Aplicar permisos a nivel de tabla asegura que cada equipo solo pueda acceder a las tablas relevantes para su trabajo.
4. Cumplimiento de Gobernanza de Datos
Cuando se aplican políticas estrictas de gobernanza de datos, es posible que necesites controlar el acceso a un nivel más detallado (hasta tablas individuales). Los permisos a nivel de tabla ayudan a garantizar el cumplimiento al otorgar acceso solo a los datos con los que un usuario o rol está autorizado a trabajar.
5. Manejo de Diversas Necesidades de Acceso Dentro de un Esquema
En casos en los que un esquema contiene tablas con diferentes niveles de sensibilidad o confidencialidad, aplicar permisos a nivel de esquema puede ser demasiado amplio. Los permisos a nivel de tabla te permiten gestionar el acceso para cada tabla individualmente según necesidades específicas.
Permisos que se pueden aplicar a nivel de tabla
- SELECT: Concede acceso de lectura a la tabla, permitiendo a los usuarios hacer consultas sobre ella.
- MODIFY: Otorga la habilidad de agregar, eliminar y modificar datos en u desde un objeto.
- APPLY TAG: Otorga la capacidad de aplicar etiquetas a un objeto.
- ALL PRIVILEGES: Otorga todos los privilegios.
Automatización del Script
Prerrequisitos
- El Catálogo Unity ya está configurado.
- El/los Principales están asociados con el espacio de trabajo de Databricks.
- El usuario que ejecuta el script de permisos tiene los permisos adecuados en la(s) tabla(s), esquema y catálogo.
Paso 1: Crear un Cuaderno y Declarar las Variables
Crea un cuaderno en el espacio de trabajo de Databricks. Para crear un cuaderno en tu espacio de trabajo, haz clic en el “+” Nuevo en la barra lateral, y luego elige Cuaderno.
Se abre un cuaderno en blanco en el espacio de trabajo. Asegúrate de que Python esté seleccionado como el lenguaje del cuaderno.
Copia y pega el fragmento de código a continuación en la celda del cuaderno y ejecuta la celda.
catalog = 'main' # Specify your catalog name
schema = 'default' # Specify your schema name
tables_arr= 'test1,test2' # Specify the Comma(,) seperated values of table name
tables = tables_arr.split(',')
principals_arr = '' # Specify the Comma(,) seperated values for principals in the blank text section (e.g. groups, username)
principals = principals_arr.split(',')
privileges_arr = 'SELECT,APPLY TAG' # Specify the Comma(,) seperated values for priviledges in the blank text section (e.g. SELECT,APPLY TAG)
privileges = privileges_arr.split(',')
Paso 2: Establecer el Catálogo y el Esquema
Copia, pega y ejecuta el bloque de código a continuación en una celda nueva o existente y ejecuta la celda.
query = f"USE CATALOG `{catalog}`" #Sets the Catalog
spark.sql(query)
query = f"USE SCHEMA `{schema}`" #Sets the Schema
spark.sql(query)
Paso 3: Iterar a través de los Principales y Privilegios y Aplicar la Concesión en el Catálogo, Esquema y Tablas
Copia, pega y ejecuta el bloque de código a continuación en una celda nueva o existente, luego ejecuta la celda para aplicar los permisos.
for principal in principals:
query = f"GRANT USE_CATALOG ON CATALOG `{catalog}` TO `{principal}`" # Use catalog permission at Catalog level
spark.sql(query)
query = f"GRANT USE_SCHEMA ON SCHEMA `{schema}` TO `{principal}`" # Use schema permission at Schema level
spark.sql(query)
for table in tables:
for privilege in privileges:
query = f"GRANT `{privilege}` ON `{table}` TO `{principal}`" # Grant priviledges on the tables to the pricipal
print(query)
spark.sql(query)
Validación
Puedes validar los privilegios abriendo la interfaz de Databricks y navegando a “Catálogo” en el Explorador de Datos. Una vez que el catálogo aparezca en la sección de Datos, haz clic en el catálogo, luego expande el esquema y selecciona la tabla dentro del esquema donde has aplicado los permisos, y ve a la pestaña “permisos”. Ahora puedes ver todos los privilegios aplicados a la tabla. A continuación se muestra la captura de pantalla de los permisos aplicados en la tabla de catálogo predefinida dentro del catálogo principal y el esquema information_schema
.
También puedes ejecutar el siguiente script SQL en un cuaderno para mostrar todos los permisos de una tabla como parte de tu validación.
SHOW GRANTS ON TABLE table_name;
Conclusión
Automatizar la gestión de privilegios en Databricks Unity Catalog a nivel de tabla ayuda a garantizar un enfoque consistente y eficiente para aplicar permisos en el nivel más bajo en Unity Catalog. El código proporcionado demuestra una forma práctica de asignar múltiples privilegios a nivel de tabla para múltiples principales y tablas en un solo catálogo y esquema. En un catálogo donde hay cientos de tablas presentes y se necesitan proporcionar diferentes permisos para diferentes principales, la automatización anterior reduce significativamente los errores manuales y el esfuerzo.
Source:
https://dzone.com/articles/automate-databricks-unity-catalog-permissions-at-table-level