Todos os produtos
Search
Central de documentação

MaxCompute:Controle de acesso baseado em rótulos

Última atualização: Jun 26, 2026

O MaxCompute oferece suporte ao controle de acesso baseado em rótulos. Você pode atribuir rótulos de nível de sensibilidade a tabelas ou colunas e rótulos de nível de acesso a usuários no nível do projeto. Os usuários só acessam dados em um projeto do MaxCompute se o nível de sensibilidade dos dados for menor ou igual ao nível de acesso atribuído a eles. Este tópico descreve como gerenciar essas permissões e fornece exemplos.

Como funciona

O controle de acesso baseado em rótulos, também conhecido como LabelSecurity, é uma política obrigatória de controle de acesso (MAC) no nível do projeto, desativada por padrão.

O proprietário do projeto pode executar o comando SET LabelSecurity=true|false; para ativar ou desativar o LabelSecurity no nível do projeto.

Após ativar o LabelSecurity, o proprietário do projeto deve realizar as seguintes ações:

  • Defina níveis de sensibilidade claros para tabelas ou colunas.

  • Defina as classificações de nível de acesso dos usuários.

  • Atribuir rótulos de nível de sensibilidade a tabelas ou colunas e rótulos de nível de acesso a usuários ou funções.

Quando um usuário acessa dados com um nível de sensibilidade atribuído, ele precisa ter a permissão SELECT na tabela de destino. O acesso aos dados da tabela ou coluna só é permitido se o nível de sensibilidade for menor ou igual ao nível de acesso do usuário.

Recursos suportados

  • Suporte no nível da coluna: A granularidade mais fina suportada é o nível da coluna. Defina rótulos de nível de sensibilidade para qualquer coluna de uma tabela para permitir que ela contenha colunas com diferentes níveis de sensibilidade.

  • Suporte a views: Defina rótulos de nível de sensibilidade para views. O rótulo de nível de sensibilidade de uma view é independente dos rótulos de suas tabelas source.

  • Não há suporte para a definição de rótulos de nível de sensibilidade em colunas de partição.

Operações suportadas

O proprietário do projeto ou um usuário com a função Admin pode executar as operações abaixo.

Utilize ferramentas como o cliente MaxCompute, MaxCompute Studio e DataWorks para realizar essas operações.

Políticas padrão de controle de acesso

  • No-ReadUp: Impede que os usuários acessem dados com um nível de sensibilidade superior ao seu nível de acesso. Caso seu cenário de negócios exija esse acesso, realize uma concessão explícita. Para mais informações, consulte Conceder explicitamente permissões de rótulo.

  • Trusted-User: Permite que os usuários gravem dados com um nível de sensibilidade não superior ao seu nível de acesso. Tabelas ou views recém-criadas assumem o nível 0 (não confidencial) por padrão. Novos usuários também iniciam no nível 0.

Notas de uso

  • Alguns sistemas tradicionais de MAC suportam políticas de segurança mais complexas para evitar a distribuição arbitrária de dados dentro de um projeto.

    Por exemplo, a política No-WriteDown proíbe os usuários de gravar dados em um nível de sensibilidade inferior ao seu nível de acesso. Para reduzir o custo de gerenciamento dos níveis de sensibilidade de dados, o MaxCompute não suporta a política No-WriteDown por padrão.

    Se o seu projeto exigir restrições semelhantes, execute o comando Set ObjectCreatorHasGrantPermission=false; para modificar a configuração de segurança do projeto conforme necessário.

  • Para evitar o fluxo de dados entre projetos diferentes, execute o comando set ProjectProtection=true; e ative o recurso ProjectProtection. Esse recurso restringe o acesso aos dados ao projeto atual e impede que os dados saiam dele. Para mais informações sobre a proteção de dados do projeto, consulte Mecanismo de proteção de dados.

  • Ao excluir um objeto, o MaxCompute revoga automaticamente todas as permissões de rótulo associadas a ele.

  • Ao remover um usuário de um projeto, o MaxCompute retém suas permissões. Se você adicionar o usuário novamente ao projeto posteriormente, as permissões anteriores serão reativadas. Para limpar permanentemente as informações de permissão de um usuário, consulte Limpar permanentemente informações de permissão deixadas por usuários excluídos.

Pré-requisitos

Antes de utilizar a solução de controle de acesso baseado em rótulos, obtenha as seguintes informações:

  • Nome da conta ou da função do destinatário da permissão. Adicione a conta ou função ao projeto do MaxCompute.

    • Formato para uma conta Alibaba Cloud: ALIYUN$<account_id>

    • Formato para uma conta de usuário RAM: RAM$<account_id>:<RAM_user_UID>

    • Formato para uma conta de função RAM: RAM$<account_id>:role/<RAM_role_name>

    Execute o comando LIST users; ou LIST roles; no cliente MaxCompute para obter informações sobre contas ou funções.

    Para adicionar um novo usuário ou função, consulte Planejamento e gerenciamento de usuários ou Planejamento de funções.

  • Nome da tabela ou coluna de destino.

    Execute o comando SHOW TABLES; no cliente MaxCompute para obter os nomes das tabelas, views e colunas.

Definir níveis de sensibilidade para tabelas ou colunas

O proprietário do projeto ou um usuário com a função Admin pode definir rótulos de nível de sensibilidade para tabelas ou colunas.

  • Sintaxe do comando

    SET LabelSecurity=true;
    SET Label <number> TO TABLE <table_name>[(<column_list>)];
  • Notas de uso

    • Se você definir um rótulo de nível de sensibilidade para uma tabela, mas não para suas colunas, todas as colunas da tabela herdarão o nível de sensibilidade da tabela.

    • Um rótulo no nível da coluna sempre substitui o rótulo no nível da tabela. Definir um rótulo no nível da tabela não afeta os rótulos existentes no nível da coluna. Por exemplo, se você definir inicialmente o nível de sensibilidade de uma tabela como 2 e depois definir o nível de sensibilidade de uma coluna chamada col1 como 3, o nível de sensibilidade da tabela permanecerá 2, o nível de sensibilidade de col1 passará a ser 3 e as outras colunas permanecerão no nível 2.

    • Para modificar um rótulo de nível de sensibilidade existente em uma tabela ou coluna, execute o comando novamente com o novo nível.

    • Para remover um rótulo, defina seu nível de sensibilidade como 0.

  • Parâmetros

    Parâmetro

    Obrigatório

    Descrição

    number

    Sim

    Especifica o nível de sensibilidade. Valores válidos: 0 a 9. Valores maiores indicam maior sensibilidade.

    table_name

    Sim

    Nome da tabela ou view de destino.

    Execute o comando SHOW TABLES; no cliente MaxCompute para obter os nomes das tabelas ou views.

    column_list

    Não

    Especifica um ou mais nomes de colunas. Separe vários nomes de colunas com vírgulas (,).

Definir níveis de acesso para usuários ou funções

O proprietário do projeto ou um usuário com a função Admin pode definir rótulos de nível de acesso para outros usuários ou funções.

  • Sintaxe do comando

    SET LabelSecurity=true;
    SET Label <number> TO {USER|ROLE} <name>;
  • Notas de uso

    • Após a definição de um rótulo de nível de acesso para um usuário, ele só poderá acessar dados com um nível de sensibilidade menor ou igual ao seu nível de acesso. Por exemplo, se um usuário receber o nível de acesso 3, ele só poderá acessar dados com nível de sensibilidade de 0 a 3.

    • Para modificar um rótulo de nível de acesso existente para um usuário ou função, execute o comando novamente com o novo rótulo de nível de acesso.

  • Parâmetros

    Parâmetro

    Obrigatório

    Descrição

    number

    Sim

    Especifica o nível máximo de sensibilidade de dados que o usuário ou função pode acessar. Valores válidos: 0 a 9.

    name

    Sim

    Nome do usuário ou da função.

    Execute o comando LIST users; ou LIST roles; no cliente MaxCompute para obter informações sobre contas ou funções.

Conceder explicitamente permissões de rótulo

O proprietário do projeto ou um usuário com a função Admin pode conceder aos usuários permissão para acessar dados que excedam seu nível de acesso atribuído.

  • Sintaxe do comando

    GRANT Label <number> ON TABLE <table_name> [(<column_list>)] TO {USER|ROLE} <name> [WITH exp <days>];
  • Notas de uso

    Para um determinado usuário, uma concessão explícita em uma coluna substitui uma concessão explícita na tabela pai.

  • Parâmetros

    Parâmetro

    Obrigatório

    Descrição

    number

    Sim

    Nível máximo de sensibilidade de dados que o usuário ou função pode acessar.

    Este valor corresponde aos rótulos de nível de sensibilidade de dados. Valores válidos: 0 a 9.

    table_name

    Sim

    Nome da tabela ou view de destino.

    Execute o comando SHOW TABLES; no cliente MaxCompute para obter os nomes das tabelas ou views.

    column_list

    Não

    Especifica as colunas para as quais conceder permissões. É possível especificar vários nomes de colunas separados por vírgulas (,).

    name

    Sim

    Nome do usuário ou da função.

    Execute o comando LIST users; ou LIST roles; no cliente MaxCompute para obter informações sobre contas ou funções.

    days

    Não

    Período de validade da permissão em dias. Valores válidos: 0 a 263-1. Se este parâmetro não for especificado, a permissão será válida por 180 dias por padrão.

Revogar permissões explícitas de rótulo

O proprietário do projeto ou um usuário com a função Admin pode revogar permissões explícitas de rótulo.

  • Sintaxe do comando

    REVOKE Label ON TABLE <table_name> [(<column_list>)] FROM {USER|ROLE} <name>;
  • Notas de uso

    • Revogar uma concessão explícita em uma tabela também revoga quaisquer concessões explícitas nas colunas dessa tabela para o mesmo usuário.

    • A revogação de uma concessão explícita não afeta o nível de acesso atribuído ao usuário. Por exemplo, se um usuário tem nível de acesso 2 e recebeu explicitamente acesso a dados com nível de sensibilidade até 3 em uma tabela, após a revogação da concessão explícita, ele ainda poderá acessar dados com nível de sensibilidade 2 ou inferior nessa tabela.

  • Parâmetros

    Parâmetro

    Obrigatório

    Descrição

    table_name

    Sim

    Nome da tabela ou view de destino.

    Execute o comando SHOW TABLES; no cliente MaxCompute para obter os nomes das tabelas ou views.

    column_list

    Não

    Especifica as colunas das quais revogar permissões. É possível especificar vários nomes de colunas separados por vírgulas (,).

    name

    Sim

    Nome do usuário ou da função.

    Execute o comando LIST users; ou LIST roles; no cliente MaxCompute para obter informações sobre contas ou funções.

Limpar permissões expiradas

Após a expiração das concessões explícitas, o proprietário do projeto ou um usuário com a função Admin deve executar o seguinte comando para limpá-las.

clear expired grants;

Exemplos

Considere um projeto chamado test_project que contém uma tabela chamada sale_detail. A tabela possui as colunas shop_name, customer_id e total_price.

Bob@aliyun.com é o proprietário do projeto test_project. Allen é um usuário RAM sob a conta Alibaba Cloud de Bob, e Bob adicionou Allen ao projeto test_project.

Use a instrução a seguir para criar a tabela:

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

Exemplo 1: Definir níveis de sensibilidade

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

Exemplo 2: Definir níveis de acesso de usuários

  • Usuário comum no projeto: Kate@aliyun.com

  • Usuário RAM no projeto: 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)

Exemplo 3: Conceder permissões explícitas

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

Exemplo 4: Revogar permissões explícitas

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

Próximas etapas

Após compreender o mecanismo de autorização baseado em rótulos, conceda permissões conforme necessário: