Todos os produtos
Search
Central de documentação

Hologres:SPM functions

Última atualização: Sep 18, 2026

O modelo de permissão simples (SPM) é gerenciado por meio de um conjunto de procedimentos armazenados. 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

Ative o SPM para o banco de dados atual

spm_migrate

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

spm_create_user

Crie um usuário com permissões apenas de logon

spm_grant

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

spm_revoke

Remova um usuário de um grupo de usuários

spm_disable

Desative o SPM para o banco de dados atual

spm_cleanup

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

spm_enable

Ative o SPM para o 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 do 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 um grupo não podem se conectar.

Conectividade do grupo

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

Propriedade

O grupo {db}_admin se torna o 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 a permissão USAGE em todos os schemas. O grupo {db}_developer também recebe a permissão CREATE em todos os schemas.

Permissões de objeto

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

spm_migrate

Migre objetos existentes do banco de dados para a propriedade do SPM em lotes. Chame esta função após o 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 do grupo {db}_admin.

Sintaxe

CALL spm_migrate( [ batch_size ] );

Parâmetros

Parâmetro

Descrição

Intervalo de valores

batch_size

Número de objetos a serem migrados por chamada. O padrão é o valor atual de max_locks_per_transaction ao definir como 0.

[0, max_locks_per_transaction]. Valores fora deste 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

Alguns objetos permanecem. Chame spm_migrate() novamente.

COMPLETED

Todos os objetos foram migrados.

Se a sua instância tiver milhares de objetos, chame spm_migrate() várias vezes até que COMPLETED seja retornado. Entre em contato com o grupo de suporte do Hologres para solicitar um valor maior para max_locks_per_transaction , se necessário. Para obter mais detalhes, consulte Get more online support .

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

Crie um usuário do Hologres com permissões 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 do grupo {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 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

Adicione um usuário a um grupo de usuários, concedendo as permissões associadas a esse grupo.

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

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 Simple permission model (SPM).

user_name

O usuário a ser adicionado. Aceita uma conta Alibaba Cloud ou conta de usuário RAM nos mesmos formatos do 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

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

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

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 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

Desative o SPM para o banco de dados atual, revertendo para o modelo de permissão 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 ainda existem e podem ser usados com instruções GRANT padrão no modo especialista.

Propriedade do objeto

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

Acesso do 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 concedidas ao PUBLIC.

Exemplo

CALL spm_disable();

spm_cleanup

Remova 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

Número de objetos para transferir a propriedade por chamada. O padrão é o valor atual de max_locks_per_transaction ao definir como 0.

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

Valores de retorno

Valor de retorno

Significado

DONE BUT NOT COMPLETED

A limpeza está incompleta; exclua os grupos reservados chamando spm_cleanup() novamente.

COMPLETED

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

Se a sua instância tiver muitos objetos para migrar, chame spm_cleanup() várias vezes até que COMPLETED seja retornado. 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 obter mais detalhes, consulte Get more online support .

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: Exclua o banco de dados primeiro e depois faça a limpeza

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

Cenário 2: Faça a limpeza enquanto o banco de dados ainda existe

Conecte-se primeiro ao mydb e depois chame spm_cleanup. Chamar esta função 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

Ative o SPM

Sim

Não

Não

spm_disable

Desative o SPM

Sim

Não

Não

spm_grant

Adicione um usuário a um grupo

Sim

Sim

Não

spm_revoke

Remova um usuário de um grupo

Sim

Sim

Não

spm_migrate

Migre objetos para o SPM

Sim

Sim

Não

spm_cleanup

Remova grupos de usuários reservados

Sim

Não

Não

spm_create_user

Crie um usuário com permissões apenas de logon

Sim

Sim

Não

Comandos restritos

Depois de 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 do objeto. O proprietário é sempre {db}_developer e não pode ser alterado manualmente.

GRANT

Não é necessário após adicionar um usuário com spm_grant.

REVOKE

Não é necessário após remover um usuário com spm_revoke.

ALTER DEFAULT PRIVILEGES

Não é necessário. O SPM concede permissões com base na associação ao grupo, e não no momento da criação do objeto, portanto, as tabelas futuras são cobertas automaticamente.

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

Os quatro grupos de usuários padrão são gerenciados pelo sistema. Não crie nem modifique esses grupos, pois nenhum usuário, incluindo superusuários, tem permissão para isso.

RENAME TO/FROM default user group

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