O Hologres oferece suporte a três modelos de permissão: o modelo de autorização padrão do PostgreSQL, o modelo de permissão simples (SPM) e o modelo de permissão no nível de schema (SLPM). Este tópico explica como verificar o modelo ativo e alternar entre eles.
Verificar o modelo de permissão atual
Use um dos métodos a seguir:
HoloWeb: Acesse Security Center > DB Authorization. Para mais detalhes, consulte Gerenciamento de banco de dados.
-
SQL: Execute os comandos abaixo para verificar se o SPM ou SLPM está ativado.
-- Check whether SPM is enabled. SHOW hg_experimental_enable_spm; -- Check whether SLPM is enabled. SHOW hg_enable_slpm;
Alternar do SPM para o modelo de autorização padrão do PostgreSQL
Pré-requisitos
Somente um superusuário pode desativar o SPM.
O que acontece após a alternância
Após a desativação do SPM, a função public mantém as seguintes permissões:
|
Tipo de objeto |
Permissões mantidas |
|
Schema público |
USAGE, CREATE |
|
Banco de dados |
CONNECT, TEMPORARY |
|
Funções e procedimentos |
EXECUTE |
|
Linguagem, tipos de dados (incluindo domínios) |
USAGE |
|
Tabelas, visualizações, visualizações materializadas, colunas de tabela, sequências, wrappers de dados externos, servidores externos, schemas não públicos |
Nenhuma |
Os grupos de usuários admin, developer, writer e viewer mantêm permissões apenas sobre os objetos existentes. Essas permissões não se estendem a novos objetos do banco de dados. Os próprios grupos de usuários não são excluídos.
Desativar o SPM
-- Disable SPM.
CALL spm_disable();
-- (Optional) Clean up user groups.
CALL spm_cleanup('dbname');
Antes de executar spm_cleanup , certifique-se de que nenhuma instrução SQL esteja em execução no banco de dados. Executar a limpeza com consultas ativas pode causar falhas e afetar seu serviço. Para facilitar o gerenciamento, prefira manter os grupos de usuários em vez de excluí-los.
Alternar do modelo de autorização padrão do PostgreSQL para o SPM
-- Enable SPM for the current database.
CALL spm_enable();
-- Update the owner of existing objects in the DB to 'developer' to be managed by SPM.
CALL spm_migrate();
Se uma conta recém-adicionada apresentar erro de permissão após a alternância, a migração de objetos pode estar incompleta. Execute CALL spm_migrate(); várias vezes.
Caso encontre o erro ERROR: cannot enable Simple Privilege Model for db=[xxxxxx] because roles conflict, consulte Solução de problemas.
Alternar do SPM para o SLPM
Não há caminho direto do SPM para o SLPM. Alterne passando pelo modelo de autorização padrão do PostgreSQL:
Desative o SPM e reverta para o modelo padrão.
Ative o SLPM.
-- Disable SPM.
CALL spm_disable();
-- Clean up SPM system roles.
CALL spm_cleanup('dbname');
-- Enable SLPM.
CALL slpm_enable();
-- Update the owner of existing objects in the DB to 'developer' to be managed by SLPM. This step is required.
CALL slpm_migrate();
Se uma conta recém-adicionada apresentar erro de permissão após a alternância, a migração de objetos pode estar incompleta. Execute CALL slpm_migrate(); várias vezes.
Caso encontre o erro cannot enable slpm for database xxxxx because roles conflict., consulte Solução de problemas.
Alternar do SLPM para o SPM
Não há caminho direto do SLPM para o SPM. Alterne passando pelo modelo de autorização padrão do PostgreSQL:
Desative o SLPM e reverta para o modelo padrão.
Ative o SPM.
-- Disable SLPM.
CALL slpm_disable();
-- Clean up SLPM system roles.
CALL slpm_cleanup('dbname');
-- Enable SPM.
CALL spm_enable();
-- Update the owner of existing objects in the DB to 'developer' to be managed by SPM.
CALL spm_migrate();
Se uma conta recém-adicionada apresentar erro de permissão após a alternância, a migração de objetos pode estar incompleta. Execute CALL spm_migrate(); várias vezes.
Caso encontre o erro cannot enable spm for database xxxxx because roles conflict., consulte Solução de problemas.
Solução de problemas
Erro de conflito de funções
Sintomas: Um dos erros a seguir aparece ao ativar o SPM ou SLPM:
ERROR: cannot enable Simple Privilege Model for db=[xxxxxx] because roles conflictcannot enable slpm for database xxxxx because roles conflict.cannot enable spm for database xxxxx because roles conflict.
Causa: O modelo foi ativado anteriormente e suas funções de sistema ainda existem no banco de dados.
Correção: Ative o modelo em modo de recuperação passando 't' como argumento.
Para o SPM:
-- Enable SPM in recovery mode.
CALL spm_enable('t');
-- Update the owner of existing objects in the DB to 'developer' to be managed by SPM.
CALL spm_migrate();
Para o SLPM (ao alternar do SPM para o SLPM — após desativar o SPM e limpar as funções de sistema):
-- Disable SPM.
CALL spm_disable();
-- Clean up SPM system roles.
CALL spm_cleanup('dbname');
-- Enable SLPM in recovery mode.
CALL slpm_enable('t');
-- Update the owner of existing objects in the DB to 'developer' to be managed by SLPM. This step is required.
CALL slpm_migrate();
Para o SPM (ao alternar do SLPM para o SPM — após desativar o SLPM e limpar as funções de sistema):
-- Disable SLPM.
CALL slpm_disable();
-- Clean up SLPM system roles.
CALL slpm_cleanup('dbname');
-- Enable SPM in recovery mode.
CALL spm_enable('t');
-- Update the owner of existing objects in the DB to 'developer' to be managed by SPM.
CALL spm_migrate();