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:
Uma conta Alibaba Cloud com acesso ao Projeto A
O nome do projeto do comerciante e o nome de usuário Alibaba Cloud para o qual conceder acesso
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.
Faça logon no cliente MaxCompute usando sua conta Alibaba Cloud.
-
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.
-
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.
-
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>;