MaxCompute admite el control de acceso basado en etiquetas. Puede asignar etiquetas de nivel de sensibilidad a tablas o columnas y etiquetas de nivel de acceso a usuarios a nivel de proyecto. Los usuarios solo pueden acceder a los datos de un proyecto de MaxCompute si su nivel de sensibilidad es menor o igual al nivel de acceso que tienen asignado. Este tema describe cómo gestionar estos permisos y proporciona ejemplos.
Funcionamiento
El control de acceso basado en etiquetas, también conocido como LabelSecurity, es una directiva de control de acceso obligatorio (MAC) a nivel de proyecto que se encuentra deshabilitada de forma predeterminada.
El propietario del proyecto puede ejecutar el comando SET LabelSecurity=true|false; para habilitar o deshabilitar LabelSecurity a nivel de proyecto.
Una vez que habilite LabelSecurity, el propietario del proyecto debe realizar las siguientes acciones:
Definir niveles de sensibilidad claros para tablas o columnas.
Definir clasificaciones de nivel de acceso de usuario.
Asignar etiquetas de nivel de sensibilidad a tablas o columnas, y etiquetas de nivel de acceso a usuarios o roles.
Cuando un usuario accede a datos con un nivel de sensibilidad asignado, debe contar con el permiso SELECT sobre la tabla destino. Además, solo podrá acceder a los datos de la tabla o columna si su nivel de sensibilidad es menor o igual al nivel de acceso del usuario.
Funciones compatibles
Compatibilidad a nivel de columna: La granularidad más fina admitida es el nivel de columna. Puede establecer etiquetas de nivel de sensibilidad para cualquier columna de una tabla. Esto permite que una tabla contenga columnas con distintos niveles de sensibilidad.
Compatibilidad con vistas: Puede establecer etiquetas de nivel de sensibilidad para vistas. La etiqueta de nivel de sensibilidad de una vista es independiente de las etiquetas de sus tablas de origen.
No se admite el establecimiento de etiquetas de nivel de sensibilidad en columnas de partición.
Operaciones admitidas
El propietario del proyecto o un usuario con el rol Admin puede realizar las siguientes operaciones.
Puede llevar a cabo estas operaciones mediante herramientas como MaxCompute client, MaxCompute Studio y DataWorks.
Directivas de control de acceso predeterminadas
No-ReadUp: Prohíbe a los usuarios acceder a datos cuyo nivel de sensibilidad sea superior a su nivel de acceso. Si su escenario de negocio lo requiere, debe otorgar un permiso explícito. Para obtener más información, consulte Explicitly grant label permissions.
Trusted-User: Permite a los usuarios escribir datos con un nivel de sensibilidad no mayor a su nivel de acceso. Las tablas o vistas recién creadas tienen de forma predeterminada el nivel 0 (no confidencial). Los nuevos usuarios también tienen de forma predeterminada el nivel 0.
Notas de uso
-
Algunos sistemas MAC tradicionales admiten directivas de seguridad más complejas para evitar la distribución arbitraria de datos dentro de un proyecto.
Por ejemplo, la directiva No-WriteDown prohíbe a los usuarios escribir datos en un nivel de sensibilidad inferior a su nivel de acceso. Para reducir el costo de gestión de los niveles de sensibilidad de los datos, MaxCompute no admite la directiva No-WriteDown de forma predeterminada.
Si su proyecto requiere restricciones similares, puede ejecutar el comando
Set ObjectCreatorHasGrantPermission=false;para modificar la configuración de seguridad del proyecto según sus necesidades. Para evitar que los datos fluyan entre diferentes proyectos, puede ejecutar el comando
set ProjectProtection=true;para habilitar la función ProjectProtection. Una vez habilitada, esta función restringe el acceso a los datos al proyecto actual e impide que salgan de él. Para obtener más información sobre la protección de datos del proyecto, consulte Data protection mechanism.Al eliminar un objeto, MaxCompute revoca automáticamente todos los permisos de etiqueta asociados a este.
Al quitar un usuario de un proyecto, MaxCompute conserva sus permisos. Si posteriormente vuelve a agregar al usuario al proyecto, se reactivarán sus permisos anteriores. Para borrar permanentemente la información de permisos de un usuario, consulte Permanently clear permission information left by deleted users.
Requisitos previos
Antes de utilizar la solución de control de acceso basado en etiquetas, necesita la siguiente información:
-
El nombre de la cuenta o el nombre del rol del receptor. Debe agregar la cuenta o el rol al proyecto de MaxCompute.
Formato para una cuenta de Alibaba Cloud: ALIYUN$<account_id>
Formato para una cuenta de usuario de RAM: RAM$<account_id>:<RAM_user_UID>
Formato para una cuenta de rol de RAM:
RAM$<account_id>:role/<RAM_role_name>
Ejecute el comando
LIST users;oLIST roles;en MaxCompute client para obtener la información de la cuenta o el rol.Para agregar un nuevo usuario o rol, consulte User Planning and Management o Role Planning.
-
El nombre de la tabla o columna destino.
Ejecute el comando
SHOW TABLES;en MaxCompute client para obtener los nombres de las tablas o vistas, y de las columnas.
Establecer niveles de sensibilidad para tablas o columnas
El propietario del proyecto o un usuario con el rol Admin puede establecer etiquetas de nivel de sensibilidad para tablas o columnas.
-
Sintaxis del comando
SET LabelSecurity=true; SET Label <number> TO TABLE <table_name>[(<column_list>)]; -
Notas de uso
Si establece una etiqueta de nivel de sensibilidad para una tabla pero no para sus columnas, todas las columnas de la tabla heredarán el nivel de sensibilidad de la tabla.
Una etiqueta a nivel de columna siempre anula la etiqueta a nivel de tabla. Establecer una etiqueta a nivel de tabla no afecta a las etiquetas existentes a nivel de columna. Por ejemplo, si inicialmente establece el nivel de sensibilidad de una tabla en 2 y luego establece el nivel de sensibilidad de una columna llamada col1 en 3, el nivel de sensibilidad de la tabla permanecerá en 2, el nivel de sensibilidad de col1 pasará a ser 3 y las demás columnas se mantendrán en el nivel 2.
Para modificar una etiqueta de nivel de sensibilidad existente en una tabla o columna, ejecute nuevamente el comando con el nuevo nivel.
Para quitar una etiqueta, establezca su nivel de sensibilidad en 0.
-
Parámetros
Parámetro
Obligatorio
Descripción
number
Sí
Especifica el nivel de sensibilidad. Valores válidos: 0 a 9. Los valores más altos indican mayor sensibilidad.
table_name
Sí
El nombre de la tabla o vista destino.
Ejecute el comando
SHOW TABLES;en MaxCompute client para obtener los nombres de tablas o vistas.column_list
No
Especifica uno o varios nombres de columna. Separe varios nombres de columna con comas (,).
Establecer niveles de acceso para usuarios o roles
El propietario del proyecto o un usuario con el rol Admin puede establecer etiquetas de nivel de acceso para otros usuarios o roles.
-
Sintaxis del comando
SET LabelSecurity=true; SET Label <number> TO {USER|ROLE} <name>; -
Notas de uso
Una vez establecida una etiqueta de nivel de acceso para un usuario, este solo podrá acceder a datos cuyo nivel de sensibilidad sea menor o igual a su nivel de acceso. Por ejemplo, si a un usuario se le asigna un nivel de acceso de 3, solo podrá acceder a datos con un nivel de sensibilidad de 0 a 3.
Para modificar una etiqueta de nivel de acceso existente para un usuario o rol, ejecute nuevamente el comando con la nueva etiqueta de nivel de acceso.
-
Parámetros
Parámetro
Obligatorio
Descripción
number
Sí
Especifica el nivel máximo de sensibilidad de datos al que puede acceder el usuario o rol. Valores válidos: 0 a 9.
name
Sí
El nombre del usuario o rol.
Ejecute el comando
LIST users;oLIST roles;en MaxCompute client para obtener la información de la cuenta o el rol.
Otorgar permisos de etiqueta explícitamente
El propietario del proyecto o un usuario con el rol Admin puede otorgar a los usuarios permiso para acceder a datos que superen su nivel de acceso asignado.
-
Sintaxis del comando
GRANT Label <number> ON TABLE <table_name> [(<column_list>)] TO {USER|ROLE} <name> [WITH exp <days>]; -
Notas de uso
Para un usuario determinado, una concesión explícita sobre una columna anula una concesión explícita sobre la tabla principal.
-
Parámetros
Parámetro
Obligatorio
Descripción
number
Sí
El nivel máximo de sensibilidad de datos al que puede acceder el usuario o rol.
Este valor corresponde a las etiquetas de nivel de sensibilidad de los datos. Valores válidos: 0 a 9.
table_name
Sí
El nombre de la tabla o vista destino.
Ejecute el comando
SHOW TABLES;en MaxCompute client para obtener los nombres de tablas o vistas.column_list
No
Especifica las columnas para las cuales se otorgarán permisos. Puede especificar varios nombres de columna separados por comas (,).
name
Sí
El nombre del usuario o rol.
Ejecute el comando
LIST users;oLIST roles;en MaxCompute client para obtener la información de la cuenta o el rol.days
No
El periodo de vencimiento del permiso en días. Valores válidos: 0 a 263-1. Si no especifica este parámetro, el permiso tendrá una validez predeterminada de 180 días.
Revocar permisos de etiqueta explícitos
El propietario del proyecto o un usuario con el rol Admin puede revocar permisos de etiqueta explícitos.
-
Sintaxis del comando
REVOKE Label ON TABLE <table_name> [(<column_list>)] FROM {USER|ROLE} <name>; -
Notas de uso
Revocar una concesión explícita sobre una tabla también revoca cualquier concesión explícita sobre las columnas de esa tabla para el mismo usuario.
Revocar una concesión explícita no afecta el nivel de acceso asignado al usuario. Por ejemplo, si un usuario tiene un nivel de acceso de 2 y se le otorgó explícitamente acceso a datos con un nivel de sensibilidad de hasta 3 en una tabla, después de revocar la concesión explícita, el usuario aún podrá acceder a datos con un nivel de sensibilidad de 2 o menos en dicha tabla.
-
Parámetros
Parámetro
Obligatorio
Descripción
table_name
Sí
El nombre de la tabla o vista destino.
Ejecute el comando
SHOW TABLES;en MaxCompute client para obtener los nombres de tablas o vistas.column_list
No
Especifica las columnas de las cuales se revocarán los permisos. Puede especificar varios nombres de columna separados por comas (,).
name
Sí
El nombre del usuario o rol.
Ejecute el comando
LIST users;oLIST roles;en MaxCompute client para obtener la información de la cuenta o el rol.
Borrar permisos vencidos
Una vez que las concesiones explícitas vencen, el propietario del proyecto o un usuario con el rol Admin debe ejecutar el siguiente comando para borrarlas.
clear expired grants;
Ejemplos
Suponga que un proyecto llamado test_project contiene una tabla llamada sale_detail. La tabla tiene las columnas shop_name, customer_id y total_price.
Bob@aliyun.com es el propietario del proyecto test_project. Allen es un usuario de RAM bajo la cuenta de Alibaba Cloud de Bob, y Bob ha agregado a Allen al proyecto test_project.
La siguiente sentencia se utiliza para crear la tabla:
CREATE TABLE sale_detail (
shop_name STRING COMMENT 'Shop name',
customer_id STRING COMMENT 'Customer ID',
total_price DOUBLE COMMENT 'Order total price'
);
Ejemplo 1: Establecer niveles de sensibilidad
-- Bob enters the test_project project.
USE test_project;
-- Set the label of the sale_detail table to level 1. At this point, all columns in the table have a sensitivity level of 1.
SET Label 1 TO TABLE sale_detail;
-- Set the label for the shop_name and customer_id columns of sale_detail to level 2. Other columns remain at level 1.
SET Label 2 TO TABLE sale_detail(shop_name, customer_id);
-- View the label information of the table.
DESCRIBE sale_detail;
-- The result is as follows:
+------------------------------------------------------------------------------------+
| TableLabel: |
| MaxLabel: L2 |
+------------------------------------------------------------------------------------+
| InternalTable: YES | Size: 0 |
+------------------------------------------------------------------------------------+
| Native Columns: |
+------------------------------------------------------------------------------------+
| Field | Type | Label | Comment |
+------------------------------------------------------------------------------------+
| shop_name | string | 2 | Shop name |
| customer_id | string | 2 | Customer ID |
| total_price | double | 1 | Order total price |
+------------------------------------------------------------------------------------+
-- Modify the label of the sale_detail table to level 3. Note that the labels for the shop_name and customer_id columns remain at level 2, and the labels for other columns are changed to 3.
SET Label 3 TO TABLE sale_detail;
-- View the label information of the table.
DESCRIBE sale_detail;
-- The result is as follows:
+------------------------------------------------------------------------------------+
| TableLabel: 3 |
| MaxLabel: L3 |
+------------------------------------------------------------------------------------+
| InternalTable: YES | Size: 0 |
+------------------------------------------------------------------------------------+
| Native Columns: |
+------------------------------------------------------------------------------------+
| Field | Type | Label | Comment |
+------------------------------------------------------------------------------------+
| shop_name | string | 2 | Shop name |
| customer_id | string | 2 | Customer ID |
| total_price | double | 3 | Order total price |
+------------------------------------------------------------------------------------+
-- Modify the label for the shop_name and customer_id columns of the sale_detail table to level 4. The labels for other columns remain at level 3.
SET Label 4 TO TABLE sale_detail(shop_name, customer_id);
-- View the label information of the table.
DESCRIBE sale_detail;
-- The result is as follows:
+------------------------------------------------------------------------------------+
| TableLabel: 3 |
| MaxLabel: L4 |
+------------------------------------------------------------------------------------+
| InternalTable: YES | Size: 0 |
+------------------------------------------------------------------------------------+
| Native Columns: |
+------------------------------------------------------------------------------------+
| Field | Type | Label | Comment |
+------------------------------------------------------------------------------------+
| shop_name | string | 4 | Shop name |
| customer_id | string | 4 | Customer ID |
| total_price | double | 3 | Order total price |
+------------------------------------------------------------------------------------+
Ejemplo 2: Establecer niveles de acceso de usuario
Usuario regular en el proyecto: Kate@aliyun.com
Usuario de RAM en el proyecto: RAM$Bob@aliyun.com:Allen
-- Bob enters the test_project project.
USE test_project;
-- Set the access level label for Kate to 3. Kate can access data with a sensitivity level from 0 to 3.
SET Label 3 TO USER ALIYUN$Kate@aliyun.com;
-- Set the access level label for the RAM user Allen to 1. Allen can access data with a sensitivity level from 0 to 1.
SET Label 1 TO USER RAM$Bob@aliyun.com:Allen;
-- View the access level information for Allen.
SHOW LABEL GRANTS FOR RAM$Bob@aliyun.com:Allen;
-- The result is as follows:
User Label: 1
(granted label list is empty)
Ejemplo 3: Otorgar permisos explícitos
-- Enter the test_project project.
USE test_project;
-- Explicitly grant Allen permission to access data with a sensitivity level up to 3 in the sale_detail table. The permission is valid for 4 days.
GRANT LABEL 3 ON TABLE sale_detail TO USER RAM$Bob@aliyun.com:Allen WITH exp 4;
-- View the result of the explicit grant for Allen.
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
-- The result is as follows:
User Label: 1
+-------------+--------------+--------------------------+
| Column | GrantedLabel | Expires |
+-------------+--------------+--------------------------+
| total_price | 3 | 2025-12-26T11:13:20+0800 |
+-------------+--------------+--------------------------+
-- Explicitly grant Allen permission to access data with a sensitivity level up to 4 in the shop_name, customer_id, and total_price columns of the sale_detail table. The permission is valid for 10 days.
GRANT LABEL 4 ON TABLE sale_detail(shop_name, customer_id, total_price) TO USER RAM$Bob@aliyun.com:Allen WITH exp 10;
-- View the result of the explicit grant for Allen.
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
-- The result is as follows:
User Label: 1
+-------------+--------------+--------------------------+
| Column | GrantedLabel | Expires |
+-------------+--------------+--------------------------+
| customer_id | 4 | 2026-01-01T11:14:40+0800 |
+-------------+--------------+--------------------------+
| shop_name | 4 | 2026-01-01T11:14:40+0800 |
+-------------+--------------+--------------------------+
| total_price | 4 | 2026-01-01T11:14:40+0800 |
+-------------+--------------+--------------------------+
Ejemplo 4: Revocar permisos explícitos
-- In the previous data permission configuration:
-- First, Allen was explicitly granted permission to access data with a sensitivity level up to 3 in the sale_detail table.
-- Then, Allen was explicitly granted permission to access data with a sensitivity level up to 4 in the shop_name, customer_id, and total_price columns of the sale_detail table.
-- Revoke the column-level data access permission for Allen on the shop_name, customer_id, and total_price columns of the sale_detail table.
REVOKE LABEL ON TABLE sale_detail(shop_name, customer_id, total_price) FROM USER RAM$Bob@aliyun.com:Allen;
-- View the result after the permission is revoked for Allen.
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
--The result is as follows:
-- Revoke the permission for Allen to access sensitive data in the sale_detail table.
REVOKE LABEL ON TABLE sale_detail FROM USER RAM$Bob@aliyun.com:Allen;
--View the result after the permission is revoked for Allen.
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
--The result is as follows:
User Label: 1
(granted label list is empty)
Siguientes pasos
Una vez que comprenda el mecanismo de autorización basado en etiquetas, puede otorgar permisos según sea necesario: