Todos os produtos
Search
Central de documentação

MaxCompute:Controle de acesso baseado em políticas

Última atualização: Oct 12, 2026

O MaxCompute oferece controle de acesso baseado em políticas para configurações de permissão complexas e flexíveis, sendo ideal para grandes empresas e cenários que exigem controle refinado. Diferentemente da autorização por lista de controle de acesso (ACL), o controle de acesso baseado em políticas também suporta lista de bloqueios. Isso permite 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 você associar a 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 realizar operações específicas em objetos determinados.

Esse método de controle de acesso resolve problemas de autorização que não podem ser solucionados com o controle de acesso baseado em ACL. Por exemplo, se um usuário receber a função de desenvolvedor, ele terá, por padrão, permissão para excluir tabelas. Caso você precise impedir que essa função exclua tabelas, 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

Conceder 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.

Usar uma função personalizada para autorização refinada de um usuário com função integrada

Se um usuário já possui uma função integrada e você precisa de um controle mais refinado 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 executar operações em objetos do projeto e associá-la ao usuário para um gerenciamento de permissões detalhado.

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 garanta que ela tenha sido adicionada ao projeto MaxCompute. Execute o comando list roles; na [MaxCompute client](t12112.dita#concept_dvj_dzw_5db) para obter informações sobre as funções. Para criar uma nova função, consulte [Role planning](t12096.xdita#concept_r4v_qzz_vdb).

    • O tipo de objeto, o nome do objeto e as ações a serem concedidas.

      Para obter mais informações sobre tipos de objetos e ações, consulte [MaxCompute permissions](t12097.dita#concept_ubm_4yz_vdb).

  • Precauções:

    • Caso haja configurações de autorização por lista de permissões e lista de bloqueios simultaneamente, a lista de bloqueios tem precedência.

    • O controle de acesso baseado em políticas 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 que podem surgir ao excluir e recriar um objeto com o mesmo nome.

    • Quando um usuário é removido, suas permissões são mantidas. Se o usuário for adicionado novamente 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](t2159763.dita#section_anq_bwq_qzt).

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>"]);
    
  • Revogar 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 ação a ser concedida. É possível especificar várias ações em um único comando.

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

object_type

Sim

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

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

object_name

Sim

O nome do objeto no qual as permissões serão concedidas. Você pode obter o nome das seguintes formas:

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

  • Tabela ou visualização: Para obter o nome de uma tabela ou visualização, execute o comando show tables; na MaxCompute client.

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

  • Nome do recurso: Obtenha o nome do recurso executando o comando list resources; na MaxCompute client.

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

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

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

Nota

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

role_name

Sim

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

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

privilegeproperties

policy

Sim

Defina o valor como true. Isso indica que o método de controle de acesso baseado em políticas está sendo utilizado.

allow

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

O mecanismo de autorização. Valores válidos:

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

  • false: Nega a operação especificada no objeto especificado. Este é o mecanismo de lista de bloqueios.

conditions

Não

Controla permissões com base em dimensões como a origem da mensagem de solicitação e o método de acesso. Para obter 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) sob a conta Bob@aliyun.com. Allen possui a função Admin para o projeto test_project_a. Os exemplos demonstram como executar operações de autorização no cliente MaxCompute:

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

    Negue ao usuário Tom a exclusão de tabelas que começam com tb_.

    • O exemplo a seguir mostra como implementar a autorização por política usando 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 mostra como implementar a autorização por política no console:

      1. Faça login no 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:

      6. Na aba Role Permissions, localize a nova função, clique em Manage Members na coluna Actions e adicione RAM$Bob@aliyun.com:Tom à função.

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

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

    {
        "Statement":[
            {
                "Action":[
                    "odps:Drop"
                ],
                "Effect":"Deny",
                "Resource":[
                    "acs:odps:*:projects/test_project_a/tables/tb_*"
                ]
            }
        ],
        "Version":"1"
    }
  • Exemplo 3: Conceder permissões a um usuário com base em uma função (lista de permissões)

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

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

      -- 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;
    • O exemplo a seguir mostra como implementar a autorização por política no console:

      1. Faça login no 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:

        -- 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
        
      6. Na aba Role Permissions, localize a nova função, clique em Manage Members na coluna Actions e adicione RAM$Bob@aliyun.com:Tom à função.

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

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

  • Exemplo 5: Realizar autorização refinada para um usuário com função integrada

    Negue ao usuário Allen a exclusão de todas as tabelas no projeto test_project_a.

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

      {
          "Statement":[
              {
                  "Action":[
                      "odps:Update"
                  ],
                  "Effect":"Allow",
                  "Resource":[
                      "acs:odps:*:projects/test_project_a/tables/tb_*"
                  ]
              }
          ],
          "Version":"1"
      }
    • O exemplo a seguir mostra como implementar a autorização por política no console:

      1. Faça login no 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:

        -- 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;
      6. Na aba Role Permissions, localize a nova função, clique em Manage Members na coluna Actions e adicione RAM$Bob@aliyun.com:Allen à função.

  • Exemplo 6: Revogar autorização para um usuário com função integrada

    Com base no Exemplo 5, revogue a autorização do usuário Allen. O comando a seguir serve como exemplo.

    -- 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;
    -- 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
    
  • Exemplo 7: Conceder a um usuário (Tom) a permissão para consultar todas as tabelas com base em uma função (lista de permissões)

    • O exemplo a seguir mostra como implementar a autorização por política usando 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 a seguir mostra como implementar a autorização por política no console:

      1. Faça login no 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"
        }
        {
            "Statement":[
                {
                    "Action":[
                        "odps:Drop"
                    ],
                    "Effect":"Deny",
                    "Resource":[
                        "acs:odps:*:projects/test_project_a/tables/*"
                    ]
                }
            ],
            "Version":"1"
        }
      6. Na aba Role Permissions, localize 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, você pode executar as seguintes operações conforme necessário:

  • [Project-level role authorization](t2159759.xdita#concept_2159759)

  • [Manage user permissions using commands](t2159763.xdita#concept_2159763)

  • [Query the permission information of a user, role, or object](t12098.dita#concept_dqq_xf1_wdb)

Para obter mais informações sobre o controle de acesso baseado em políticas, consulte os seguintes tópicos:

  • Para práticas de autorização do controle de acesso baseado em políticas, consulte [Policy-based access control practices](t2492256.xdita#64e5e90047mft).

  • Para gerenciar permissões de operação de forma mais granular para usuários com funções integradas, consulte [Manage permissions for users with built-in roles based on policies](t2136310.xdita#).

  • Para perguntas frequentes sobre gerenciamento de permissões no MaxCompute, consulte [FAQ about permission management](t2144472.xdita#).