Todos os produtos
Search
Central de documentação

Hologres:Expert permission model

Última atualização: Jul 10, 2026

O Hologres é compatível com o PostgreSQL e utiliza o mesmo sistema de autorização, conhecido como modelo de permissão especialista. Conceda e revogue privilégios de usuários executando instruções padrão do PostgreSQL.

Concessão de privilégios

Após conectar uma instância do Hologres a uma ferramenta de desenvolvimento, execute instruções SQL para conceder privilégios aos usuários.

  1. Crie um usuário.

    É necessário criar uma conta como usuário do Hologres antes de acessar e desenvolver no Hologres.

    A sintaxe para criar um usuário é:

    -- Create a user that has the privilege to log on to the Hologres instance. If you grant privileges to a RAM user, use the required format for RAM users.
    CREATE USER "Alibaba Cloud account ID/email address"; 
    -- Create a user and grant the superuser privilege.
    CREATE USER "Alibaba Cloud account ID/email address" SUPERUSER;

    Use os exemplos a seguir para criar um usuário. Para obter mais informações sobre os formatos de contas da Alibaba Cloud e usuários RAM, consulte Visão geral da conta.

    -- Create a user by using an Alibaba Cloud account ID.
    CREATE USER "11822780xxx";
    -- Grant the superuser privilege to a RAM user.
    CREATE USER "p4_1822780xxx" SUPERUSER; 

    Para mais detalhes sobre a criação de funções, consulte CREATE ROLE.

  2. Conceda privilégios.

    Após criar um usuário do Hologres, conceda privilégios a ele. O modelo de permissão especialista permite controlar privilégios nos níveis de banco de dados, tabela, visualização e coluna.

    Nota

    O modelo de autorização padrão do PostgreSQL concede privilégios apenas em objetos existentes. Esses privilégios não se aplicam a objetos criados após a concessão. Por exemplo, se o usuário A conceder ao usuário B o privilégio SELECT em todas as tabelas do public schema e depois criar uma nova tabela, o usuário B não terá o privilégio SELECT na nova tabela. O usuário A deve conceder o privilégio na nova tabela explicitamente.

    Descrição

    Exemplo de sintaxe

    Obrigatório

    Criar um usuário com privilégio de login em uma instância do Hologres

    CREATE USER "Alibaba Cloud account/email address";

    Obrigatório

    Criar um usuário e conceder o privilégio de superusuário

    CREATE USER "Alibaba Cloud account/email address" SUPERUSER ;

    Opcional

    Conceder o privilégio CREATE em um schema

    GRANT CREATE ON SCHEMA schema_name  TO "Alibaba Cloud account/email address";

    Opcional

    Conceder o privilégio USAGE em um schema

    GRANT USAGE ON SCHEMA schema_name  TO "Alibaba Cloud account/email address";

    Obrigatório

    Nota

    Um usuário deve ter o privilégio USAGE em um schema para consultar suas tabelas.

    Conceder a todos os usuários os privilégios SELECT, INSERT e UPDATE em todas as tabelas do public schema

    GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA public to PUBLIC;

    Opcional

    Conceder a um usuário o privilégio SELECT em uma tabela

    GRANT SELECT ON TABLE <tablename> TO "Alibaba Cloud account/email address";

    Opcional

    Conceder a um usuário o privilégio SELECT em uma tabela com opção de concessão

    GRANT SELECT ON TABLE <tablename> TO "Alibaba Cloud account/email address" WITH GRANT OPTION;

    Opcional

    Conceder a um usuário o privilégio SELECT em todas as tabelas do public schema

    GRANT SELECT ON ALL TABLES IN SCHEMA public TO "Alibaba Cloud account/email address";

    Opcional

    Conceder a todos os usuários o privilégio SELECT em tabelas futuras criadas pela função atual no schema public.

    ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO PUBLIC;

    Opcional

    Alterar um usuário comum para superusuário

    ALTER USER "Alibaba Cloud account/email address" SUPERUSER;

    Opcional

    Alterar um superusuário para usuário comum

    ALTER USER "Alibaba Cloud account/email address" NOSUPERUSER;

    Opcional

    Transferir a propriedade de uma tabela para outro usuário

    ALTER TABLE <tablename> OWNER TO "Alibaba Cloud account/email address";

    Opcional

    Criar uma função sem privilégio de login

    CREATE ROLE "Alibaba Cloud account/email address";

    Opcional

    Conceder uma função a um usuário

    GRANT <rolename> TO "Alibaba Cloud account/email address" ;

    Opcional

    Conceder a um usuário o privilégio SELECT em colunas específicas de uma tabela

    GRANT SELECT (<column1>,<column2>,<column3>,...) ON TABLE <tablename> TO "Alibaba Cloud account/email address" ;

    Opcional

    Conceder a um usuário o privilégio SELECT em uma visualização

    Nota
    • No modelo de autorização padrão do PostgreSQL, é necessário conceder o privilégio SELECT em uma visualização para acessá-la.

    • No modelo de permissão simples (SPM) ou no modelo de permissão no nível de schema (SLPM), você deve ser membro do grupo de usuários visualizadores ou de um grupo com privilégios superiores para acessar uma visualização.

    -- Grant a user the SELECT privilege on a view by using the standard PostgreSQL authorization model. 
    GRANT SELECT ON <viewname> TO "Alibaba Cloud account/email address" ;

    Opcional

    Para conceder o privilégio SELECT em uma tabela a um novo usuário, execute as seguintes instruções:

    CREATE USER "Alibaba Cloud account/email address";
    GRANT USAGE ON SCHEMA <schema_name>  TO "Alibaba Cloud account/email address";
    GRANT SELECT ON TABLE <tablename> TO "Alibaba Cloud account/email address";

    A instrução CREATE ROLE cria uma função sem privilégio de login, como um grupo de usuários ou uma função virtual que representa um tipo específico de usuário. Para obter mais informações sobre a concessão de privilégios, consulte GRANT.

  3. Exclua uma tabela.

    Apenas um superusuário ou o proprietário da tabela pode excluí-la. Para conceder aos usuários o privilégio de excluir uma tabela, utilize um dos métodos a seguir:

    • Transfira a propriedade da tabela para um novo usuário.

      ALTER TABLE TABLENAME OWNER TO "Alibaba Cloud account/email address";
    • Conceda o privilégio de superusuário a um novo usuário.

      ALTER USER "Alibaba Cloud account/email address" SUPERUSER;
    • Adicione vários usuários a um grupo de usuários e transfira a propriedade da tabela para esse grupo.

      CREATE USER "Alibaba Cloud account ID/email address";
      CREATE ROLE <rolename>;
      GRANT <rolename> TO "Alibaba Cloud account/email address";
      ALTER TABLE <tablename> OWNER TO <rolename>;

Privilégios padrão para tabelas futuras

Por padrão, o modelo de autorização do PostgreSQL não concede privilégios em tabelas futuras. Para isso, utilize a instrução ALTER DEFAULT PRIVILEGES.

Nota
  • Esta instrução não afeta objetos lógicos existentes.

  • Esta instrução define privilégios padrão apenas para tabelas, schemas, funções, sequências ou tipos.

  1. Conceda privilégios.

    • Após configurar privilégios padrão, as tabelas criadas por um usuário em um schema específico podem ser consultadas por um usuário especificado ou por todos os usuários.

      • Após executar esta instrução, todos os usuários poderão consultar tabelas futuras criadas pelo usuário p4_id1 no public schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public GRANT SELECT ON TABLES TO PUBLIC;
      • Após executar esta instrução, o usuário p4_id2 poderá consultar tabelas futuras criadas pelo usuário p4_id1 no public schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public GRANT SELECT ON TABLES TO "p4_id2";
      • Após executar esta instrução, todos os usuários poderão consultar tabelas futuras criadas pelo usuário p4_id1 no test schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA test GRANT SELECT ON TABLES TO PUBLIC;
    • Para revogar os privilégios padrão, execute as seguintes instruções SQL.

      • Revogue de todos os usuários o privilégio padrão SELECT em tabelas futuras criadas pelo usuário p4_id1 no public schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public REVOKE SELECT ON TABLES FROM PUBLIC;
      • Revogue do usuário p4_id2 o privilégio padrão SELECT em tabelas futuras criadas pelo usuário p4_id1 no public schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA public REVOKE SELECT ON TABLES FROM "p4_id2";
      • Revogue de todos os usuários o privilégio padrão SELECT em tabelas futuras criadas pelo usuário p4_id1 no test schema.

        ALTER DEFAULT PRIVILEGES FOR ROLE "p4_id1" IN SCHEMA test REVOKE SELECT ON TABLES FROM PUBLIC;
  2. Verifique se os privilégios padrão foram definidos.

    • Em um cliente psql, execute o comando \ddp para verificar se a instrução ALTER DEFAULT PRIVILEGES foi bem-sucedida.

    • Execute a seguinte instrução SQL no Hologres para consultar o resultado diretamente.

      SELECT pg_catalog.pg_get_userbyid(d.defaclrole) AS "Owner",
        n.nspname AS "Schema",
        CASE d.defaclobjtype WHEN 'r' THEN 'table' WHEN 'S' THEN 'sequence' WHEN 'f' THEN 'function' WHEN 'T' THEN 'type' WHEN 'n' THEN 'schema' END AS "Type",
        pg_catalog.array_to_string(d.defaclacl, E'\n') AS "Access privileges"
      FROM pg_catalog.pg_default_acl d
           LEFT JOIN pg_catalog.pg_namespace n ON n.oid = d.defaclnamespace
      ORDER BY 1, 2, 3;

    Quando uma nova tabela é criada, o Hologres compara o usuário e o schema atuais com o catálogo de sistema pg_catalog.pg_default_acl. Se uma regra ALTER DEFAULT PRIVILEGES correspondente for encontrada, a regra será aplicada à nova tabela. O usuário atual é determinado da seguinte forma:

    • Se a função atual for um usuário, esse usuário será usado para comparação quando a tabela for criada.

    • Se um usuário executar a instrução SET SESSION ROLE GROUP1; antes de criar uma tabela, a função atual mudará para GROUP1. Nesse caso, GROUP1 será usado para a comparação.

    A regra de comparação é acionada apenas quando uma tabela é criada. Se você executar a instrução ALTER TABLE SET OWNER TO para alterar o proprietário da tabela após sua criação, a regra de comparação não será acionada.

Revogação de privilégios

Para revogar privilégios de um usuário, execute a instrução REVOKE. Para obter mais informações sobre a revogação de privilégios, consulte REVOKE.

Antes de revogar privilégios de schema, verifique se a conta possui jobs agendados no DataWorks. Em caso afirmativo, reatribua esses jobs a uma conta ativa e autorizada por meio do Operation Center do DataWorks primeiro. Caso contrário, os jobs falharão na próxima execução com o erro permission denied for schema.

REVOKE SELECT ON TABLE tablename FROM "Alibaba Cloud account ID/email address" ; -- If you revoke privileges from a RAM user, use the required format for RAM users.

Privilégios de catálogo de sistema

A partir do Hologres V3.0, qualquer usuário conectado a um banco de dados pode visualizar informações sobre todos os schemas e tabelas consultando os catálogos de sistema pg_class, pg_attribute e pg_namespace. Isso ocorre especialmente ao conectar-se com ferramentas de BI ou desenvolvimento, que buscam automaticamente listas de schemas, tabelas e colunas nesses catálogos de sistema. Para restringir a visibilidade de metadados apenas a usuários autorizados, o Hologres V3.0.23 e versões posteriores suportam controle de acesso no nível de linha (RLS) nesses três catálogos de sistema. Ative o RLS definindo o seguinte parâmetro GUC:

  • Este parâmetro GUC controla apenas os catálogos de sistema pg_class, pg_attribute e pg_namespace.

  • Um superusuário deve executar esta instrução uma vez para cada banco de dados.

  • Após essa configuração, apenas um superusuário, o proprietário de um objeto ou um usuário com qualquer privilégio sobre um objeto (tabela ou schema) poderá ver os metadados correspondentes. Outros usuários não poderão visualizar os metadados.

-- Set by a superuser.
ALTER DATABASE <database_name> SET hg_experimental_enable_catalog_rls = on;
Nota

Para obter mais informações sobre catálogos de sistema, consulte Catálogos de Sistema.

Visualização de privilégios

Execute as seguintes instruções SQL para visualizar funções e privilégios de usuários:

SELECT ROLNAME FROM pg_roles;
SELECT user_display_name(ROLNAME) FROM pg_roles;

Exclusão de um usuário

Execute instruções SQL para excluir um usuário de uma instância conectada a uma ferramenta de desenvolvimento. O procedimento varia conforme o tipo de usuário.

  • Excluir um usuário comum

    Para excluir um usuário comum que não criou objetos como tabelas, visualizações ou extensões, execute a seguinte instrução ou exclua o usuário no console do HoloWeb.

    drop user "Alibaba Cloud account ID/email address";
  • Excluir um administrador, como um superusuário

    Para excluir um administrador (como um superusuário) que possui objetos, é necessário primeiro transferir a propriedade desses objetos. Tentar excluir tal usuário diretamente resultará em erro. Execute as seguintes instruções:

    -- Transfer objects owned by Account A to Account B.
    reassign owned by "Alibaba Cloud account ID of A" to "Alibaba Cloud account ID of B";     
    -- Drop Account A.
    drop user "Alibaba Cloud account ID of A";

Exclua um usuário RAM de uma instância utilizando um dos seguintes métodos:

DROP USER "Alibaba Cloud account ID/email address";
Importante

Após a exclusão de um usuário RAM, ele não poderá mais se conectar à instância ou acessar seus objetos. Proceda com cautela.

O PostgreSQL possui um modelo de privilégios rigoroso. Para obter práticas recomendadas sobre como escolher uma abordagem de autorização com base nos requisitos do seu negócio, consulte Autorização baseada no modelo de permissão padrão do PostgreSQL.