O acesso direto a recursos entre projetos (incluindo contas diferentes) não é permitido se você não for membro do projeto proprietário. Para resolver isso, o MaxCompute oferece um mecanismo de controle de acesso baseado em packages, que agrupa recursos e permissões em um package instalável por outros projetos para permitir o acesso entre eles. Este tópico explica como utilizar o controle de acesso por packages e fornece exemplos de uso.
Informações básicas
Neste tópico, uma conta Alibaba Cloud possui vários projetos MaxCompute e precisa compartilhar tabelas específicas, arquivos de recursos e funções definidas pelo usuário (UDFs) do Projeto A com outros projetos dessa mesma conta ou com projetos de outra conta Alibaba Cloud. É possível compartilhar esses recursos com outros projetos usando um dos seguintes métodos:
Adicione os usuários dos outros projetos ao Projeto A e conceda a cada um as permissões necessárias para acessar os recursos. Esse método é complexo e não é recomendado para cenários de acesso a recursos entre projetos. Utilize-o apenas quando for necessário um controle de acesso granular para um membro da equipe do projeto. Para mais informações sobre a sintaxe dos comandos de autorização, consulte ACL-based access control.
-
Utilize o mecanismo de controle de acesso baseado em packages.
Esse mecanismo permite compartilhar dados e recursos entre projetos. O proprietário do Projeto A agrupa os recursos necessários aos outros projetos, juntamente com as permissões de operação sobre eles, e autoriza os proprietários dos demais projetos a instalar o package. Após a instalação, os proprietários dos outros projetos podem decidir se autorizam seus usuários a acessar os recursos contidos no package. A figura a seguir ilustra o funcionamento do mecanismo de controle de acesso baseado em packages.

A figura anterior mostra que o mecanismo de controle de acesso baseado em packages envolve duas entidades: criador do package e usuário do package. A tabela a seguir descreve as informações sobre essas entidades e as operações que elas podem executar.
|
Entidade |
Descrição |
Operação executável |
Função da entidade |
Plataforma de operação |
|
Criador do package |
O projeto ao qual o criador do package pertence fornece os recursos a serem compartilhados. O criador do package agrupa os recursos do projeto que precisam ser compartilhados e as permissões de operação sobre esses recursos, além de autorizar os usuários do package a instalá-lo e acessar seu conteúdo. |
Proprietário do projeto ao qual os recursos pertencem ou usuário com a função Super_Administrator no nível do projeto ao qual os recursos pertencem |
||
|
Usuário do package |
O projeto ao qual o usuário do package pertence acessa os recursos contidos nele. Após instalar o package criado pelo criador, o usuário do package pode acessar diretamente os recursos incluídos. |
Proprietário do projeto que utiliza os recursos ou usuário com a função Super_Administrator ou Admin no nível do projeto que utiliza os recursos |
||
Limites
Antes de utilizar o mecanismo de controle de acesso baseado em packages, observe os seguintes limites:
Um package aceita no máximo 1.000 recursos.
É possível instalar um package em até 100.000 projetos MaxCompute.
Um projeto MaxCompute pode ter no máximo 100 packages instalados provenientes de outro projeto MaxCompute.
Cada projeto MaxCompute permite a criação de até 100.000 packages.
O limite de instalação é de 100.000 packages por projeto MaxCompute.
Criar um package
O criador do package cria um package em um projeto MaxCompute.
-
Sintaxe
create package <package_name>; -
Parâmetros
Parâmetro
Obrigatório
Descrição
package_name
Sim
Nome do package, que deve ser único dentro do projeto. O nome deve ter entre 1 e 128 caracteres e pode conter letras, dígitos e sublinhados (_).
Execute o comando
show packages;na MaxCompute client para visualizar todos os packages criados. -
Exemplos
Neste exemplo, a conta Alibaba Cloud Bob@aliyun.com é proprietária do projeto test_project_a e precisa autorizar outros projetos a acessar recursos específicos desse projeto. Crie um package. Comandos de exemplo:
-- Switch to the test_project_a project. use test_project_a; -- Create a package. create package datashare;
Adicionar recursos a um package
O criador do package adiciona ao package criado os recursos necessários aos usuários do package.
-
Sintaxe
add <object_type> <object_name> to package <package_name> [with privileges <privileges>]; -
Limites
Não é possível adicionar projetos a um package.
-
Precauções
Ao adicionar recursos a um package, eles não são empacotados como snapshots. Se os dados do recurso forem atualizados após a adição ao package, os usuários do package acessarão a versão mais recente dos dados.
-
Parâmetros
Parâmetro
Obrigatório
Descrição
object_type
Sim
Tipo do objeto a ser adicionado ao package. Especifique apenas um tipo de objeto por vez.
Para mais informações sobre tipos de objetos, consulte Permissions.
object_name
Sim
Nome do objeto a ser removido do package. Obtenha o nome do objeto usando um dos seguintes métodos:
-
Nome da tabela ou view: Execute o comando
show tables;na MaxCompute client. -
Nome do arquivo de recurso: Execute o comando
list resources;na MaxCompute client. -
Nome da função: Execute o comando
list functions;na MaxCompute client. -
Nome da instância: Execute o comando
show instances;na MaxCompute client.
Nota-
É possível usar o caractere curinga asterisco () ao adicionar recursos. Por exemplo,
add tableto package package_name; adiciona todas as tabelas ao package. -
Ao adicionar recursos a um package, não especifique o nome do recurso no formato NomeDoProjeto.NomeDoRecurso. Por exemplo, para adicionar uma tabela chamada table do Projeto A a um package, não use A.table como nome do recurso. Especifique apenas table.
package_name
Sim
Nome do package.
Execute o comando
show packages;na MaxCompute client para visualizar todos os packages criados.privileges
Não
Permissões de operação sobre os recursos no package. Se este parâmetro não for especificado, as permissões Read, Describe e Select serão adicionadas aos recursos por padrão. Os recursos e suas permissões de operação são inseparáveis e não podem ser atualizados após a adição ao package. Para modificar os recursos ou as permissões de operação associadas, remova-os do package e adicione novamente os recursos atualizados com as novas permissões.
Para mais informações sobre permissões de operação, consulte Permissions.
-
-
Exemplos
Adicione o arquivo de recurso udtf.jar e as tabelas sale_detail e bank_data do projeto test_project_a ao package criado. Comandos de exemplo:
-- Add resources to the package. add resource udtf.jar to package datashare; add table sale_detail to package datashare;
Remover recursos de um package
O criador do package remove recursos do package criado.
-
Sintaxe
remove <object_type> <object_name> from package <package_name>; -
Parâmetros
Parâmetro
Obrigatório
Descrição
object_type
Sim
Tipo do objeto a ser removido do package. Remova apenas um objeto por vez.
Para mais informações sobre tipos de objetos, consulte Permissions.
object_name
Sim
Nome do objeto a ser removido do package. Obtenha o nome do objeto usando um dos seguintes métodos:
-
Nome da tabela ou view: Execute o comando
show tables;na MaxCompute client. -
Nome do arquivo de recurso: Execute o comando
list resources;na MaxCompute client. -
Nome da função: Execute o comando
list functions;na MaxCompute client. -
Nome da instância: Execute o comando
show instances;na MaxCompute client.
package_name
Sim
Nome do package.
Execute o comando
show packages;na MaxCompute client para visualizar todos os packages criados. -
-
Exemplos
Remova a tabela sale_detail do package datashare. Comando de exemplo:
--Remove a resource from a package. remove Table sale_detail from package datashare;
Autorizar um projeto a usar um package
O criador do package em um projeto autoriza outros projetos a usar o package criado.
-
Sintaxe
allow project <project_name> to install package <package_name> [using label <number>]; -
Parâmetros
Parâmetro
Obrigatório
Descrição
project_name
Sim
Nome do projeto MaxCompute que você deseja autorizar a usar o package.
Faça login no MaxCompute console, selecione uma região no canto superior esquerdo e localize o nome do projeto na aba Projects.
package_name
Sim
Nome do package.
Execute o comando
show packages;na MaxCompute client para visualizar todos os packages criados.number
Não
Este parâmetro aplica uma política de controle de acesso baseada em rótulos. Ele define o nível de sensibilidade dos dados que o usuário do package pode acessar. O projeto MaxCompute autorizado terá acesso apenas aos dados do package cujo nível de sensibilidade seja igual ou inferior ao valor especificado em number. Se não especificado, o nível de sensibilidade padrão é 0.
Para mais informações sobre controle de acesso baseado em rótulos, consulte Label-based access control.
-
Exemplos
Autorize o projeto test_project_b a instalar o package datashare criado no projeto test_project_a. Comando de exemplo:
-- Allow the test_project_b project to install the package. allow project test_project_b to install package datashare;
Revogar permissões de acesso a um package de um projeto
O criador do package revoga as permissões de acesso a um package de um projeto.
-
Sintaxe
disallow project <project_name> to install package <package_name>; -
Parâmetros
Parâmetro
Obrigatório
Descrição
project_name
Sim
Nome do projeto MaxCompute do qual você deseja revogar as permissões de acesso ao package.
Faça login no MaxCompute console, selecione uma região no canto superior esquerdo e localize o nome do projeto na aba Projects.
package_name
Sim
Nome do package.
Execute o comando
show packages;na MaxCompute client para visualizar todos os packages criados. -
Exemplos
Revogue as permissões de instalação do package datashare do projeto test_project_a para o projeto test_project_b. Comando de exemplo:
-- Revoke the package authorization. disallow project test_project_b to install package datashare;
Excluir um package
O criador do package exclui um package.
-
Sintaxe
delete|drop package <package_name>; -
Precauções
A exclusão de um package remove todas as informações sobre as permissões concedidas por meio dele.
-
Parâmetros
Parâmetro
Obrigatório
Descrição
package_name
Sim
Nome do package a ser excluído.
Execute o comando
show packages;na MaxCompute client para visualizar todos os packages criados. -
Exemplos
Exclua o package datashare criado no projeto test_project_a. Comando de exemplo:
-- Drop the package. drop package datashare;
Visualizar packages
O criador do package visualiza os packages criados ou instalados em um projeto MaxCompute.
-
Sintaxe
show packages; -
Exemplos
Visualize as informações sobre os packages criados ou instalados no projeto test_project_a. Comando de exemplo:
-- View a list of packages. show packages;O resultado retornado contém as seguintes informações:
PackageName: nome do package criado ou instalado.
CreateTime: momento da criação do package.
SourceProject: nome do projeto MaxCompute ao qual o package pertence.
InstallTime: momento da instalação do package.
Status: status atual do package.
+-------------+--------------------------+ | PackageName | CreateTime | +-------------+--------------------------+ | datashare | 2021-12-28T18:10:39+0800 | +-------------+--------------------------+ +-------------+--------------------+--------------------------+--------+ | PackageName | SourceProject | InstallTime | Status | +-------------+--------------------+--------------------------+--------+ | systables | information_schema | 2020-11-24T14:11:23+0800 | OK | +-------------+--------------------+--------------------------+--------+
Visualizar detalhes de um package
O criador do package visualiza os detalhes de um package criado em um projeto MaxCompute.
-
Sintaxe
describe package <package_name>; -
Parâmetros
Parâmetro
Obrigatório
Descrição
package_name
Sim
Nome do package.
Execute o comando
show packages;na MaxCompute client para visualizar todos os packages criados. -
Exemplos
Visualize os recursos e permissões incluídos no package datashare do projeto test_project_a. Comando de exemplo:
-- View the details of the datashare package. describe package datashare;O resultado retornado contém as seguintes informações:
CreateTime: momento da criação do package.
PackageName: nome do package.
SourceProject: nome do projeto MaxCompute ao qual o package pertence.
ObjectType: tipo de um objeto no package.
ObjectName: nome de um objeto no package.
ObjectPrivileges: permissões sobre um objeto no package.
ProjectName: projeto autorizado a instalar o package.
UserLabel: rótulo do usuário.
CreateTime: 2021-12-28T18:10:39+0800 PackageName: datashare SourceProject: test_project_a Object List +--------------+------------------------------------------+------------------+ | ObjectType | ObjectName | ObjectPrivileges | +--------------+------------------------------------------+------------------+ | RESOURCE | udtf.jar | Read | +--------------+------------------------------------------+------------------+ | TABLE | sale_detail | Describe,Select | +--------------+------------------------------------------+------------------+ Allowed Project List +-----------------+-----------+ | ProjectName | UserLabel | +-----------------+-----------+ | test_project_b | 0 | +-----------------+-----------+
Instalar um package
O usuário do package instala um package em um projeto MaxCompute.
-
Sintaxe
install package <project_name>.<package_name>; -
Precauções
O package é expandido durante a instalação. Após a instalação, execute o comando
show packages;para visualizar o package instalado e o comandodescribe package <package_name>;para verificar seus recursos e permissões. -
Parâmetros
Parâmetro
Obrigatório
Descrição
project_name
Sim
Nome do projeto MaxCompute ao qual o package pertence.
Faça login no MaxCompute console, selecione uma região no canto superior esquerdo e localize o nome do projeto na aba Projects.
package_name
Sim
Nome do package.
Execute o comando
show packages;na MaxCompute client para visualizar todos os packages criados. -
Exemplos
Instale o package datashare do projeto test_project_a no projeto test_project_b. Neste exemplo, a conta Alibaba Cloud Amy@aliyun.com é proprietária do projeto test_project_b. Comando de exemplo:
-- Switch to the test_project_b project. use test_project_b; -- Install the package. install package test_project_a.datashare;
Visualizar detalhes de um package instalado
O usuário do package visualiza os detalhes de um package instalado em um projeto MaxCompute.
-
Sintaxe
describe package <project_name>.<package_name>; -
Parâmetros
Parâmetro
Obrigatório
Descrição
project_name
Sim
Nome do projeto MaxCompute ao qual o package pertence.
Faça login no MaxCompute console, selecione uma região no canto superior esquerdo e localize o nome do projeto na aba Projects.
package_name
Sim
Nome do package.
Execute o comando
show packages;na MaxCompute client para visualizar todos os packages criados. -
Exemplos
Visualize os recursos e permissões no package datashare instalado no projeto test_project_b. Comando de exemplo:
-- View the details of the package. describe package test_project_a.datashare;O resultado retornado contém as seguintes informações:
CreateTime: momento da criação do package.
PackageName: nome do package.
SourceProject: nome do projeto MaxCompute ao qual o package pertence.
ObjectType: tipo de um objeto no package.
ObjectName: nome de um objeto no package.
ObjectPrivileges: permissões sobre um objeto no package.
CreateTime: 2021-12-28T18:10:39+0800 PackageName: datashare SourceProject: test_project_a Object List +--------------+------------------------------------------+------------------+ | ObjectType | ObjectName | ObjectPrivileges | +--------------+------------------------------------------+------------------+ | RESOURCE | udtf.jar | Read | +--------------+------------------------------------------+------------------+ | TABLE | sale_detail | Describe,Select | +--------------+------------------------------------------+------------------+
Autorizar um usuário ou função a acessar um package
O usuário do package autoriza um usuário ou função a acessar um package no projeto MaxCompute onde o package está instalado.
O package instalado é um tipo de objeto independente no MaxCompute. Para acessar os recursos de um package, é necessária a permissão Read sobre ele. Caso não possua essa permissão, o proprietário do projeto ou usuários com a função Super_Administrator ou Admin podem concedê-la usando listas de controle de acesso (ACLs). Para mais informações sobre controle de acesso baseado em ACL, consulte ACL-based access control.
-
Sintaxe
grant <actions> on package <project_name>.<package_name> to {USER|ROLE} <name>; -
Precauções
Após a concessão da permissão Read a um usuário ou função, o acesso aos recursos do package será permitido apenas no projeto onde o package foi instalado. Para gerenciar permissões de packages de forma granular, consulte Access control for packages.
-
Parâmetros
Parâmetro
Obrigatório
Descrição
actions
Sim
Permissões de operação sobre os recursos no package. Defina o valor como Read.
project_name
Sim
Nome do projeto MaxCompute ao qual o package pertence.
Faça login no MaxCompute console, selecione uma região no canto superior esquerdo e localize o nome do projeto na aba Projects.
package_name
Sim
Nome do package.
Execute o comando
show packages;na MaxCompute client para visualizar todos os packages criados.name
Sim
Nome da conta de usuário ou função à qual você deseja conceder permissões de acesso. Especifique apenas uma conta de usuário ou função por operação de autorização.
Execute o comando
list users;oulist roles;na MaxCompute client para obter o nome da conta de usuário ou da função. -
Exemplos
Neste exemplo, Bella é uma usuária RAM da conta Alibaba Cloud Amy@aliyun.com. Autorize Bella a acessar o package datashare. Comando de exemplo:
-- Grant Bella permission to access the package. grant Read on package test_project_a.datashare to user RAM$Amy@aliyun.com:Bella;
Revogar permissões de acesso a um package de um usuário ou função
O usuário do package revoga as permissões de acesso a um package de um usuário ou função no projeto MaxCompute onde o package está instalado.
-
Sintaxe
revoke <actions> on package <project_name>.<package_name> from {USER|ROLE} <name>; -
Parâmetros
Parâmetro
Obrigatório
Descrição
actions
Sim
Permissões de operação sobre os recursos no package. Defina o valor como Read.
project_name
Sim
Nome do projeto MaxCompute ao qual o package pertence.
Faça login no MaxCompute console, selecione uma região no canto superior esquerdo e localize o nome do projeto na aba Projects.
package_name
Sim
Nome do package.
Execute o comando
show packages;na MaxCompute client para visualizar todos os packages criados.name
Sim
Nome da conta de usuário ou função da qual você deseja revogar as permissões de acesso ao package. Especifique apenas uma conta de usuário ou função por operação de revogação.
Execute o comando
list users;oulist roles;na MaxCompute client para localizar o nome da conta de usuário ou da função. -
Exemplos
Revogue as permissões de acesso ao package de Bella. Comando de exemplo:
-- Revoke access to the package from the user RAM$Amy@aliyun.com:Bella. revoke Read on package test_project_a.datashare from user RAM$Amy@aliyun.com:Bella;
Desinstalar um package
O usuário do package desinstala um package instalado em um projeto MaxCompute.
-
Sintaxe
uninstall package <project_name>.<package_name>; -
Parâmetros
Parâmetro
Obrigatório
Descrição
project_name
Sim
Nome do projeto MaxCompute ao qual o package pertence.
Faça login no MaxCompute console, selecione uma região no canto superior esquerdo e localize o nome do projeto na aba Projects.
package_name
Sim
Nome do package.
Execute o comando
show packages;na MaxCompute client para visualizar todos os packages criados. -
Exemplos
Desinstale o package datashare instalado no projeto test_project_b. Comando de exemplo:
-- Uninstall the package. uninstall package test_project_a.datashare;
Exemplo de uso
Neste exemplo, a conta Alibaba Cloud Bob@aliyun.com é proprietária do projeto test_project_a. A conta Alibaba Cloud Amy@aliyun.com é proprietária do projeto test_project_b. Para atender a necessidades de negócios, você deseja compartilhar o arquivo de recurso udtf.jar e a tabela sale_detail do projeto test_project_a com o projeto test_project_b. Além disso, a usuária RAM Amy@aliyun.com:Bella do projeto test_project_b deve ter acesso a esses recursos. Execute as etapas a seguir no cliente MaxCompute:
-
Acesse o projeto test_project_a e crie um package usando a conta Alibaba Cloud Bob@aliyun.com.
-- Switch to the test_project_a project. use test_project_a; -- Create a package. create package datashare; -
Use a conta Alibaba Cloud Bob@aliyun.com para adicionar recursos ao package criado.
-- Add resources to the package. add resource udtf.jar to package datashare; add table sale_detail to package datashare; -
Use a conta Alibaba Cloud Bob@aliyun.com para autorizar o projeto test_project_b a instalar o package.
-- Allow the test_project_b project to install the package. allow project test_project_b to install package datashare; -
Acesse o projeto test_project_b e instale o package usando a conta Alibaba Cloud Amy@aliyun.com.
-- Switch to project test_project_b. use test_project_b; -- Install the package. install package test_project_a.datashare; -- View the list of resources in the package. describe package test_project_a.datashare; -- The following result is returned: CreateTime: 2021-12-28T18:10:39+0800 PackageName: datashare SourceProject: test_project_a Object List +--------------+------------------------------------------+------------------+ | ObjectType | ObjectName | ObjectPrivileges | +--------------+------------------------------------------+------------------+ | RESOURCE | udtf.jar | Read | +--------------+------------------------------------------+------------------+ | TABLE | sale_detail | Describe,Select | +--------------+------------------------------------------+------------------+ -
Use a conta Alibaba Cloud Amy@aliyun.com para autorizar Bella a acessar o package.
-- Grant Bella permission to access the package. grant Read on package test_project_a.datashare to user RAM$Amy@aliyun.com:Bella; -
Bella consulta a tabela sale_detail.
SELECT * FROM test_project_a.sale_detail;
Referências
-
Após criar e instalar um package, você pode executar as seguintes operações:
Migrate data across MaxCompute projects in the same region by using CLONE TABLE.
Migrate data across MaxCompute projects in different regions by using cross-project data access (para migrações dentro de uma única conta Alibaba Cloud ou entre várias contas).
Use o DataWorks para migrar dados do MaxCompute entre projetos. Para mais informações, consulte MaxCompute data sources.