Todos os produtos
Search
Central de documentação

MaxCompute:Controle de acesso baseado em políticas

Última atualização: Sep 08, 2026

O MaxCompute oferece controle de acesso baseado em políticas para definições de permissão complexas e flexíveis, ideal para grandes empresas e cenários que exigem controle refinado. Diferentemente da autorização por lista de controle de acesso (ACL), esse mecanismo também suporta lista de bloqueios, permitindo criar políticas que concedem ou negam a uma função a permissão para executar operações específicas em objetos específicos. As permissões entram em vigor após a associação da função a um usuário.

Contexto

O controle de acesso baseado em políticas suporta autorização por lista de permissões e lista de bloqueios. É possível conceder (lista de permissões) ou negar (lista de bloqueios) a uma função a permissão para executar operações específicas em objetos determinados.

Esse método resolve problemas de autorização que o controle de acesso baseado em ACL não consegue atender. Por exemplo, se um usuário recebe a função de desenvolvedor e possui, por padrão, permissão para excluir tabelas, mas você precisa impedir essa ação, utilize este método de controle de acesso.

Após a criação de um projeto MaxCompute, o controle de acesso baseado em políticas é ativado por padrão. O proprietário do projeto pode executar o comando set CheckPermissionUsingPolicy=true|false; no projeto MaxCompute para ativar ou desativar esse recurso.

O controle de acesso baseado em políticas aplica-se aos seguintes cenários.

Cenário

Descrição

Autorizador

Endpoint de autorização

Concessão de permissões a usuários com base em funções

Conceda a uma função a permissão para permitir ou negar uma ou mais operações em um objeto específico. Em seguida, associe a função a vários usuários. Os usuários herdam as permissões da função.

Consulte a coluna Authorizer em permissões do MaxCompute.

Uso de função personalizada para autorização refinada de usuário com função integrada

Se um usuário já possui uma função integrada e você precisa de um controle mais granular sobre suas permissões, a autorização por ACL não é suficiente. Nesse caso, use o controle de acesso baseado em políticas para criar uma nova função. Assim, é possível conceder ou negar à função a permissão para operar em objetos do projeto e associá-la ao usuário para um gerenciamento detalhado de permissões.

Observações de uso

Antes de utilizar o controle de acesso baseado em políticas, observe os seguintes pré-requisitos e precauções.

  • Pré-requisitos:

    • O controle de acesso baseado em políticas suporta autorização apenas para funções existentes. Confirme o nome da função a ser autorizada e certifique-se de que ela foi adicionada ao projeto MaxCompute. Execute o comando list roles; no MaxCompute client para obter informações sobre as funções. Para criar uma nova função, consulte Role planning.

    • Tipo de objeto, nome do objeto e ações a serem concedidas.

      Para mais informações sobre tipos de objetos e ações, consulte MaxCompute permissions.

  • Precauções:

    • Caso haja configurações simultâneas de lista de permissões e lista de bloqueios, a lista de bloqueios tem precedência.

    • Este mecanismo permite conceder permissões em objetos inexistentes. Ao excluir um objeto, as informações de autorização por política associadas não são removidas. O autorizador deve estar ciente dos riscos de segurança decorrentes da exclusão e recriação de um objeto com o mesmo nome.

    • Quando um usuário é removido, suas permissões são mantidas. Se ele for readicionado ao projeto posteriormente, suas permissões anteriores serão restauradas automaticamente. Para limpar permanentemente as permissões de um usuário, consulte Clear residual permissions of a removed user.

Sintaxe

Os comandos de controle de acesso baseado em políticas seguem o formato abaixo:

  • Autorização por política

    GRANT <actions> ON <object_type> <object_name> 
    TO ROLE <role_name> 
    PRIVILEGEPROPERTIES("policy" = "true", "allow"="{true|false}"[, "conditions"= "<conditions>"]);
    
  • Revogação de autorização por política

    REVOKE <actions> ON <object_type> <object_name> 
    FROM ROLE <role_name> 
    PRIVILEGEPROPERTIES("policy" = "true", "allow"="{true|false}");

A tabela a seguir descreve os parâmetros.

Parâmetro

Obrigatório

Descrição

actions

Sim

Ação a ser concedida. É possível especificar múltiplas ações em um único comando.

Ao especificar várias ações, separe-as por vírgulas (,). Para mais informações sobre os valores válidos, consulte MaxCompute permissions.

object_type

Sim

Tipo do objeto sobre o qual as permissões serão concedidas. Apenas um tipo de objeto pode ser especificado por comando.

Para mais informações sobre os valores válidos, consulte MaxCompute permissions.

object_name

Sim

Nome do objeto alvo da concessão de permissões. Obtenha o nome de uma das seguintes formas:

  • Nome do projeto: Acesse o MaxCompute console, altere a região no canto superior esquerdo e obtenha o nome do projeto MaxCompute na aba Projects.

  • Tabela ou view: Para obter o nome de uma tabela ou view, execute o comando show tables; no MaxCompute client.

  • Nome do modelo: Utilize o MaxCompute client para executar o comando show models; e obter o nome do modelo.

  • Nome do resource: Obtenha o nome do resource executando o comando list resources; no MaxCompute client.

  • Nome da função: Execute o comando list functions; no MaxCompute client para obter o nome da função.

  • Nome da instância: Obtenha o ID da instância executando o comando show instances; no MaxCompute client.

É possível usar um asterisco () como curinga no nome do objeto. Por exemplo, table taobao indica todas as tabelas cujos nomes começam com taobao.

Nota

O uso de curinga (*) é permitido apenas ao conceder permissões a uma ROLE. Curingas não são suportados na concessão de permissões a um USER.

role_name

Sim

Nome da função a ser autorizada. Apenas uma função pode ser especificada por comando.

Execute o comando list roles; no MaxCompute client para obter o nome da função.

privilegeproperties

policy

Sim

Defina o valor como true. Isso indica o uso do método de controle de acesso baseado em políticas.

allow

Obrigatório para autorização por lista de permissões

Mecanismo de autorização. Valores válidos:

  • true: Permite a operação especificada no objeto indicado.

  • false: Nega a operação especificada no objeto indicado. Trata-se do mecanismo de lista de bloqueios.

conditions

Não

Controla permissões com base em dimensões como origem da mensagem de solicitação e método de acesso. Para mais informações sobre os valores válidos, consulte Conditions.

Exemplos de controle de acesso baseado em políticas

Nos exemplos a seguir, Bob@aliyun.com é o proprietário do projeto test_project_a, enquanto Allen e Tom são usuários do Resource Access Management (RAM) vinculados à conta Bob@aliyun.com. Allen possui a função Admin no projeto test_project_a. Os exemplos demonstram como realizar operações de autorização no MaxCompute client:

  • Exemplo 1: Concessão de permissões a um usuário com base em função (lista de bloqueios)

    Negue ao usuário Tom a permissão para excluir tabelas que começam com tb_.

    • O exemplo abaixo mostra como implementar a autorização por política via comandos:

      -- Bob enters the test_project_a project.
      USE test_project_a;
      -- Create the Worker role.
      CREATE ROLE Worker;
      -- Add the user Tom as a project member.
      ADD USER RAM$Bob@aliyun.com:Tom;
      -- Attach the Worker role to the user Tom.
      GRANT Worker TO RAM$Bob@aliyun.com:Tom;
      -- Deny the Worker role from deleting tables that start with tb_ in the test_project_a project.
      GRANT Drop ON TABLE tb_* TO ROLE Worker PRIVILEGEPROPERTIES("policy" = "true", "allow"="false");
      -- View the authorization result for the user Tom.
      SHOW GRANTS FOR RAM$Bob@aliyun.com:Tom;
      -- The following authorization result is returned. D indicates Deny. Deleting tables that start with tb_ is denied.
      Authorization Type: Policy
      [role/worker]
      D      projects/test_project_a/tables/tb_*: Drop
    • O exemplo a seguir ilustra a implementação da autorização por política no console:

      1. Acesse o MaxCompute console e selecione uma região no canto superior esquerdo.

      2. No painel de navegação à esquerda, escolha Manage Configurations > Projects.

      3. Na página Projects, localize o projeto desejado e clique em Manage na coluna Actions.

      4. Na aba Role Permissions, clique em Create Project-level Role.

      5. Na caixa de diálogo Create Role, crie uma função Resource, insira um Role Name e defina a política de autorização.

        Segue um exemplo de política:

        {
            "Statement":[
                {
                    "Action":[
                        "odps:Drop"
                    ],
                    "Effect":"Deny",
                    "Resource":[
                        "acs:odps:*:projects/test_project_a/tables/tb_*"
                    ]
                }
            ],
            "Version":"1"
        }
      6. Na aba Role Permissions, encontre a nova função, clique em Manage Members na coluna Actions e adicione RAM$Bob@aliyun.com:Tom à função.

  • Exemplo 2: Revogação de autorização por política (lista de bloqueios)

    Com base no Exemplo 1, revogue a autorização do usuário Tom.

    -- Bob enters the test_project_a project.
    USE test_project_a; 
    -- Revoke the Worker role from the user Tom.
    REVOKE Worker FROM RAM$Bob@aliyun.com:Tom;
    -- View the authorization result for the user Tom. The permission list does not contain the Drop permission information.
    SHOW GRANTS FOR RAM$Bob@aliyun.com:Tom;
  • Exemplo 3: Concessão de permissões a um usuário com base em função (lista de permissões)

    Permita que Tom atualize dados em tabelas que começam com tb_.

    • O exemplo abaixo demonstra a implementação da autorização por política via comandos:

      -- Bob enters the test_project_a project.
      USE test_project_a; 
      -- Create the Worker role.
      CREATE ROLE Worker; 
      -- Add the user Tom as a project member.
      ADD USER RAM$Bob@aliyun.com:Tom;
      -- Attach the Worker role to the user Tom.
      GRANT Worker TO RAM$Bob@aliyun.com:Tom; 
      -- Allow the Worker role to update data in tables that start with tb_ in the test_project_a project.
      GRANT Update ON TABLE tb_* TO ROLE Worker PRIVILEGEPROPERTIES("policy" = "true", "allow"="true");
      -- View the authorization result for the user Tom.
      SHOW GRANTS FOR RAM$Bob@aliyun.com:Tom; 
      -- The following authorization result is returned. A indicates Allow. You can update data in tables that start with tb_.
      Authorization Type: Policy
      [role/worker]
      A       projects/test_project_a/tables/tb_*: Update
      
    • O exemplo a seguir mostra como configurar a autorização por política no console:

      1. Acesse o MaxCompute console e selecione uma região no canto superior esquerdo.

      2. No painel de navegação à esquerda, escolha Manage Configurations > Projects.

      3. Na página Projects, localize o projeto desejado e clique em Manage na coluna Actions.

      4. Na aba Role Permissions, clique em Create Project-level Role.

      5. Na caixa de diálogo Create Role, crie uma função Resource, insira um Role Name e defina a política de autorização.

        Segue um exemplo de política:

        {
            "Statement":[
                {
                    "Action":[
                        "odps:Update"
                    ],
                    "Effect":"Allow",
                    "Resource":[
                        "acs:odps:*:projects/test_project_a/tables/tb_*"
                    ]
                }
            ],
            "Version":"1"
        }
      6. Na aba Role Permissions, encontre a nova função, clique em Manage Members na coluna Actions e adicione RAM$Bob@aliyun.com:Tom à função.

  • Exemplo 4: Revogação de autorização por política (lista de permissões)

    Com base no Exemplo 3, revogue a autorização do usuário Tom.

    -- Bob enters the test_project_a project.
    USE test_project_a; 
    -- Revoke the Worker role from the user Tom.
    REVOKE Worker FROM RAM$Bob@aliyun.com:Tom;
    -- View the authorization result for the user Tom. The permission list does not contain the Update permission information.
    SHOW GRANTS FOR RAM$Bob@aliyun.com:Tom;
  • Exemplo 5: Autorização refinada para usuário com função integrada

    Negue ao usuário Allen a permissão para excluir todas as tabelas do projeto test_project_a.

    • O exemplo abaixo apresenta a implementação da autorização por política utilizando comandos:

      -- Bob enters the test_project_a project.
      USE test_project_a;
      -- Create the Worker role.
      CREATE ROLE Worker;
      -- Attach the Worker role to the user Allen.
      GRANT Worker TO RAM$Bob@aliyun.com:Allen;
      -- Deny the Worker role from deleting all tables in the test_project_a project.
      GRANT Drop ON TABLE * TO ROLE Worker PRIVILEGEPROPERTIES("policy" = "true", "allow"="false");
      -- View the authorization result for the user Allen.
      SHOW GRANTS FOR RAM$Bob@aliyun.com:Allen;
      -- The following authorization result is returned. Deleting all tables is denied.
      [roles]
      role_project_admin, worker
      Authorization Type: Policy
      [role/role_project_admin]
      A       projects/test_project_a: *
      A       projects/test_project_a/instances/*: *
      A       projects/test_project_a/jobs/*: *
      A       projects/test_project_a/offlinemodels/*: *
      A       projects/test_project_a/packages/*: *
      A       projects/test_project_a/registration/functions/*: *
      A       projects/test_project_a/resources/*: *
      A       projects/test_project_a/tables/*: *
      A       projects/test_project_a/volumes/*: *
      [role/worker]
      A       projects/test_project_a/tables/tb_*: Update
      D       projects/test_project_a/tables/*: Drop
      -- A in AG indicates Allow. G in AG indicates With Grant Option, which lets you grant permissions on the object.
      Authorization Type: ObjectCreator
      AG      projects/test_project_a/tables/local_test: All
      AG      projects/test_project_a/tables/mr_multiinout_out1: All
      AG      projects/test_project_a/tables/mr_multiinout_out2: All
      AG      projects/test_project_a/tables/ramtest: All
      AG      projects/test_project_a/tables/wc_in: All
      AG      projects/test_project_a/tables/wc_in1: All
      AG      projects/test_project_a/tables/wc_in2: All
      AG      projects/test_project_a/tables/wc_out: All
      
    • O exemplo a seguir detalha a configuração da autorização por política no console:

      1. Acesse o MaxCompute console e selecione uma região no canto superior esquerdo.

      2. No painel de navegação à esquerda, escolha Manage Configurations > Projects.

      3. Na página Projects, localize o projeto desejado e clique em Manage na coluna Actions.

      4. Na aba Role Permissions, clique em Create Project-level Role.

      5. Na caixa de diálogo Create Role, crie uma função Resource, insira um Role Name e defina a política de autorização.

        Segue um exemplo de política:

        {
            "Statement":[
                {
                    "Action":[
                        "odps:Drop"
                    ],
                    "Effect":"Deny",
                    "Resource":[
                        "acs:odps:*:projects/test_project_a/tables/*"
                    ]
                }
            ],
            "Version":"1"
        }
      6. Na aba Role Permissions, encontre a nova função, clique em Manage Members na coluna Actions e adicione RAM$Bob@aliyun.com:Allen à função.

  • Exemplo 6: Revogação de autorização para usuário com função integrada

    Com base no Exemplo 5, revogue a autorização do usuário Allen. O comando abaixo serve como referência.

    -- Bob enters the test_project_a project.
    USE test_project_a;
    -- Revoke the Worker role from the user Allen.
    REVOKE Worker FROM RAM$Bob@aliyun.com:Allen;
    -- View the authorization result for the user Allen. The permission list does not contain the Drop permission information.
    SHOW GRANTS FOR RAM$Bob@aliyun.com:Allen;
  • Exemplo 7: Concessão de permissão de consulta em todas as tabelas a um usuário (Tom) com base em função (lista de permissões)

    • O exemplo a seguir demonstra a aplicação da autorização por política através de comandos:

      -- Bob enters the test_project_a project.
      USE test_project_a;
      -- Create the Worker role.
      CREATE ROLE Worker;
      -- Add the user Tom as a project member.
      ADD USER RAM$Bob@aliyun.com:Tom;
      -- Attach the Worker role to the user Tom.
      GRANT Worker TO RAM$Bob@aliyun.com:Tom;
      -- Allow the Worker role to query all tables in the test_project_a project.
      GRANT Describe,Select ON TABLE * TO ROLE Worker PRIVILEGEPROPERTIES("policy" = "true", "allow"="true");
      -- View the authorization result for the user Tom.
      SHOW GRANTS FOR RAM$Bob@aliyun.com:Tom;
      -- The following authorization result is returned. A indicates Allow. You can query all tables in the test_project_a project.
      Authorization Type: Policy
      [role/worker]
      A      projects/test_project_a/tables/*: Describe | Select
    • O exemplo abaixo ilustra como realizar a autorização por política no console:

      1. Acesse o MaxCompute console e selecione uma região no canto superior esquerdo.

      2. No painel de navegação à esquerda, escolha Manage Configurations > Projects.

      3. Na página Projects, localize o projeto desejado e clique em Manage na coluna Actions.

      4. Na aba Role Permissions, clique em Create Project-level Role.

      5. Na caixa de diálogo Create Role, crie uma função Resource, insira um Role Name e defina a política de autorização.

        Segue um exemplo de política:

        {
            "Statement":[
                {
                    "Action":[
                        "odps:Describe",
                        "odps:Select"
                    ],
                    "Effect":"Allow",
                    "Resource":[
                        "acs:odps:*:projects/test_project_a/tables/*"
                    ]
                }
            ],
            "Version":"1"
        }
      6. Na aba Role Permissions, encontre a nova função, clique em Manage Members na coluna Actions e adicione RAM$Bob@aliyun.com:Tom à função.

  • Próximos passos

    Após configurar o controle de acesso baseado em políticas, realize as operações abaixo conforme necessário:

    Para mais detalhes sobre o controle de acesso baseado em políticas, consulte os tópicos a seguir: