Todos os produtos
Search
Central de documentação

MaxCompute:Access control for packages

Última atualização: Jun 26, 2026

Após instalar um pacote em seu projeto, aplique controle de acesso granular para restringir quais usuários ou funções podem acessar recursos específicos dentro do pacote. O MaxCompute oferece suporte a duas políticas complementares: controle de acesso baseado em lista de controle de acesso (ACL) para permissões no nível de objeto e LabelSecurity para aplicação de sensibilidade de dados no nível de coluna. Aplique primeiro o controle de acesso baseado em ACL e, opcionalmente, adicione o LabelSecurity para restringir o acesso por nível de segurança.

Pré-requisitos

Antes de começar, verifique se você possui:

Controle de acesso baseado em ACL

O controle de acesso baseado em ACL permite que o proprietário do projeto ou um usuário com a função de administrador conceda ou revogue permissões em objetos específicos de um pacote. Assim, os usuários no projeto de instalação podem executar apenas as operações explicitamente concedidas nesses objetos.

Execute estes comandos no cliente MaxCompute, no MaxCompute Studio ou no console DataWorks.

Conceder permissões

Para conceder permissões em um objeto específico do pacote:

grant <actions> on <object_type> <object_name> to [user|role] <name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");

Para conceder permissões em colunas específicas de uma tabela:

-- Column-level grant: specify the column list after the table name
grant <actions> on table <table_name>[(<column_list>)] to [user|role] <name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");

Parâmetro

Obrigatório

Descrição

actions

Sim

Permissões a serem concedidas. Execute describe package <project_name>.<package_name>; para visualizar as permissões disponíveis para cada objeto.

object_type

Sim

Tipo do objeto. Execute describe package <project_name>.<package_name>; para ver os tipos de objeto incluídos no pacote.

object_name

Sim

Nome do objeto. Execute describe package <project_name>.<package_name>; para listar os nomes dos objetos.

name

Sim

Nome do usuário ou da função. Consulte Visualizar usuários ou Visualizar funções.

table_name

Sim (nível de coluna)

Nome da tabela. Execute describe package <project_name>.<package_name>; para ver as tabelas no pacote.

column_list

Não

Um ou mais nomes de colunas, separados por vírgulas.

"refobject"="true"

Sim

Ativa o controle de acesso granular para o pacote.

"refproject"="<project_name>"

Sim

Nome do projeto MaxCompute proprietário do pacote.

"package"="<package_name>"

Sim

Nome do pacote.

Visualizar permissões

Para visualizar as permissões atuais baseadas em ACL em um objeto do pacote:

show grants on <object_type> <object_name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");

Revogar permissões

Para revogar permissões de um objeto específico:

revoke <actions> on <object_type> <object_name> from [user|role] <name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");

Para revogar permissões de colunas específicas em uma tabela:

revoke <actions> on table <table_name>[(<column_list>)] from [user|role] <name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");

Exemplo: Conceder e revogar permissões de tabela

O exemplo a seguir utiliza o cenário descrito em Acesso a recursos entre projetos com base em pacotes. John (proprietário do projeto prj2) concede a Bob a permissão SELECT na tabela sampletable do pacote datamining (de propriedade de prj1) e, em seguida, a revoga.

use prj2;

-- Grant SELECT on the table to Bob
grant Select on table sampletable to user aliyun$bob@aliyun.com
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");

-- Verify the grant
show grants on table sampletable
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");

-- Revoke the permission
revoke Select on table sampletable from user aliyun$bob@aliyun.com
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");

Controle de acesso baseado em rótulo

O LabelSecurity adiciona uma segunda camada de controle sobre o acesso baseado em ACL. Após conceder as permissões de ACL, ative o LabelSecurity para restringir ainda mais o acesso com base no nível de sensibilidade dos dados. Dessa forma, os usuários só poderão ler dados cujo nível de segurança seja igual ou inferior ao nível especificado.

Realize o controle de acesso baseado em ACL antes de aplicar o LabelSecurity. O LabelSecurity aplica-se apenas a recursos de tabela no pacote.

Conceder permissões baseadas em rótulo

grant label <number> on table <table_name>[(<column_list>)] to [user|role] <name>
[with exp <days>]
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");

Parâmetro

Obrigatório

Descrição

number

—

Nível de segurança para dados sensíveis. Consulte Controle de acesso baseado em rótulo.

table_name

Sim

Nome da tabela. Execute describe package <project_name>.<package_name>; para ver as tabelas no pacote.

column_list

Não

Um ou mais nomes de colunas, separados por vírgulas.

name

Sim

Nome do usuário ou da função. Consulte Visualizar usuários ou Visualizar funções.

days

Não

Número de dias de validade da permissão. Padrão: 180 dias.

"refobject"="true"

Sim

Ativa o controle de acesso granular para o pacote.

"refproject"="<project_name>"

Sim

Nome do projeto MaxCompute proprietário do pacote.

"package"="<package_name>"

Sim

Nome do pacote.

Visualizar permissões baseadas em rótulo

show label grants on table <table_name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");

Revogar permissões baseadas em rótulo

revoke label on table <table_name>[(<column_list>)] from [user|role] <name>
privilegeproperties ("refobject"="true", "refproject"="<project_name>", "package"="<package_name>");

Exemplo: Combinar controle de acesso baseado em ACL e rótulo

Este exemplo dá continuidade ao cenário de ACL apresentado anteriormente. A tabela sampletable possui três colunas com diferentes níveis de segurança: t1 (nível 1), t2 (nível 2) e t3 (nível 3). John concede a Bob acesso a dados até o nível de segurança 2, válido por 7 dias.

use prj2;

-- Step 1: Enable LabelSecurity
set LabelSecurity=true;

-- Step 2: Assign security levels to each column
set label 1 to table sampletable(t1);
set label 2 to table sampletable(t2);
set label 3 to table sampletable(t3);

-- Step 3: Grant Bob label 2 access on t2, valid for 7 days
-- Bob already has SELECT on the table from the ACL grant above.
-- After this, Bob can read t2 (level 2) but not t3 (level 3).
grant label 2 on table sampletable(t2) to user aliyun$bob@aliyun.com with exp 7
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");

-- Verify the label grant
show label grants on table sampletable
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");

-- Revoke label access
revoke label 2 on table sampletable(t2) from user aliyun$bob@aliyun.com
privilegeproperties ("refobject"="true", "refproject"="prj1", "package"="datamining");
Quando o proprietário do pacote (em prj1 ) concede a outro projeto o direito de instalar o pacote, ele também deve especificar o rótulo caso o controle de acesso baseado em rótulo seja necessário:
allowproject <project_name> to install package <package_name> using label <number>;

Próximos passos