Todos os produtos
Search
Central de documentação

MaxCompute:Implementar o controle de acesso em nível de linha

Última atualização: Sep 22, 2026

Implemente o controle de acesso em nível de linha criando uma view ou tabela filtrada por comerciante e, em seguida, compartilhe-a por meio de um pacote ou concessão direta. Este guia aborda a abordagem baseada em views (recomendada) e a alternativa baseada em tabelas, usando como exemplo prático uma tabela de pedidos compartilhada entre vários comerciantes.

Quando usar esta abordagem

O MaxCompute também oferece suporte a um recurso nativo de controle de acesso em nível de linha, projetado para definições de regras em grande escala. Esse recurso elimina a necessidade de criar objetos para cada usuário e evita armazenamento redundante, mas pode gerar planos de consulta mais complexos e apresenta certas limitações descritas no tópico vinculado.

Os métodos de view e tabela descritos neste guia funcionam bem quando cada usuário precisa de sua própria regra de filtragem, a quantidade de comerciantes é gerenciável e você deseja planos de consulta mais simples com base em dados pré-filtrados.

Escolha um método

Método

Como funciona

Quando usar

Desvantagens

Views (recomendado)

Crie uma view filtrada por comerciante; compartilhe via pacote ou concessão direta

Cada comerciante precisa de acesso somente leitura às suas próprias linhas, sem custo extra de armazenamento

—

Tabelas

Crie uma tabela filtrada por comerciante

Cada comerciante precisa de seu próprio conjunto de dados isolado

Há duplicação de dados; as tabelas devem permanecer sincronizadas com a tabela source

Use views quando o acesso somente leitura às linhas filtradas for suficiente, pois isso atende à maioria dos cenários de relatórios multilocatários.

Utilize tabelas quando os processos downstream exigirem gravação no conjunto de dados filtrado ou quando snapshots pré-agregados forem operacionalmente necessários. Leve em consideração o custo de armazenamento e a sobrecarga de sincronização antes de adotar essa abordagem.

Ambos os métodos criam um objeto por comerciante. Em grande escala, considere o recurso nativo de controle de acesso em nível de linha , que lida com definições de regras de forma centralizada, sem criar objetos por usuário.

Cenário

A tabela table_order no Projeto A armazena registros de transações de pedidos de todos os comerciantes. Todos os comerciantes podem acessar a tabela, mas cada um deve visualizar apenas os registros de sua própria loja. A coluna sellerid identifica o comerciante, portanto, um filtro por comerciante em sellerid aplica o isolamento em nível de linha.

Pré-requisitos

Antes de começar, certifique-se de ter:

Conceder acesso por meio de um pacote

Use um pacote para compartilhar a view filtrada com o projeto do comerciante. Os pacotes são o mecanismo padrão do MaxCompute para compartilhamento de recursos entre projetos.

  1. Faça logon no cliente MaxCompute usando sua conta Alibaba Cloud.

  2. Crie uma view filtrada para o comerciante no Projeto A. Substitua sellerid='xxxx' pelo ID de vendedor real do comerciante.

    create view <view_name> as select * from table_order WHERE sellerid='xxxx';

    Para a sintaxe e opções de view, consulte Manage views.

  3. Crie um pacote no Projeto A, adicione a view e autorize o projeto do comerciante a instalar o pacote.

    -- Create a package.
    create package <package_name>;
    -- Add the view to the package.
    add table <view_name> to package <package_name>;
    -- Allow the merchant's project to install the package.
    allow project <project_name> to install package <package_name>;

    Para obter informações sobre o compartilhamento entre projetos, consulte Cross-project resource access based on packages.

  4. Mude para o contexto do projeto do comerciante, instale o pacote e conceda ao usuário do comerciante acesso de leitura.

    -- Install the package in the merchant's project.
    install package <Project A>.<package_name>;
    -- Grant the user read permission on the package.
    grant read on package <Project A>.<package_name> to user <user_name>;

Conceder acesso diretamente

Como alternativa aos pacotes, conceda as permissões SELECT e DESCRIBE diretamente na view. Utilize esta abordagem quando o compartilhamento entre projetos não for necessário.

grant select,describe on table <view_name> to user <user_name>;