Todos os produtos
Search
Central de documentação

Hologres:Funções SPM

Última atualização: Jun 28, 2026

Um conjunto de stored procedures gerencia o modelo de permissão simples (SPM). Este tópico descreve a sintaxe, os parâmetros, as permissões necessárias e o comportamento de cada função.

Visão geral das funções

Função

Descrição

spm_enable

Ativa o SPM no banco de dados atual

spm_migrate

Migra objetos existentes (tabelas, visualizações, tabelas externas) para a propriedade do SPM

spm_create_user

Cria um usuário com permissão apenas de logon

spm_grant

Adiciona um usuário a um grupo de usuários

spm_revoke

Remove um usuário de um grupo de usuários

spm_disable

Desativa o SPM no banco de dados atual

spm_cleanup

Remove grupos de usuários reservados pelo SPM de um banco de dados

spm_enable

Ativa o SPM no banco de dados atual. Em caso de sucesso, o sistema cria quatro grupos de usuários: {db}_admin, {db}_developer, {db}_writer e {db}_viewer.

Permissões necessárias: Apenas superusuário.

Sintaxe

CALL spm_enable();

O que acontece após a ativação

Alteração

Detalhes

Acesso PUBLIC revogado

Todas as permissões no banco de dados e em seus schemas são removidas do PUBLIC. Usuários sem associação explícita a grupos não conseguem se conectar.

Conectividade dos grupos

Todos os quatro grupos ({db}_admin, {db}_developer, {db}_writer, {db}_viewer) recebem a permissão CONNECT.

Propriedade

O grupo {db}_admin torna-se proprietário do banco de dados e de todos os schemas. Objetos criados por membros de {db}_admin ou {db}_developer passam a ser de propriedade de {db}_developer.

Permissões de schema

Os grupos {db}_developer, {db}_writer e {db}_viewer recebem USAGE em todos os schemas. O grupo {db}_developer também recebe CREATE em todos os schemas.

Permissões de objeto

O grupo {db}_writer recebe permissões de leitura e escrita em todos os objetos. O grupo {db}_viewer recebe permissões somente de leitura.

spm_migrate

Migra objetos existentes do banco de dados para a propriedade do SPM em lotes. Chame esta função após executar spm_enable para colocar tabelas, visualizações e tabelas externas pré-existentes sob o gerenciamento do SPM.

Permissões necessárias: Superusuário ou membro de {db}_admin.

Sintaxe

CALL spm_migrate( [ batch_size ] );

Parâmetros

Parâmetro

Descrição

Intervalo de valores

batch_size

Quantidade de objetos a migrar por chamada. Quando definido como 0, assume o valor atual de max_locks_per_transaction.

[0, max_locks_per_transaction]. Valores fora desse intervalo são inválidos. Execute show max_locks_per_transaction; para verificar o limite atual.

Valores de retorno

Valor de retorno

Significado

DONE BUT NOT COMPLETED

Ainda restam objetos. Chame spm_migrate() novamente.

COMPLETED

Todos os objetos foram migrados.

Se sua instância tiver milhares de objetos, chame spm_migrate() várias vezes até receber COMPLETED como retorno. Entre em contato com o grupo de suporte do Hologres para solicitar um valor maior de max_locks_per_transaction , se necessário. Para mais detalhes, consulte Obter mais suporte online .

Exemplos

-- Migrate up to max_locks_per_transaction objects per call
CALL spm_migrate();

-- Migrate 128 objects per call
CALL spm_migrate(128);

spm_create_user

Cria um usuário do Hologres com permissão apenas de logon. Após a criação, adicione o usuário a um grupo com spm_grant para conceder permissões de desenvolvimento.

Permissões necessárias: Superusuário ou membro de {db}_admin.

Sintaxe

CALL spm_create_user( user_name [, role_name] );

Parâmetros

Parâmetro

Descrição

user_name

A conta a ser criada. Aceita uma conta da Alibaba Cloud (por exemplo, 13432193xxxx ou example@aliyun.com) ou uma conta de usuário RAM (por exemplo, RAM$mainaccount:subuser ou p4_202338382183xxx).

role_name

(Opcional) O grupo de usuários ao qual adicionar o usuário imediatamente. Valores válidos: {db}_admin, {db}_developer, {db}_writer, {db}_viewer.

Exemplos

-- Create a user with logon-only permissions
CALL spm_create_user('my_t***@aliyun.com');

-- Create a user and immediately add them to the developer group
CALL spm_create_user('RAM$my_test:mysubuser', 'mydb_developer');

-- Create a user using an Alibaba Cloud account ID
CALL spm_create_user('13532313103042xxx');

-- Create a user and immediately add them to the admin group
CALL spm_create_user('p4_23319103042xxx', 'mydb_admin');

spm_grant

Adiciona um usuário a um grupo de usuários e concede as permissões associadas a esse grupo.

Permissões necessárias: Superusuário ou membro de {db}_admin. O SPM deve estar ativado.

Sintaxe

CALL spm_grant( role_name, user_name );

Parâmetros

Parâmetro

Descrição

role_name

O grupo de usuários de destino: {db}_admin, {db}_developer, {db}_writer ou {db}_viewer. Para obter uma descrição das permissões de cada grupo, consulte Modelo de permissão simples (SPM).

user_name

O usuário a ser adicionado. Aceita uma conta da Alibaba Cloud ou conta de usuário RAM nos mesmos formatos aceitos por spm_create_user.

Exemplos

-- Grant developer permissions on mydb to a RAM user
CALL spm_grant('mydb_developer', 'p4_202338382183xxx');

-- Grant admin permissions on mydb to a RAM user
CALL spm_grant('mydb_admin', 'RAM$my_test:xxx');

-- Error: connect to otherdb first, then run spm_grant
CALL spm_grant('otherdb_admin', '13532313103042xxx');
Para adicionar um usuário a um grupo em outro banco de dados, conecte-se primeiro a esse banco de dados e depois chame spm_grant .

spm_revoke

Remove um usuário de um grupo de usuários.

Permissões necessárias: Superusuário ou membro de {db}_admin. O SPM deve estar ativado.

Sintaxe

CALL spm_revoke( role_name, user_name );

Parâmetros

Parâmetro

Descrição

role_name

O grupo de usuários do qual remover o usuário: {db}_admin, {db}_developer, {db}_writer ou {db}_viewer.

user_name

O usuário a ser removido. Aceita uma conta da Alibaba Cloud ou conta de usuário RAM.

Exemplos

-- Remove a RAM user from the developer group of mydb
CALL spm_revoke('mydb_developer', 'p4_202338382183xxx');

-- Remove a RAM user from the admin group of mydb
CALL spm_revoke('mydb_admin', 'RAM$my_test:xxx');

-- Error: connect to otherdb first, then run spm_revoke
CALL spm_revoke('otherdb_admin', '13532313103042xxx');
Para remover um usuário de um grupo em outro banco de dados, conecte-se primeiro a esse banco de dados e depois chame spm_revoke .

spm_disable

Desativa o SPM no banco de dados atual e reverte para o modelo de permissões padrão do PostgreSQL.

Permissões necessárias: Apenas superusuário.

Sintaxe

CALL spm_disable();

O que acontece após a desativação

Alteração

Detalhes

Grupos mantidos

Os grupos {db}_admin, {db}_developer, {db}_writer e {db}_viewer continuam existindo e podem ser usados com instruções GRANT padrão no modo especialista.

Propriedade de objetos

Todos os objetos do banco de dados permanecem sob a propriedade de {db}_developer.

Acesso PUBLIC restaurado

As permissões CONNECT e TEMPORARY no banco de dados são concedidas ao PUBLIC.

Acesso ao schema public restaurado

As permissões USAGE e CREATE no schema public são concedidas ao PUBLIC.

Acesso a funções e linguagens restaurado

A permissão EXECUTE em funções e procedimentos no schema public, USAGE em linguagens definidas pelo usuário e USAGE em tipos definidos pelo usuário são todas concedidas ao PUBLIC.

Exemplo

CALL spm_disable();

spm_cleanup

Remove os grupos de usuários reservados pelo SPM ({db}_admin, {db}_developer, {db}_writer, {db}_viewer) de um banco de dados.

Permissões necessárias: Apenas superusuário.

Sintaxe

CALL spm_cleanup( db_name [, batch_size ] );

Parâmetros

Parâmetro

Descrição

Intervalo de valores

db_name

O banco de dados do qual remover os grupos de usuários. Coloque nomes que contenham caracteres especiais ou letras maiúsculas entre aspas duplas (por exemplo, "MYDB").

Nenhum

batch_size

Quantidade de objetos cuja propriedade será transferida por chamada. Quando definido como 0, assume o valor atual de max_locks_per_transaction.

[0, max_locks_per_transaction]. Valores fora desse intervalo são inválidos.

Valores de retorno

Valor de retorno

Significado

DONE BUT NOT COMPLETED

A limpeza está incompleta; os grupos reservados ainda não foram excluídos. Chame spm_cleanup() novamente.

COMPLETED

A limpeza foi concluída; todos os grupos reservados foram excluídos.

Se sua instância tiver muitos objetos para migrar, chame spm_cleanup() várias vezes até receber COMPLETED como retorno. Participe do grupo de comunicação do Hologres para solicitar um aumento no valor do parâmetro max_locks_per_transaction , se necessário. Para mais detalhes, consulte Obter mais suporte online .

Exemplos

-- Transfer ownership in batches of max_locks_per_transaction objects
CALL spm_cleanup('mydb');

-- Transfer ownership in batches of 128 objects
CALL spm_cleanup('mydb', 128);

Cenário 1: Excluir o banco de dados primeiro e depois limpar

DROP DATABASE mydb;
CALL spm_cleanup('mydb');  -- Completes in one call, no retry needed

Cenário 2: Limpar enquanto o banco de dados ainda existe

Conecte-se primeiro ao mydb e depois chame spm_cleanup. Chamá-lo a partir de outro banco de dados retorna um erro:

ERROR: Permission Denied. execute in database otherdb, or drop database before call spm_cleanup.

Permissões de chamada de função

Função

Descrição

Superusuário

db_admin

db_developer / db_writer / db_viewer

spm_enable

Ativa o SPM

Sim

Não

Não

spm_disable

Desativa o SPM

Sim

Não

Não

spm_grant

Adiciona um usuário a um grupo

Sim

Sim

Não

spm_revoke

Remove um usuário de um grupo

Sim

Sim

Não

spm_migrate

Migra objetos para o SPM

Sim

Sim

Não

spm_cleanup

Remove grupos de usuários reservados

Sim

Não

Não

spm_create_user

Cria um usuário com permissão apenas de logon

Sim

Sim

Não

Comandos restritos

Após ativar o SPM, os seguintes comandos de permissão do PostgreSQL tornam-se restritos ou desnecessários.

Comando

Restrição

ALTER TABLE owner TO xx

O SPM gerencia automaticamente a propriedade dos objetos. O proprietário é sempre {db}_developer e não pode ser alterado manualmente.

GRANT

Desnecessário após adicionar um usuário com spm_grant.

REVOKE

Desnecessário após remover um usuário com spm_revoke.

ALTER DEFAULT PRIVILEGES

Desnecessário. O SPM concede permissões com base na associação a grupos, e não no momento de criação do objeto, portanto, tabelas futuras são cobertas automaticamente.

CREATE ROLE / DROP ROLE / ALTER ROLE / ALTER ROLE SET DEFAULT USER GROUP

O sistema gerencia os quatro grupos de usuários padrão. Nenhum usuário, incluindo superusuários, pode criá-los ou modificá-los.

RENAME TO/FROM default user group

Os nomes dos grupos reservados (*_admin, *_developer, *_writer, *_viewer) não podem ser renomeados.