Não é possível acessar diretamente recursos em outro projeto, mesmo em cenários entre contas, a menos que você seja membro do projeto de destino. Para ativar esse acesso, o MaxCompute oferece autorização baseada em pacotes. Encapsule recursos e suas permissões em um pacote para que outros projetos possam instalá-lo e obter acesso entre projetos. Este tópico explica a autorização por pacotes 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) no Projeto A com outros projetos dessa mesma conta ou com projetos de outra conta Alibaba Cloud. Compartilhe os recursos com outros projetos usando um dos seguintes métodos:
Adicione os usuários dos outros projetos ao Projeto A e conceda a cada usuário as permissões para acessar os recursos. Esse método é complexo; portanto, não recomendamos seu uso em cenários de acesso a recursos entre projetos. Utilize-o apenas quando for necessário um controle de acesso granular aos recursos para um membro da equipe do projeto. Para mais informações sobre a sintaxe dos comandos de autorização, consulte Controle de acesso baseado em ACL.
-
Utilize o mecanismo de controle de acesso baseado em pacotes.
O mecanismo de controle de acesso baseado em pacotes serve para compartilhar dados e recursos entre projetos. O proprietário do Projeto A empacota os recursos necessários a outros projetos, juntamente com as permissões de operação correspondentes, e autoriza os proprietários desses projetos a instalar o pacote. Após a instalação, os proprietários dos demais projetos podem decidir se autorizam os usuários a acessar os recursos contidos no pacote. A figura a seguir ilustra o funcionamento desse mecanismo.

A figura anterior mostra que o mecanismo de controle de acesso baseado em pacotes envolve duas entidades: criador do pacote e usuário do pacote. A tabela a seguir descreve 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 pacote | O projeto ao qual o criador do pacote pertence fornece os recursos a serem compartilhados. O criador agrupa os recursos do projeto e as permissões de operação correspondentes, autorizando os usuários do pacote a instalá-lo e acessar seus recursos. | Proprietário do projeto ao qual os recursos pertencem ou usuário com a função de nível de projeto Super_Administrator desse projeto | ||
Usuário do pacote | O projeto ao qual o usuário do pacote pertence acessa os recursos dentro dele. Após instalar o pacote criado pelo criador, o usuário pode acessar diretamente os recursos ali contidos. | Proprietário do projeto que utiliza os recursos ou usuário com a função de nível de projeto Super_Administrator ou Admin desse projeto | ||
Limites
Antes de utilizar o mecanismo de controle de acesso baseado em pacotes, observe os seguintes limites:
É possível adicionar no máximo 1.000 recursos a um único pacote.
Um pacote pode ser instalado em até 100.000 projetos MaxCompute.
Cada projeto MaxCompute pode instalar no máximo 100 pacotes provenientes de outro projeto MaxCompute.
Limite de criação de 100.000 pacotes por projeto MaxCompute.
Capacidade máxima de instalação de 100.000 pacotes em um projeto MaxCompute.
Crie um pacote
O criador do pacote cria um pacote em um projeto MaxCompute.
-
Sintaxe
create package <package_name>; -
Parâmetros
Parâmetro
Obrigatório
Descrição
package_name
Sim
Nome do pacote, que deve ser exclusivo 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;no cliente MaxCompute para visualizar os pacotes 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 nesse projeto. Crie um pacote. Comandos de exemplo:
-- Switch to the test_project_a project. use test_project_a; -- Create a package named datashare. create package datashare;
Adicionar recursos a um pacote
O criador adiciona ao pacote os recursos necessários aos usuários.
-
Sintaxe
add <object_type> <object_name> to package <package_name> [with privileges <privileges>]; -
Limites
Não é possível adicionar projetos a um pacote.
-
Precauções
Ao adicionar recursos a um pacote, eles não são empacotados como snapshots. Se os dados do recurso forem atualizados após a adição ao pacote, os usuários acessarão a versão mais recente desses dados.
-
Parâmetros
Parâmetro
Obrigatório
Descrição
object_type
Sim
Tipo do objeto a ser adicionado ao pacote. Só é possível especificar um tipo de objeto por vez.
Para mais informações sobre tipos de objetos, consulte Permissões.
object_name
Sim
Nome do objeto a ser removido do pacote. Obtenha o nome do objeto usando um dos seguintes métodos:
Nome da tabela: Execute o comando
show tables;no cliente MaxCompute para obter o nome da tabela ou visualização.Nome do arquivo de recurso: Execute o comando
list resources;no cliente MaxCompute para obter o nome do recurso.Nome da função: Execute o comando
list functions;no cliente MaxCompute para obter o nome da função.Nome da instância: Execute o comando
show instances;no cliente MaxCompute para obter o nome da instância.
NotaAo adicionar recursos, use o caractere curinga (). Por exemplo,
add tableto package package_name; adiciona todas as tabelas ao pacote.Ao adicionar recursos a um pacote, não especifique o nome no formato NomeDoProjeto.NomeDoRecurso. Por exemplo, para adicionar uma tabela chamada table do Projeto A a um pacote, não use A.table como nome do recurso. Especifique apenas table.
package_name
Sim
Nome do pacote.
Execute o comando
show packages;no cliente MaxCompute para visualizar os pacotes criados.privileges
Não
Permissões de operação sobre os recursos no pacote. Se este parâmetro não for especificado, as permissões Read, Describe e Select serão adicionadas por padrão. Os recursos e suas permissões são inseparáveis e não podem ser atualizados individualmente após a adição ao pacote. Para alterar os recursos ou as permissões, remova-os do pacote e adicione-os novamente com as configurações desejadas.
Para mais informações sobre permissões de operação, consulte Permissões.
-
Exemplos
Adicione o arquivo de recurso udtf.jar e as tabelas sale_detail e bank_data do projeto test_project_a ao pacote 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 pacote
O criador remove recursos do pacote 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 pacote. Só é possível remover um objeto por vez.
Para mais informações sobre tipos de objetos, consulte Permissões.
object_name
Sim
Nome do objeto a ser removido do pacote. Obtenha o nome do objeto usando um dos seguintes métodos:
Nome da tabela: Execute o comando
show tables;no cliente MaxCompute para obter o nome da tabela ou visualização.Nome do arquivo de recurso: Execute o comando
list resources;no cliente MaxCompute para obter o nome do recurso.Nome da função: Execute o comando
list functions;no cliente MaxCompute para obter o nome da função.Nome da instância: Execute o comando
show instances;no cliente MaxCompute para obter o nome da instância.
package_name
Sim
Nome do pacote.
Execute o comando
show packages;no cliente MaxCompute para visualizar os pacotes criados. -
Exemplos
Remova a tabela sale_detail do pacote datashare. Comando de exemplo:
-- Remove a resource from the package. remove table sale_detail from package datashare;
Autorizar um projeto a usar um pacote
O criador do pacote em um projeto autoriza outros projetos a usá-lo.
-
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 a ser autorizado a usar o pacote.
Para visualizar o nome de um projeto MaxCompute, faça login no console MaxCompute. Na barra de navegação superior, selecione uma região. Em seguida, visualize o nome do projeto MaxCompute na aba Project management.
package_name
Sim
Nome do pacote.
Execute o comando
show packages;no cliente MaxCompute para visualizar os pacotes 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 acessíveis ao usuário do pacote. O projeto MaxCompute autorizado só poderá acessar dados cuja sensibilidade seja igual ou inferior ao nível definido por number. Caso omitido, o nível de sensibilidade padrão será 0.
Para mais informações sobre controle de acesso baseado em rótulos, consulte Controle de acesso baseado em rótulos.
-
Exemplos
Autorize o projeto test_project_b a instalar o pacote datashare criado no projeto test_project_a. Comando de exemplo:
-- Authorize project test_project_b to install the package. allow project test_project_b to install package datashare;
Revogar permissões de acesso a um pacote de um projeto
O criador revoga as permissões de acesso a um pacote de um projeto específico.
-
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 revogar as permissões de acesso ao pacote.
Para visualizar o nome de um projeto MaxCompute, faça login no console MaxCompute. Na barra de navegação superior, selecione uma região. Em seguida, visualize o nome do projeto MaxCompute na aba Project management.
package_name
Sim
Nome do pacote.
Execute o comando
show packages;no cliente MaxCompute para visualizar os pacotes criados. -
Exemplos
Revogue as permissões de instalação do pacote datashare do projeto test_project_a para o projeto test_project_b. Comando de exemplo:
-- Revoke the permission to install the package. disallow project test_project_b to install package datashare;
Exclua um pacote
O criador exclui um pacote existente.
-
Sintaxe
delete|drop package <package_name>; -
Precauções
A exclusão de um pacote limpa 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 pacote a ser excluído.
Execute o comando
show packages;no cliente MaxCompute para visualizar os pacotes criados. -
Exemplos
Exclua o pacote datashare criado no projeto test_project_a. Comando de exemplo:
-- Delete the package. drop package datashare;
Visualize pacotes
O criador visualiza os pacotes criados ou instalados em um projeto MaxCompute.
-
Sintaxe
show packages; -
Exemplos
Visualize as informações sobre os pacotes criados ou instalados no projeto test_project_a. Comando de exemplo:
-- List packages. show packages;O resultado retornado contém as seguintes informações:
PackageName: nome do pacote criado ou instalado.
CreateTime: momento da criação do pacote.
SourceProject: nome do projeto MaxCompute ao qual o pacote pertence.
InstallTime: momento da instalação do pacote.
Status: status atual do pacote.
+-------------+--------------------------+ | PackageName | CreateTime | +-------------+--------------------------+ | datashare | 2021-12-28T18:10:39+0800 | +-------------+--------------------------+ +-------------+--------------------+--------------------------+--------+ | PackageName | SourceProject | InstallTime | Status | +-------------+--------------------+--------------------------+--------+ | systables | information_schema | 2020-11-24T14:11:23+0800 | OK | +-------------+--------------------+--------------------------+--------+
Visualize detalhes de um pacote
O criador visualiza os detalhes de um pacote criado em um projeto MaxCompute.
-
Sintaxe
describe package <package_name>; -
Parâmetros
Parâmetro
Obrigatório
Descrição
package_name
Sim
Nome do pacote.
Execute o comando
show packages;no cliente MaxCompute para visualizar os pacotes criados. -
Exemplos
Visualize os recursos e permissões incluídos no pacote datashare do projeto test_project_a. Comando de exemplo:
-- View package details. describe package datashare;O resultado retornado contém as seguintes informações:
CreateTime: momento da criação do pacote.
PackageName: nome do pacote.
SourceProject: nome do projeto MaxCompute ao qual o pacote pertence.
ObjectType: tipo de um objeto no pacote.
ObjectName: nome de um objeto no pacote.
ObjectPrivileges: permissões sobre um objeto no pacote.
ProjectName: projeto autorizado a instalar o pacote.
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 | +-----------------+-----------+
Instale um pacote
O usuário instala um pacote em um projeto MaxCompute.
-
Sintaxe
install package <project_name>.<package_name>; -
Precauções
Os pacotes são expandidos durante a instalação. Após a instalação, execute o comando
show packages;para listar os pacotes instalados. Para ver os recursos e permissões do pacote, execute o comandodescribe package <package_name>;. -
Parâmetros
Parâmetro
Obrigatório
Descrição
project_name
Sim
Nome do projeto MaxCompute ao qual o pacote pertence.
Para visualizar o nome de um projeto MaxCompute, faça login no console MaxCompute. Na barra de navegação superior, selecione uma região. Em seguida, visualize o nome do projeto MaxCompute na aba Project management.
package_name
Sim
Nome do pacote.
Execute o comando
show packages;no cliente MaxCompute para visualizar os pacotes criados. -
Exemplos
Instale o pacote 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;
Visualize detalhes de um pacote instalado
O usuário visualiza os detalhes de um pacote 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 pacote pertence.
Para visualizar o nome de um projeto MaxCompute, faça login no console MaxCompute. Na barra de navegação superior, selecione uma região. Em seguida, visualize o nome do projeto MaxCompute na aba Project management.
package_name
Sim
Nome do pacote.
Execute o comando
show packages;no cliente MaxCompute para visualizar os pacotes criados. -
Exemplos
Visualize os recursos e permissões no pacote datashare instalado no projeto test_project_b. Comando de exemplo:
-- View package details. describe package test_project_a.datashare;O resultado retornado contém as seguintes informações:
CreateTime: momento da criação do pacote.
PackageName: nome do pacote.
SourceProject: nome do projeto MaxCompute ao qual o pacote pertence.
ObjectType: tipo de um objeto no pacote.
ObjectName: nome de um objeto no pacote.
ObjectPrivileges: permissões sobre um objeto no pacote.
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 pacote
O usuário autoriza um usuário ou função a acessar um pacote no projeto MaxCompute onde ele está instalado.
O pacote instalado é um tipo de objeto independente no MaxCompute. Para acessar recursos em um pacote, é necessária a permissão Read sobre ele. Sem essa permissão, o proprietário do projeto e 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 Controle de acesso baseado em ACL.
-
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 pacote fica restrito ao projeto onde ele foi instalado. Para gerenciar permissões de pacotes de forma granular, consulte Controle de acesso para pacotes.
-
Parâmetros
Parâmetro
Obrigatório
Descrição
actions
Sim
Permissões de operação sobre os recursos no pacote. Defina o valor como Read.
project_name
Sim
Nome do projeto MaxCompute ao qual o pacote pertence.
Para visualizar o nome de um projeto MaxCompute, faça login no console MaxCompute. Na barra de navegação superior, selecione uma região. Em seguida, visualize o nome do projeto MaxCompute na aba Project management.
package_name
Sim
Nome do pacote.
Execute o comando
show packages;no cliente MaxCompute para visualizar os pacotes criados.name
Sim
Nome da conta de usuário ou função à qual conceder permissões de acesso. Só é possível especificar uma conta de usuário ou função por operação de autorização.
Execute o comando
list users;oulist roles;no cliente MaxCompute para localizar nomes de usuários ou funções. -
Exemplos
Neste exemplo, Bella é uma usuária RAM da conta Alibaba Cloud Amy@aliyun.com. Autorize Bella a acessar o pacote datashare. Comando de exemplo:
-- Grant Bella access to the package. grant Read on package test_project_a.datashare to user RAM$Am*******n.com:Bella;
Revogar permissões de acesso a um pacote de um usuário ou função
O usuário revoga as permissões de acesso a um pacote de um usuário ou função no projeto MaxCompute onde o pacote 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 pacote. Defina o valor como Read.
project_name
Sim
Nome do projeto MaxCompute ao qual o pacote pertence.
Para visualizar o nome de um projeto MaxCompute, faça login no console MaxCompute. Na barra de navegação superior, selecione uma região. Em seguida, visualize o nome do projeto MaxCompute na aba Project management.
package_name
Sim
Nome do pacote.
Execute o comando
show packages;no cliente MaxCompute para visualizar os pacotes criados.name
Sim
Nome da conta de usuário ou função da qual revogar as permissões de acesso ao pacote. Só é possível especificar uma conta de usuário ou função por operação de revogação.
Execute o comando
list users;oulist roles;no cliente MaxCompute para localizar nomes de contas de usuários ou funções. -
Exemplos
Revogue as permissões de acesso ao pacote da usuária Bella. Comando de exemplo:
-- Revoke the permission for Bella to access the package. revoke Read on package test_project_a.datashare from user RAM$Am*******n.com:Bella;
Desinstalar um pacote
O usuário desinstala um pacote de 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 pacote pertence.
Para visualizar o nome de um projeto MaxCompute, faça login no console MaxCompute. Na barra de navegação superior, selecione uma região. Em seguida, visualize o nome do projeto MaxCompute na aba Project management.
package_name
Sim
Nome do pacote.
Execute o comando
show packages;no cliente MaxCompute para visualizar os pacotes criados. -
Exemplos
Desinstale o pacote datashare do projeto test_project_b. Comando de exemplo:
-- Uninstall the datashare 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, compartilhe 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, permita que a usuária RAM Amy@aliyun.com:Bella do projeto test_project_b acesse esses recursos. Execute as etapas a seguir no cliente MaxCompute:
-
Acesse o projeto test_project_a e crie um pacote usando a conta Alibaba Cloud Bob@aliyun.com.
-- Switch to the test_project_a project. use test_project_a; -- Create a package named datashare. create package datashare; -
Use a conta Alibaba Cloud Bob@aliyun.com para adicionar recursos ao pacote 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 pacote.
-- Authorize project test_project_b to install the package. allow project test_project_b to install package datashare; -
Acesse o projeto test_project_b e instale o pacote usando a conta Alibaba Cloud Amy@aliyun.com.
-- Switch to the test_project_b project. 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 pacote.
-- Grant Bella permission to access the package. grant Read on package test_project_a.datashare to user RAM$Am*******n.com:Bella; -
Bella lê dados da tabela sale_detail.
SELECT * FROM test_project_a.sale_detail;
Referências
-
Após criar e instalar um pacote, consulte os seguintes tópicos:
Migrar dados entre projetos MaxCompute na mesma região usando CLONE TABLE.
Migrar dados entre projetos MaxCompute em regiões diferentes usando acesso a dados entre projetos (para cenários de mesma conta e entre contas).
Use o DataWorks para migrar dados do MaxCompute entre projetos. Para mais informações, consulte Fontes de dados MaxCompute.