Tous les produits
Search
Centre de documentation

MaxCompute:Contrôle d'accès basé sur les libellés

Dernière mise à jour :Aug 10, 2026

MaxCompute prend en charge le contrôle d'accès basé sur les libellés. Vous pouvez attribuer des libellés de niveau de sensibilité aux tables ou aux colonnes, ainsi que des libellés de niveau d'accès aux utilisateurs au niveau du projet. Les utilisateurs ne peuvent accéder aux données d'un projet MaxCompute que si leur niveau de sensibilité est inférieur ou égal à leur niveau d'accès attribué. Cette rubrique décrit la gestion de ces autorisations et fournit des exemples.

Fonctionnement

Le contrôle d'accès basé sur les libellés, également appelé LabelSecurity, est une politique de contrôle d'accès obligatoire (MAC) au niveau du projet, désactivée par défaut.

Le propriétaire du projet peut exécuter la commande SET LabelSecurity=true|false; pour activer ou désactiver LabelSecurity au niveau du projet.

Une fois LabelSecurity activé, le propriétaire du projet doit effectuer les actions suivantes :

  • Définissez clairement les niveaux de sensibilité pour les tables ou les colonnes.

  • Définissez les classifications de niveau d'accès des utilisateurs.

  • Attribuez des libellés de niveau de sensibilité aux tables ou aux colonnes, et des libellés de niveau d'accès aux utilisateurs ou aux rôles.

Lorsqu'un utilisateur accède à des données auxquelles un niveau de sensibilité est attribué, il doit disposer de l'autorisation SELECT sur la table cible. Il ne peut accéder aux données de la table ou de la colonne que si leur niveau de sensibilité est inférieur ou égal à son niveau d'accès.

Fonctionnalités prises en charge

  • Prise en charge au niveau des colonnes : la granularité la plus fine prise en charge est le niveau de la colonne. Vous pouvez définir des libellés de niveau de sensibilité pour n'importe quelle colonne d'une table. Une table peut ainsi comporter des colonnes avec différents niveaux de sensibilité.

  • Prise en charge des vues : vous pouvez définir des libellés de niveau de sensibilité pour les vues. Le libellé de niveau de sensibilité d'une vue est indépendant des libellés de ses tables source.

  • La définition de libellés de niveau de sensibilité sur les colonnes de partition n'est pas prise en charge.

Opérations prises en charge

Le propriétaire du projet ou un utilisateur disposant du rôle Admin peut effectuer les opérations suivantes.

Vous pouvez effectuer ces opérations à l'aide d'outils tels que le client MaxCompute, MaxCompute Studio et DataWorks.

Politiques de contrôle d'accès par défaut

  • No-ReadUp : interdit aux utilisateurs d'accéder à des données dont le niveau de sensibilité est supérieur à leur niveau d'accès. Si votre scénario métier l'exige, vous devez procéder à une attribution explicite. Pour plus d'informations, consultez la section Accorder explicitement des autorisations de libellé.

  • Trusted-User : permet aux utilisateurs d'écrire des données dont le niveau de sensibilité n'est pas supérieur à leur niveau d'accès. Les nouvelles tables ou vues ont par défaut le niveau 0 (non confidentiel). Les nouveaux utilisateurs ont également par défaut le niveau 0.

Notes d'utilisation

  • Certains systèmes MAC traditionnels prennent en charge des politiques de sécurité plus complexes pour empêcher la distribution arbitraire des données au sein d'un projet.

    Par exemple, la politique No-WriteDown interdit aux utilisateurs d'écrire des données à un niveau de sensibilité inférieur à leur niveau d'accès. Afin de réduire le coût de gestion des niveaux de sensibilité des données, MaxCompute ne prend pas en charge la politique No-WriteDown par défaut.

    Si votre projet nécessite des restrictions similaires, vous pouvez exécuter la commande Set ObjectCreatorHasGrantPermission=false; pour modifier la configuration de sécurité du projet selon vos besoins.

  • Pour empêcher la circulation des données entre différents projets, vous pouvez exécuter la commande set ProjectProtection=true; afin d'activer la fonctionnalité ProjectProtection. Une fois activée, cette fonctionnalité restreint l'accès aux données au projet actuel, empêchant ainsi leur sortie. Pour plus d'informations sur la protection des données du projet, consultez la section Mécanisme de protection des données.

  • Lorsque vous supprimez un objet, MaxCompute révoque automatiquement toutes les autorisations de libellé qui lui sont associées.

  • Lorsque vous retirez un utilisateur d'un projet, MaxCompute conserve ses autorisations. Si vous ajoutez ultérieurement l'utilisateur au projet, ses autorisations précédentes sont réactivées. Pour effacer définitivement les informations d'autorisation d'un utilisateur, consultez la section Effacer définitivement les informations d'autorisation laissées par les utilisateurs supprimés.

Prérequis

Avant d'utiliser la solution de contrôle d'accès basée sur les libellés, vous avez besoin des informations suivantes :

  • Le nom du compte ou du rôle du destinataire de l'autorisation. Vous devez ajouter le compte ou le rôle au projet MaxCompute.

    • Format d'un compte Alibaba Cloud : ALIYUN$<account_id>

    • Format d'un compte utilisateur RAM : RAM$<account_id>:<RAM_user_UID>

    • Format d'un compte de rôle RAM : RAM$<account_id>:role/<RAM_role_name>

    Exécutez la commande LIST users; ou LIST roles; dans le client MaxCompute pour obtenir les informations relatives au compte ou au rôle.

    Pour ajouter un nouvel utilisateur ou un nouveau rôle, consultez les sections Planification et gestion des utilisateurs ou Planification des rôles.

  • Le nom de la table ou de la colonne cible.

    Exécutez la commande SHOW TABLES; dans le client MaxCompute pour obtenir les noms des tables, des vues et des colonnes.

Définir des niveaux de sensibilité pour les tables ou les colonnes

Le propriétaire du projet ou un utilisateur disposant du rôle Admin peut définir des libellés de niveau de sensibilité pour les tables ou les colonnes.

  • Syntaxe de la commande

    SET LabelSecurity=true;
    SET Label <number> TO TABLE <table_name>[(<column_list>)];
  • Notes d'utilisation

    • Si vous définissez un libellé de niveau de sensibilité pour une table mais pas pour ses colonnes, toutes les colonnes de la table héritent du niveau de sensibilité de la table.

    • Un libellé au niveau de la colonne remplace toujours le libellé au niveau de la table. La définition d'un libellé au niveau de la table n'affecte pas les libellés existants au niveau des colonnes. Par exemple, si vous définissez initialement le niveau de sensibilité d'une table sur 2, puis que vous définissez le niveau de sensibilité d'une colonne nommée col1 sur 3, le niveau de sensibilité de la table reste 2, celui de col1 devient 3 et les autres colonnes restent au niveau 2.

    • Pour modifier un libellé de niveau de sensibilité existant sur une table ou une colonne, exécutez à nouveau la commande avec le nouveau niveau.

    • Pour supprimer un libellé, définissez son niveau de sensibilité sur 0.

  • Paramètres

    |
    **Paramètre**
    |
    **Obligatoire**
    |
    **Description**
    | | --- | --- | --- | |
    number
    |
    Oui
    |
    Spécifie le niveau de sensibilité. Valeurs valides : 0 à 9. Plus la valeur est élevée, plus la sensibilité est grande.
    | |
    table_name
    |
    Oui
    |
    Le nom de la table ou de la vue cible.


    Exécutez la commande `SHOW TABLES;` dans le [client MaxCompute](t12112.dita#concept_dvj_dzw_5db) pour obtenir les noms des tables ou des vues.
    | |
    column_list
    |
    Non
    |
    Spécifie un ou plusieurs noms de colonnes. Séparez les noms de plusieurs colonnes par des virgules (,).
    |


























Définir des niveaux d'accès pour les utilisateurs ou les rôles

Le propriétaire du projet ou un utilisateur disposant du rôle Admin peut définir des libellés de niveau d'accès pour d'autres utilisateurs ou rôles.

  • Syntaxe de la commande

    SET LabelSecurity=true;
    SET Label <number> TO {USER|ROLE} <name>;
  • Notes d'utilisation

    • Après avoir défini un libellé de niveau d'accès pour un utilisateur, ce dernier ne peut accéder qu'aux données dont le niveau de sensibilité est inférieur ou égal à son niveau d'accès. Par exemple, si un utilisateur se voit attribuer un niveau d'accès de 3, il ne peut accéder qu'aux données dont le niveau de sensibilité est compris entre 0 et 3.

    • Pour modifier un libellé de niveau d'accès existant pour un utilisateur ou un rôle, exécutez à nouveau la commande avec le nouveau libellé de niveau d'accès.

  • Paramètres

    |
    **Paramètre**
    |
    **Obligatoire**
    |
    **Description**
    | | --- | --- | --- | |
    number
    |
    Oui
    |
    Spécifie le niveau de sensibilité des données le plus élevé auquel l'utilisateur ou le rôle peut accéder. Valeurs valides : 0 à 9.
    | |
    name
    |
    Oui
    |
    Le nom de l'utilisateur ou du rôle.


    Exécutez la commande `LIST users;` ou `LIST roles;` dans le [client MaxCompute](t12112.dita#concept_dvj_dzw_5db) pour obtenir les informations relatives au compte ou au rôle.
    |




















Accorder explicitement des autorisations de libellé

Le propriétaire du projet ou un utilisateur disposant du rôle Admin peut accorder aux utilisateurs l'autorisation d'accéder à des données dépassant leur niveau d'accès attribué.

  • Syntaxe de la commande

    GRANT Label <number> ON TABLE <table_name> [(<column_list>)] TO {USER|ROLE} <name> [WITH exp <days>];
  • Notes d'utilisation

    Pour un utilisateur donné, une attribution explicite sur une colonne remplace une attribution explicite sur la table parente.

  • Paramètres

    |
    **Paramètre**
    |
    **Obligatoire**
    |
    **Description**
    | | --- | --- | --- | |
    number
    |
    Oui
    |
    Le niveau de sensibilité des données le plus élevé auquel l'utilisateur ou le rôle peut accéder.


    Cette valeur correspond aux libellés de niveau de sensibilité des données. Valeurs valides : 0 à 9.
    | |
    table_name
    |
    Oui
    |
    Le nom de la table ou de la vue cible.


    Exécutez la commande `SHOW TABLES;` dans le [client MaxCompute](t12112.dita#concept_dvj_dzw_5db) pour obtenir les noms des tables ou des vues.
    | |
    column_list
    |
    Non
    |
    Spécifie les colonnes pour lesquelles accorder des autorisations. Vous pouvez spécifier plusieurs noms de colonnes séparés par des virgules (,).
    | |
    name
    |
    Oui
    |
    Le nom de l'utilisateur ou du rôle.


    Exécutez la commande `LIST users;` ou `LIST roles;` dans le [client MaxCompute](t12112.dita#concept_dvj_dzw_5db) pour obtenir les informations relatives au compte ou au rôle.
    | |
    days
    |
    Non
    |
    La période d'expiration de l'autorisation en jours. Valeurs valides : 0 à 263-1. Si vous ne spécifiez pas ce paramètre, l'autorisation est valide pendant 180 jours par défaut.
    |












































Révoquer des autorisations de libellé explicites

Le propriétaire du projet ou un utilisateur disposant du rôle Admin peut révoquer des autorisations de libellé explicites.

  • Syntaxe de la commande

    REVOKE Label ON TABLE <table_name> [(<column_list>)] FROM {USER|ROLE} <name>;
  • Notes d'utilisation

    • La révocation d'une attribution explicite sur une table révoque également toute attribution explicite sur les colonnes de cette table pour le même utilisateur.

    • La révocation d'une attribution explicite n'affecte pas le niveau d'accès attribué à l'utilisateur. Par exemple, un utilisateur dispose d'un niveau d'accès de 2 et se voit explicitement accorder l'accès à des données dont le niveau de sensibilité va jusqu'à 3 dans une table. Après la révocation de l'attribution explicite, l'utilisateur peut toujours accéder aux données dont le niveau de sensibilité est inférieur ou égal à 2 dans la table.

  • Paramètres

    |
    **Paramètre**
    |
    **Obligatoire**
    |
    **Description**
    | | --- | --- | --- | |
    table_name
    |
    Oui
    |
    Le nom de la table ou de la vue cible.


    Exécutez la commande `SHOW TABLES;` dans le [client MaxCompute](t12112.dita#concept_dvj_dzw_5db) pour obtenir les noms des tables ou des vues.
    | |
    column_list
    |
    Non
    |
    Spécifie les colonnes dont les autorisations doivent être révoquées. Vous pouvez spécifier plusieurs noms de colonnes séparés par des virgules (,).
    | |
    name
    |
    Oui
    |
    Le nom de l'utilisateur ou du rôle.


    Exécutez la commande `LIST users;` ou `LIST roles;` dans le [client MaxCompute](t12112.dita#concept_dvj_dzw_5db) pour obtenir les informations relatives au compte ou au rôle.
    |





























Effacer les autorisations expirées

Une fois les attributions explicites arrivées à expiration, le propriétaire du projet ou un utilisateur disposant du rôle Admin doit exécuter la commande suivante pour les effacer.

clear expired grants;

Exemples

Supposons qu'un projet nommé test_project contient une table nommée sale_detail. La table comporte les colonnes shop_name, customer_id et total_price.

Bob@aliyun.com est le propriétaire du projet test_project. Allen est un utilisateur RAM sous le compte Alibaba Cloud de Bob, et Bob a ajouté Allen au projet test_project.

L'instruction suivante est utilisée pour créer la table :

CREATE TABLE sale_detail (
    shop_name       STRING COMMENT 'Shop name',
    customer_id     STRING COMMENT 'Customer ID',
    total_price     DOUBLE COMMENT 'Order total price'
);

Exemple 1 : Définir des niveaux de sensibilité

-- 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                                        |
+------------------------------------------------------------------------------------+

Exemple 2 : Définir des niveaux d'accès utilisateur

  • Utilisateur standard dans le projet : Kate@aliyun.com

  • Utilisateur RAM dans le projet : 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)

Exemple 3 : Accorder des autorisations explicites

-- 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 |
+-------------+--------------+--------------------------+

Exemple 4 : Révoquer des autorisations explicites

-- 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)

Étapes suivantes

Une fois que vous avez compris le mécanisme d'autorisation basé sur les libellés, vous pouvez accorder des autorisations selon vos besoins :