As funções integradas do MaxCompute possuem permissões amplas. Por exemplo, a função Development concede permissões de operação em todas as tabelas e recursos de um projeto. Para restringir operações específicas de um usuário com função integrada — como impedir a exclusão de tabelas críticas — use o mecanismo de gerenciamento de permissões baseado em políticas e aplique regras de negação sobre a função existente.
Todas as operações deste tópico exigem o cliente MaxCompute. O console não oferece suporte ao gerenciamento de regras de negação baseadas em políticas.
Pré-requisitos
Antes de começar, verifique se você tem:
O cliente MaxCompute instalado. Para mais informações, consulte Instale e configure o cliente MaxCompute.
A função de proprietário do projeto ou a função integrada Super_Administrator ou Admin no projeto de destino.
Contexto
Para usuários que já possuem uma função integrada, o mecanismo baseado em políticas é mais eficaz que a lista de controle de acesso (ACL) no controle granular de permissões. A tabela a seguir indica quando usar cada mecanismo.
|
Mecanismo |
Funcionamento |
Cenário de uso |
|
Política |
Concede ou revoga operações específicas em objetos do projeto (como tabelas) para uma função. As permissões aplicadas à função valem para todos os usuários atribuídos a ela. |
Um usuário possui uma função integrada e você precisa restringir operações específicas, como impedir a exclusão de determinadas tabelas. |
|
ACL |
Concede ou revoga permissões no nível de objeto diretamente para usuários ou grupos. |
O gerenciamento de permissões baseado em políticas não é necessário. |
Para mais informações, consulte Usuários e funções e Controle de acesso e controle de download baseados em políticas.
Conceder permissões com o mecanismo baseado em políticas
O exemplo a seguir mostra como impedir que a usuária RAM Alice (atribuída à função Development) exclua tabelas cujos nomes começam com tb_. Alice pertence à conta Alibaba Cloud bo*@aliyun.com.
Essa abordagem cria uma função de negação separada (delete_test) em vez de modificar a função integrada diretamente. Assim, a regra de negação permanece isolada e fácil de revogar: você pode removê-la de um usuário sem afetar outros que compartilham a mesma função integrada.
Somente o proprietário do projeto ou usuários com a função Super_Administrator ou Admin podem executar esta operação.
-
Execute
CREATE ROLEpara criar a funçãodelete_test.CREATE ROLE delete_test;Para mais informações, consulte Planejamento de funções.
-
Execute
GRANTpara configurar a funçãodelete_teste negar operações DROP em todas as tabelas cujos nomes começam comtb_.GRANT DROP ON TABLE tb_* TO ROLE delete_test privilegeproperties("policy" = "true", "allow"="false");O sinalizador
"policy" = "true"ativa o mecanismo baseado em políticas. O sinalizador"allow"="false"define a regra como negação. Para mais detalhes sobre a sintaxe GRANT, consulte a seção "Controle de acesso baseado em políticas usando a instrução GRANT" em Controle de acesso e controle de download baseados em políticas. -
Execute
GRANTpara atribuir a funçãodelete_testà usuária Alice.GRANT delete_test TO ram$bo*@aliyun.com:Alice;Se não souber a qual conta Alibaba Cloud Alice pertence, execute
LIST USERS;no cliente MaxCompute para consultá-la. Para mais informações, consulte Planejamento de funções. -
Execute
SHOW GRANTSpara verificar as permissões de Alice.SHOW GRANTS FOR ram$bo*@aliyun.com:Alice;Confirme se a saída inclui um bloco
[role/delete_test]emAuthorization Type: Policycom o prefixoD(Deny) na entradatb_*: Drop.[roles] role_project_admin, delete_test Authorization Type: Policy [role/delete_test] D projects/mcproject_name/tables/tb_*: Drop [role/role_project_admin] A projects/mcproject_name: * A projects/mcproject_name/instances/*: * A projects/mcproject_name/jobs/*: * A projects/mcproject_name/offlinemodels/*: * A projects/mcproject_name/packages/*: * A projects/mcproject_name/registration/functions/*: * A projects/mcproject_name/resources/*: * A projects/mcproject_name/tables/*: * A projects/mcproject_name/volumes/*: * Authorization Type: ObjectCreator AG projects/mcproject_name/tables/local_test: All AG projects/mcproject_name/tables/mr_multiinout_out1: All AG projects/mcproject_name/tables/mr_multiinout_out2: All AG projects/mcproject_name/tables/ramtest: All AG projects/mcproject_name/tables/wc_in: All AG projects/mcproject_name/tables/wc_in1: All AG projects/mcproject_name/tables/wc_in2: All AG projects/mcproject_name/tables/wc_out: AllPara mais informações, consulte Consultar permissões usando MaxCompute SQL.
-
Faça login no cliente MaxCompute como Alice e execute
DROP TABLEpara testar a restrição.DROP TABLE tb_test;Se a regra de negação estiver ativa, o comando falhará com um erro semelhante a:
FAILED: Catalog Service Failed, ErrorCode: 50, Error Message: ODPS-0130013:Authorization exception - Authorization Failed [4011], You have NO privilege 'odps:Drop' on {acs:odps:*:projects/mcproject_name/tables/tb_test}. Explicitly denied by policy. Context ID:85efa8e9-40da-4660-bbfd-b503dfa64c0a. --->Tips: Pricipal:RAM$bo*@aliyun.com:Alice; Deny by policyDuas frases confirmam que a regra de negação baseada em política está em vigor:
Explicitly denied by policyno meio da mensagem de erro eDeny by policyao final. Se nenhuma dessas frases aparecer ou se a tabela for excluída, verifique se todas as etapas anteriores foram concluídas corretamente.
Revogar permissões com o mecanismo baseado em políticas
Se as tabelas com o prefixo tb_ deixarem de ser críticas e você quiser permitir que Alice as exclua, revogue a permissão de negação com um dos dois métodos abaixo.
Somente o proprietário do projeto ou usuários com a função Super_Administrator ou Admin podem executar esta operação.
Método 1: Remover a regra de negação da função
Use este método para remover a restrição de negação e manter a função delete_test atribuída a Alice.
-
Execute
REVOKEpara remover a regra de negação da funçãodelete_test.REVOKE DROP ON TABLE tb_* FROM ROLE delete_test privilegeproperties("policy" = "true", "allow"="false");Para mais informações sobre a sintaxe REVOKE, consulte a seção "Controle de acesso baseado em políticas usando a instrução GRANT" em Controle de acesso e controle de download baseados em políticas.
-
Execute
SHOW GRANTSpara verificar se a regra de negação foi removida.SHOW GRANTS FOR ram$bo*@aliyun.com:Alice;O bloco
[role/delete_test]não deve mais aparecer emAuthorization Type: Policy, o que confirma a remoção da restrição.[roles] role_project_admin, delete_test Authorization Type: Policy [role/role_project_admin] A projects/mcproject_name: * A projects/mcproject_name/instances/*: * A projects/mcproject_name/jobs/*: * A projects/mcproject_name/offlinemodels/*: * A projects/mcproject_name/packages/*: * A projects/mcproject_name/registration/functions/*: * A projects/mcproject_name/resources/*: * A projects/mcproject_name/tables/*: * A projects/mcproject_name/volumes/*: * Authorization Type: ObjectCreator AG projects/mcproject_name/tables/local_test: All AG projects/mcproject_name/tables/mr_multiinout_out1: All AG projects/mcproject_name/tables/mr_multiinout_out2: All AG projects/mcproject_name/tables/ramtest: All AG projects/mcproject_name/tables/tb_test: All AG projects/mcproject_name/tables/wc_in: All AG projects/mcproject_name/tables/wc_in1: All AG projects/mcproject_name/tables/wc_in2: All AG projects/mcproject_name/tables/wc_out: AllPara mais informações, consulte Consultar permissões usando MaxCompute SQL.
-
Faça login no cliente MaxCompute como Alice e execute
DROP TABLEpara confirmar que a exclusão agora é bem-sucedida.DROP TABLE tb_test;Se o sistema retornar
OK, a regra de negação foi removida com sucesso.
Método 2: Revogar a função de negação do usuário
Use este método para remover completamente a associação de Alice à função delete_test. Opcionalmente, exclua a função se ela não for mais necessária.
-
Execute
REVOKEpara remover a funçãodelete_testde Alice.REVOKE delete_test FROM ram$bo*@aliyun.com:Alice;Para mais informações, consulte Planejamento de funções.
-
Execute
SHOW GRANTSpara confirmar que Alice não tem mais a funçãodelete_test.SHOW GRANTS FOR ram$bo*@aliyun.com:Alice;A entrada
delete_testdeve estar ausente da linha[roles].[roles] role_project_admin Authorization Type: Policy [role/role_project_admin] A projects/mcproject_name: * A projects/mcproject_name/instances/*: * A projects/mcproject_name/jobs/*: * A projects/mcproject_name/offlinemodels/*: * A projects/mcproject_name/packages/*: * A projects/mcproject_name/registration/functions/*: * A projects/mcproject_name/resources/*: * A projects/mcproject_name/tables/*: * A projects/mcproject_name/volumes/*: * Authorization Type: ObjectCreator AG projects/mcproject_name/tables/local_test: All AG projects/mcproject_name/tables/mr_multiinout_out1: All AG projects/mcproject_name/tables/mr_multiinout_out2: All AG projects/mcproject_name/tables/ramtest: All AG projects/mcproject_name/tables/wc_in: All AG projects/mcproject_name/tables/wc_in1: All AG projects/mcproject_name/tables/wc_in2: All AG projects/mcproject_name/tables/wc_out: All -
Faça login no cliente MaxCompute como Alice e execute
DROP TABLEpara confirmar a remoção da restrição.DROP TABLE tb_test;Se o sistema retornar
OK, Alice poderá excluir tabelastb_*. -
(Opcional) Execute
DROP ROLEpara excluir a funçãodelete_testse ela não for mais necessária.DROP ROLE delete_test;Se o sistema retornar
OK, a função será excluída. Para mais informações, consulte Planejamento de funções.