Problemas de permissão podem causar erros durante o desenvolvimento no Hologres. Esta página descreve soluções para erros comuns de permissão em instâncias do Hologres.
Como escolha o modelo de permissão adequado para o Hologres?
O Hologres oferece três modelos de permissão. Escolha um com base na forma como sua equipe utiliza os schemas.
Modelo de autorização padrão do PostgreSQL: Modelo nativo de permissões do PostgreSQL. Utilize-o se você já estiver familiarizado com o gerenciamento de permissões do PostgreSQL e precisar de controle refinado no nível da tabela — por exemplo, para conceder e revogar permissões individualmente por tabela e por usuário.
Modelo de permissão simples (SPM): Modelo no nível do banco de dados em que todos os usuários pertencem a um de três grupos (desenvolvedor, escritor ou visualizador). Cada grupo possui permissões de acesso específicas para objetos em qualquer schema dentro de um banco de dados. O SPM é recomendado quando você raramente usa schemas para isolamento ou quando os utiliza apenas como pastas para organizar tabelas.
Modelo de permissão no nível do schema (SLPM): Cada schema possui seus próprios grupos de usuários desenvolvedor, escritor e visualizador, garantindo isolamento no nível do schema. Adote o SLPM caso sua equipe dependa fortemente da separação de permissões por schema.
Erros de permissão
role "RAM$xxx" does not exist
O usuário RAM não foi adicionado à instância do Hologres. Conceda as permissões de desenvolvimento ao usuário, incluindo Superuser, se necessário. Consulte Conceder permissões de desenvolvimento em uma instância a um usuário RAM.
Após conceder as permissões, tente execute a operação novamente para confirme que o erro foi resolvido.
password authentication failed for user "xxx"
Este erro possui duas causas possíveis, dependendo do método de login:
Login com AccessKey:
Verifique se o usuário existe na instância. Caso contrário, adicione-o. Consulte Gerenciamento de usuários.
Confirme se o AccessKey ID e o AccessKey secret estão corretos e não foram desativados.
Login com conta personalizada (conta BASIC):
Verifique se a conta personalizada existe na instância. Se não existir, adicione-a. Consulte Gerenciamento de usuários.
Certifique-se de que a senha está correta.
permission denied for table xxxx
A conta atual não tem acesso de leitura à tabela. Resolva essa questão conforme o seu modelo de permissão:
-
Modelo de autorização padrão do PostgreSQL: Conceda SELECT na tabela, substituindo
p4_UIDpelo identificador do usuário RAM:GRANT SELECT ON TABLE tablename TO "p4_UID"; SPM: Adicione o usuário ao grupo de visualizadores ou a um grupo com permissões superiores. Consulte Usar o modelo de permissão simples.
Depois de aplicar a correção, execute a consulta novamente para confirme que o acesso foi restaurado.
FATAL: permission denied for database "xxx" detail: user does not have CONNECT privilege
A conta de usuário existe na instância, mas não possui permissões de desenvolvimento no banco de dados. Conceda as permissões necessárias, incluindo Superuser, se for o caso. Consulte Conceder permissões de desenvolvimento em uma instância a um usuário RAM.
Falha em call spm_enable() devido a conflitos de função
O SPM foi ativado anteriormente neste banco de dados, deixando informações residuais de funções. Execute CALL spm_enable ('t'); em vez disso. A flag 't' reutiliza as funções de sistema existentes em vez de tentar crie novas, evitando assim o conflito.
current database is NOT in simple privilege mode
O SPM não está ativado para o banco de dados. Para ative:
-
Verifique o status atual:
SHOW hg_experimental_enable_spm; -
Ative o SPM e migre os objetos existentes para o gerenciamento do SPM:
-- Enable SPM, retaining original roles and permissions CALL spm_enable ('t'); -- Transfer ownership of existing objects to the developer role CALL spm_migrate ();O parâmetro
't'preserva as funções originais do sistema e suas permissões, em vez de removê-las ao executarspm_disable. Sem esse parâmetro, uma chamada subsequente aspm_enable()falhará devido a um conflito de funções. O comandospm_enable ('t')ignora esse conflito e reutiliza as funções de sistema existentes.
must be the owner of table xxxx
O usuário atual não é o proprietário da tabela e não pode crie partições filhas nem exclua a tabela. Resolva isso conforme o seu modelo de permissão:
-
Modelo de autorização padrão do PostgreSQL: Transfira a propriedade da tabela para o usuário, substituindo
p4_UIDpelo identificador do usuário RAM:ALTER TABLE tablename OWNER TO "p4_UID"; SPM: Adicione o usuário ao grupo de desenvolvedores ou a um grupo com permissões superiores. Consulte Usar o modelo de permissão simples.
permission denied for table xxx ao consultar uma view entre schemas
O SLPM está ativado e não oferece suporte a views que referenciam tabelas em diferentes schemas. Verifique se você está tentando crie uma view entre schemas enquanto o SLPM está em uso.
permission denied for Schema xxx
O usuário não possui permissões no schema. Corrija essa situação conforme o seu modelo de permissão:
-
SPM ou SLPM: Adicione o usuário ao grupo apropriado:
Para acesso de leitura (consultas): grupo de visualizadores ou superior
Para acesso de escrita (criação de tabelas): grupo de desenvolvedores ou superior
Para SPM, consulte . Para SLPM, consulte Autorização SLPM.
-
Modelo de autorização padrão do PostgreSQL: Conceda as permissões de schema explicitamente, substituindo o espaço reservado pela conta Alibaba Cloud ou e-mail:
-- Grant USAGE to allow querying tables in the schema GRANT USAGE ON SCHEMA <schema_name> TO "Alibaba Cloud account/email"; -- Grant CREATE to allow creating tables in the schema GRANT CREATE ON SCHEMA <schema_name> TO "Alibaba Cloud account/email";Após conceder as permissões, execute a consulta original novamente para confirme o acesso.
ALTER TABLE xxx is not supported in Simple Privilege Mode
O SPM está ativado e não permite operações diretas de ALTER TABLE. Utilize uma das seguintes abordagens:
Opção 1: Conceda as permissões necessárias dentro do SPM. Consulte Modelo de permissão simples.
Opção 2: Alterne o banco de dados do SPM para o modelo de autorização padrão do PostgreSQL. Consulte Alternar modelos de permissão.