Todos os produtos
Search
Central de documentação

MaxCompute:Controle de acesso baseado em políticas

Última atualização: Jun 26, 2026

O MaxCompute oferece um método de controle de acesso baseado em políticas para definições de permissão complexas e flexíveis. Esse método é ideal para grandes empresas e cenários complexos 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. Esse recurso 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. Após anexar a função a um usuário, as permissões entram em vigor. Este tópico descreve os comandos de autorização por política compatíveis com o MaxCompute e fornece exemplos de autorização.

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 específicos.

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, anexe a função a vários usuários. Os usuários herdam as permissões da função.

Consulte a coluna Autorizador 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 atribuída 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. Você pode então conceder ou negar à função a permissão para executar operações em objetos do projeto e anexar a função ao usuário para um gerenciamento de permissões refinado.

Observações de uso

Antes de usar o recurso de controle de acesso baseado em políticas, observe seus pré-requisitos, limites 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; no cliente MaxCompute para recuperar informações sobre as funções. Para criar uma nova função, consulte Planejamento de funções.

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

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

  • Precauções:

    • Se ambas as autorizações de lista de permissões e lista de bloqueios estiverem configuradas, a lista de bloqueios terá 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 excluídas. 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 retidas. 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 Limpar permissões residuais de um usuário removido.

Sintaxe

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

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

Se você especificar várias ações, separe-as por vírgulas (,). Para obter mais informações sobre os valores válidos, consulte Permissões do MaxCompute.

object_type

Sim

O tipo do objeto a receber a concessão. Apenas um tipo de objeto pode ser especificado por comando.

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

object_name

Sim

O nome do objeto a receber a concessão. Obtenha o nome de uma das seguintes maneiras:

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

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

  • Nome do modelo: Use o cliente MaxCompute 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; no cliente MaxCompute.

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

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

Use 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

O nome da função a ser autorizada. Especifique apenas uma função por comando.

Execute o comando list roles; no cliente MaxCompute 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

Especifica 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 Condições.

Exemplos de controle de acesso baseado em políticas

Suponha que Bob@aliyun.com seja o proprietário do projeto test_project_a, e Allen e Tom sejam usuários do Resource Access Management (RAM) sob a conta Bob@aliyun.com. Allen recebeu a função Admin do projeto test_project_a. Os exemplos a seguir mostram como realizar 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 a 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 console MaxCompute e selecione uma região no canto superior esquerdo.

      2. No painel de navegação à esquerda, escolha Management Configuration > Project Management.

      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.

        Veja abaixo 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, clique em Manage Members na coluna Actions da nova função 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.

    -- 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: 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; 
      -- 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 implementar a autorização por política no console:

      1. Faça login no console MaxCompute e selecione uma região no canto superior esquerdo.

      2. No painel de navegação à esquerda, escolha Management Configuration > Project Management.

      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.

        Veja abaixo 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, clique em Manage Members na coluna Actions da nova função 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.

    -- 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: Realizar autorização refinada para um usuário com função integrada

    Negue a 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:

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

      1. Faça login no console MaxCompute e selecione uma região no canto superior esquerdo.

      2. No painel de navegação à esquerda, escolha Management Configuration > Project Management.

      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 e especifique o Role Name e a política de autorização.

        Veja abaixo 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, clique em Manage Members na coluna Actions da nova função 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. Veja abaixo um exemplo de comando.

    -- 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: 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 console MaxCompute e selecione uma região no canto superior esquerdo.

      2. No painel de navegação à esquerda, escolha Management Configuration > Project Management.

      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, defina Role Type como Resource, especifique o Role Name e defina Authorization Method como Policy.

        Veja abaixo 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, clique em Manage Members na coluna Actions da nova função e adicione RAM$Bob@aliyun.com:Tom à função.

  • Próximos passos

    Após compreender o mecanismo de autorização por política, realize as seguintes operações de autorização conforme necessário:

    Para obter mais informações sobre o mecanismo de autorização por política, consulte os seguintes tópicos: