全部產品
Search
文件中心

MaxCompute:Label許可權控制

更新時間:Mar 17, 2026

MaxCompute支援在專案層級為使用者佈建訪問許可等級標籤,為表或表的列設定敏感等級標籤(Label),使用者僅可以訪問MaxCompute專案中敏感等級小於等於自身訪問許可等級的表或列資料。本文介紹Label授權操作並提供樣本。

功能介紹

Label許可權控制即LabelSecurity,是專案層級的一種強制存取控制策略,預設為關閉狀態。

專案所有者(Project Owner)可以在MaxCompute專案的Project層級,執行SET LabelSecurity=true|false;命令,開啟或關閉LabelSecurity。

開啟LabelSecurity後,專案所有者(Project Owner)需要執行如下操作:

  • 定義明確的表或表的列敏感等級

  • 定義使用者訪問許可等級劃分標準

  • 分別為表或表的列、使用者或角色設定敏感等級標籤、訪問許可等級標籤

當使用者訪問設定了敏感等級的資料時,除必須擁有目標表的SELECT許可權外,僅能訪問敏感等級小於等於自身訪問許可等級的表或列資料。

支援能力

  • 列層級支援:最小支援粒度為列層級。支援對錶的任何設定敏感等級標籤,一張表可以由不同敏感等級的列構成。

  • 視圖支援:支援對視圖設定敏感等級標籤。視圖的敏感等級標籤和視圖對應的源表的敏感等級標籤是獨立的。

  • 不支援對分區列設定敏感性資料等級標籤。

支援操作

專案所有者(Project Owner)和具備Admin角色的使用者可以執行如下操作。

上述操作可通過MaxCompute用戶端MaxCompute StudioDataWorks等工具執行。

預設許可權控制策略

  • No-ReadUp:不允許使用者訪問敏感等級大於使用者訪問許可等級的資料。如果實際業務涉及此情境,需要執行顯式授權操作。更多顯式授權操作資訊,請參見Label顯式授權

  • Trusted-User:允許使用者寫入不高於使用者訪問許可等級的資料。新建立的表或視圖預設為0級(不保密)。新添加使用者預設為0級。

適用範圍

  • 在一些傳統的強制存取控制系統中,為了防止資料在專案內部被任意分發,通常還支援更多複雜的安全性原則。

    例如,不允許使用者寫入敏感等級不高於使用者訪問許可等級的資料(No-WriteDown)。但在MaxCompute中,考慮到資料敏感等級的管理成本,預設安全性原則並不支援No-WriteDown

    如果專案有類似需求,可以通過Set ObjectCreatorHasGrantPermission=false;命令,修改專案安全配置以達到控制目的。

  • 為避免資料在不同專案之間流動,可以通過set ProjectProtection=true;命令,將專案設定為受保護狀態(ProjectProtection)。設定後,只允許使用者在專案內訪問資料,有效防止資料流出到專案之外。更多專案資料保護資訊,參見資料保護機制

  • 如果對象被刪除,MaxCompute會自動撤銷與該對象關聯的所有Label授權資訊。

  • 當一個使用者被移除後,與該使用者有關的授權仍然會被保留。一旦該使用者以後被再次添加到該專案時,該使用者的歷史授權存取權限將被重新啟用。如果需要徹底清除使用者的許可權資訊,請參見徹底清除被刪除使用者遺留的許可權資訊

前提條件

使用Label許可權控制方案前,請確認已記錄好如下資訊:

  • 被授權人的帳號或角色名稱,且帳號或角色已添加至MaxCompute專案。

    • 阿里雲帳號格式為ALIYUN$<account_id>

    • RAM使用者帳號格式為 RAM$<account_id>:<RAM使用者UID>

    • RAM角色帳號格式為`RAM$<account_id>:role/<RAM角色名稱>`

    通過MaxCompute用戶端執行LIST users;LIST roles;命令擷取帳號或角色資訊。

    如果需要新增使用者或角色,請參見使用者規劃與管理角色規劃

  • 授權對象表或列的名稱。

    通過MaxCompute用戶端執行SHOW TABLES;命令擷取表或視圖名稱、列名稱。

為表或列資料設定敏感等級標籤

由Project Owner或具備Admin角色的使用者為表或表的列設定敏感等級標籤。

  • 命令格式

    SET LabelSecurity=true;
    SET Label <number> TO TABLE <table_name>[(<column_list>)];
  • 注意事項

    • 如果只是對錶設定了敏感等級標籤,未對列設定敏感等級標籤,則表的所有列的敏感等級都相同且等於對錶設定的標籤。例如對錶設定的敏感等級為2,未設定列的敏感等級,則表的所有列的敏感等級都為2。

    • 對列設定的標籤會覆蓋對錶設定的標籤(與等級高低無關),對錶設定的標籤不會覆蓋對列設定的標籤。例如最初為表設定的敏感等級為2,對錶的某一列col1設定敏感等級為3,此時表的敏感等級為2,表中col1列敏感等級為3,其他列的敏感等級為2。

    • 如果需要修改對錶或列已設定的敏感等級標籤,重新執行該命令設定新的等級標籤即可。

  • 參數說明

    參數名稱

    是否必填

    說明

    number

    指定敏感等級。取值範圍為0~9。數值越大,安全層級越高。

    table_name

    指定目標表或視圖的名稱。

    通過MaxCompute用戶端執行SHOW TABLES;命令擷取表或視圖名稱。

    column_list

    指定列名。可以指定多個列名,列名之間用英文逗號(,)分隔。

為使用者或角色設定訪問許可等級標籤

由Project Owner或具備Admin角色的使用者為其他使用者或角色設定訪問許可等級標籤。

  • 命令格式

    SET LabelSecurity=true;
    SET Label <number> TO {USER|ROLE} <name>;
  • 注意事項

    • 為使用者佈建訪問許可等級標籤後,使用者只能訪問敏感層級小於等於訪問許可等級標籤的資料。例如指定使用者的敏感等級為3,則使用者只能訪問敏感等級為0~3的表資料或列資料。

    • 如果需要修改對使用者或角色已設定的敏感等級標籤,只需重新執行該命令設定新的訪問許可等級標籤即可。

  • 參數說明

    參數名稱

    是否必填

    說明

    number

    指定使用者或角色可訪問的最高資料敏感等級。取值範圍為0~9,與資料敏感等級標籤相對應。

    name

    指定使用者或角色的名稱。

    通過MaxCompute用戶端執行LIST users;LIST roles;命令擷取帳號或角色資訊。

Label顯式授權

由Project Owner或具備Admin角色的使用者為低層級使用者授予訪問高敏感等級資料的許可權。

  • 命令格式

    GRANT Label <number> ON TABLE <table_name> [(<column_list>)] TO {USER|ROLE} <name> [WITH exp <days>];
  • 注意事項

    顯式授予使用者的表的列Label許可權,會覆蓋顯式授予使用者的表的Label許可權。

  • 參數說明

    參數名稱

    是否必填

    說明

    number

    指定使用者或角色可訪問的最高資料敏感等級。

    取值範圍為0~9,與資料敏感等級標籤相對應。

    table_name

    指定目標表或視圖的名稱。

    通過MaxCompute用戶端執行SHOW TABLES;命令擷取表或視圖名稱。

    column_list

    當需要授予目標表或視圖中指定列的存取權限時,需要配置該參數。單次授權可以指定多個列名,列名之間用英文逗號(,)分隔。

    name

    指定使用者或角色的名稱。

    通過MaxCompute用戶端執行LIST users;LIST roles;命令擷取帳號或角色資訊。

    days

    指定許可權到期時間,單位為天。取值範圍為:0~263-1。不指定該參數時,預設到期時間為180天。

撤銷Label顯式授權

由Project Owner或具備Admin角色的使用者撤銷Label顯式授權。

  • 命令格式

    REVOKE Label ON TABLE <table_name> [(<column_list>)] FROM {USER|ROLE} <name>;
  • 注意事項

    • 撤銷顯式授予使用者的表的Label許可權,會同時撤銷顯式授予使用者的表列的Label許可權。

    • 撤銷顯式Label授權資訊,不會影響為使用者佈建的訪問許可等級標籤。例如使用者的訪問許可等級為2,為使用者顯式授予訪問某張表敏感等級不超過3的資料,撤銷授權後,使用者仍然可以訪問表中敏感等級小於等於2的資料。

  • 參數說明

    參數名稱

    是否必填

    說明

    table_name

    指定目標表或視圖的名稱。

    通過MaxCompute用戶端執行SHOW TABLES;命令擷取表或視圖名稱。

    column_list

    當需要撤銷目標表或視圖中指定列的敏感性資料存取權限時,需要配置該參數。可以指定多個列名,列名之間用英文逗號(,)分隔。

    name

    指定使用者或角色的名稱。

    通過MaxCompute用戶端執行LIST users;LIST roles;命令擷取帳號或角色資訊。

清理到期許可權

當Label顯式授權資訊到期後,需要由Project Owner或具備Admin角色的使用者執行如下命令清理到期許可權資訊。

clear expired grants;

Label許可權控制樣本

假設專案test_project中存在一張表sale_detail。表列有shop_namecustomer_idtotal_price

Bob@aliyun.com是test_project的專案所有者。Allen為隸屬於Bob的RAM使用者且已被添加至專案test_project中。

建表語句如下:

CREATE TABLE sale_detail (
    shop_name       STRING COMMENT '店鋪名稱',
    customer_id     STRING COMMENT '顧客ID',
    total_price     DOUBLE COMMENT '訂單總價'
);

樣本一:為表sale_detail或表的列設定敏感等級標籤

-- Bob進入專案test_project。
USE test_project;

-- 設定表sale_detail的Label為1級。此時表中所有列的敏感等級為1級。
SET Label 1 TO TABLE sale_detail; 

-- 設定sale_detail的shop_name和customer_id兩列的Label為2級。此時其他列的Label仍為1。
SET Label 2 TO TABLE sale_detail(shop_name, customer_id); 
-- 查看錶的Label資訊。
DESCRIBE sale_detail;
-- 返回結果
+------------------------------------------------------------------------------------+
| TableLabel:                                                                        |
| MaxLabel:                 L2                                                       |
+------------------------------------------------------------------------------------+
| InternalTable: YES      | Size: 0                                                  |
+------------------------------------------------------------------------------------+
| Native Columns:                                                                    |
+------------------------------------------------------------------------------------+
| Field           | Type       | Label | Comment                                     |
+------------------------------------------------------------------------------------+
| shop_name       | string     | 2     | 店鋪名稱                                     |
| customer_id     | string     | 2     | 顧客ID                                      |
| total_price     | double     |       | 訂單總價                                     |
+------------------------------------------------------------------------------------+

-- 修改表sale_detail的Label為3級。需要注意的是:此時shop_name和customer_id兩列的Label仍為2級,其他列的Label修改為3。
SET Label 3 TO TABLE sale_detail; 
-- 查看錶的Label資訊。
DESCRIBE sale_detail;
-- 返回結果
+------------------------------------------------------------------------------------+
| TableLabel:               3                                                        |
| MaxLabel:                 L3                                                       |
+------------------------------------------------------------------------------------+
| InternalTable: YES      | Size: 0                                                  |
+------------------------------------------------------------------------------------+
| Native Columns:                                                                    |
+------------------------------------------------------------------------------------+
| Field           | Type       | Label | Comment                                     |
+------------------------------------------------------------------------------------+
| shop_name       | string     | 2     | 店鋪名稱                                        |
| customer_id     | string     | 2     | 顧客ID                                        |
| total_price     | double     | 3     | 訂單總價                                        |
+------------------------------------------------------------------------------------+

-- 修改表sale_detail的shop_name和customer_id兩列的Label為4級。此時其他列的Label仍為3。
SET Label 4 TO TABLE sale_detail(shop_name, customer_id); 

-- 查看錶的Label資訊。
DESCRIBE sale_detail;
-- 返回結果。
+------------------------------------------------------------------------------------+
| TableLabel:                                                                        |
| MaxLabel:                 L4                                                       |
+------------------------------------------------------------------------------------+
| InternalTable: YES      | Size: 0                                                  |
+------------------------------------------------------------------------------------+
| Native Columns:                                                                    |
+------------------------------------------------------------------------------------+
| Field           | Type       | Label | Comment                                     |
+------------------------------------------------------------------------------------+
| shop_name       | string     | 4     | 店鋪名稱                                        |
| customer_id     | string     | 4     | 顧客ID                                        |
| total_price     | double     |       | 訂單總價                                        |
+------------------------------------------------------------------------------------+

樣本二:為專案中的一般使用者及RAM使用者佈建訪問許可等級標籤

  • 專案中的一般使用者:Kate@aliyun.com

  • 專案中的RAM使用者:RAM$Bob@aliyun.com:Allen

-- Bob進入專案test_project。
USE test_project;
-- 設定Kate的訪問許可等級標籤為3級,則Kate能訪問敏感等級為0~3級的資料。 
SET Label 3 TO USER ALIYUN$Kate@aliyun.com; 

-- 設定RAM使用者Allen的訪問許可等級標籤為1級,則Allen能訪問敏感等級為0~1級的資料。
SET Label 1 TO USER RAM$Bob@aliyun.com:Allen; 

-- 查看Allen的訪問許可等級資訊。
SHOW LABEL GRANTS FOR RAM$Bob@aliyun.com:Allen;
-- 返回結果
User Label: 1

(granted label list is empty)

樣本三:為Allen顯式授予訪問高敏感級資料的許可權

-- 進入專案test_project。
USE test_project;

-- 顯式授權Allen訪問sale_detail表中敏感度不超過3級的資料,授權有效期間為4天。
GRANT LABEL 3 ON TABLE sale_detail TO USER RAM$Bob@aliyun.com:Allen WITH exp 4; 
-- 查看Allen的顯式授權結果。
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
-- 返回結果如下:
User Label: 1
+-------------+--------------+--------------------------+
| Column      | GrantedLabel | Expires                  |
+-------------+--------------+--------------------------+
| total_price | 3            | 2025-12-26T11:13:20+0800 |
+-------------+--------------+--------------------------+

-- 顯式授權Allen訪問sale_detail表的shop_name、customer_id和total_price列中敏感度不超過4級的資料,授權有效期間為10天。
GRANT LABEL 4 ON TABLE sale_detail(shop_name, customer_id, total_price) TO USER RAM$Bob@aliyun.com:Allen WITH exp 10;
-- 查看Allen的顯式授權結果。
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
-- 返回結果如下:
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 |
+-------------+--------------+--------------------------+

樣本四:撤銷為Allen授予的訪問高敏感級資料許可權

-- 此時,在之前的資料許可權配置中:
-- 先顯式授權Allen訪問sale_detail表中敏感度不超過3級的資料
-- 後顯式授權Allen訪問sale_detail表的shop_name、customer_id和total_price列中敏感度不超過4級的資料

-- 撤銷Allen訪問sale_detail表的shop_name、customer_id和total_price列層級的資料存取權限。
REVOKE LABEL ON TABLE sale_detail(shop_name, customer_id, total_price) FROM USER RAM$Bob@aliyun.com:Allen;
-- 查看Allen的撤銷授權結果。
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
--返回結果如下:



-- 撤銷Allen訪問sale_detail表中敏感性資料的許可權。
REVOKE LABEL ON TABLE sale_detail FROM USER RAM$Bob@aliyun.com:Allen; 
--查看Allen的撤銷授權結果。
SHOW LABEL GRANTS ON TABLE sale_detail FOR USER RAM$Bob@aliyun.com:Allen;
--返回結果如下:
User Label: 1
+-------------+--------------+---------+
| Column      | GrantedLabel | Expires |
+-------------+--------------+---------+
| total_price | 1            |         |
+-------------+--------------+---------+

後續指引

瞭解Label授權機制後,可以根據實際業務需要授權: