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:
Um pacote instalado em seu projeto. Consulte Acesso a recursos entre projetos com base em pacotes
A função de proprietário do projeto ou a função de administrador no projeto onde o pacote está instalado
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 |
|
|
Sim |
Permissões a serem concedidas. Execute |
|
|
Sim |
Tipo do objeto. Execute |
|
|
Sim |
Nome do objeto. Execute |
|
|
Sim |
Nome do usuário ou da função. Consulte Visualizar usuários ou Visualizar funções. |
|
|
Sim (nível de coluna) |
Nome da tabela. Execute |
|
|
Não |
Um ou mais nomes de colunas, separados por vírgulas. |
|
|
Sim |
Ativa o controle de acesso granular para o pacote. |
|
|
Sim |
Nome do projeto MaxCompute proprietário do pacote. |
|
|
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 |
|
|
— |
Nível de segurança para dados sensíveis. Consulte Controle de acesso baseado em rótulo. |
|
|
Sim |
Nome da tabela. Execute |
|
|
Não |
Um ou mais nomes de colunas, separados por vírgulas. |
|
|
Sim |
Nome do usuário ou da função. Consulte Visualizar usuários ou Visualizar funções. |
|
|
Não |
Número de dias de validade da permissão. Padrão: 180 dias. |
|
|
Sim |
Ativa o controle de acesso granular para o pacote. |
|
|
Sim |
Nome do projeto MaxCompute proprietário do pacote. |
|
|
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
Acesso a recursos entre projetos com base em pacotes — crie, instale e gerencie pacotes
Controle de acesso baseado em rótulo — entenda como o LabelSecurity funciona no MaxCompute
Visualizar usuários e Visualizar funções — consulte informações de usuários e funções antes de conceder permissões