Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ GaussDB(DWS)/ Perguntas frequentes/ Conta, senha e permissão/ Como conceder permissões de tabela a um usuário?
Atualizado em 2024-05-09 GMT+08:00

Como conceder permissões de tabela a um usuário?

Esta seção descreve como conceder aos usuários as permissões SELECT, INSERT, UPDATE ou permissões completas de tabelas aos usuários.

Sintaxe

1
2
3
4
5
6
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | ANALYZE | ANALYSE } [, ...] 
      | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...]
       | ALL TABLES IN SCHEMA schema_name [, ...] }
    TO { [ GROUP ] role_name | PUBLIC } [, ...] 
    [ WITH GRANT OPTION ];

Cenário

Suponha que existam usuários u1, u2, u3, u4 e u5 e cinco esquemas nomeados após esses usuários. Seus requisitos de permissão são os seguintes:

  • O usuário u2 é um usuário somente leitura e requer a permissão SELECT para a u1.t1.
  • O usuário u3 requer a permissão SELECT para a tabela u1.t1.
  • O usuário u3 requer a permissão UPDATE para a tabela u1.t1.
  • O usuário u5 requer todas as permissões da tabela u1.t1.

Tabela 1 Permissões da tabela u1.t1

Usuário

Tipo

Instrução GRANT

Consultar

Inserir

Atualizar

Excluir

u1

Proprietário

-

u2

Usuário de somente leitura

1
GRANT SELECT ON u1.t1 TO u2;

x

x

x

u3

Usuário de INSERT

1
GRANT INSERT ON u1.t1 TO u3;

x

x

x

u4

Usuário de UPDATE

1
GRANT SELECT,UPDATE ON u1.t1 TO u4;  
AVISO:

A permissão UPDATE deve ser concedida juntamente com a permissão SELECT, ou pode ocorrer vazamento de informações.

x

x

u5

Usuários com todas as permissões

1
GRANT ALL PRIVILEGES ON u1.t1 TO u5;

Procedimento

Execute as seguintes etapas para conceder e verificar permissões:

  1. Conecte-se ao seu banco de dados como dbadmin. Execute as instruções a seguir para criar os usuários de u1 a u5. Cinco esquemas serão criados e nomeados após os usuários por padrão.

    1
    2
    3
    4
    5
    CREATE USER u1 PASSWORD '{password}';
    CREATE USER u2 PASSWORD '{password}';
    CREATE USER u3 PASSWORD '{password}';
    CREATE USER u4 PASSWORD '{password}';
    CREATE USER u5 PASSWORD '{password}';
    

  1. Criar tabela u1.t1 no esquema u1.

    1
    CREATE TABLE u1.t1 (c1 int, c2 int);
    

  2. Insira dois registros na tabela.

    1
    2
    INSERT INTO u1.t1 VALUES (1,2);
    INSERT INTO u1.t1 VALUES (1,2);
    

  3. Conceda permissões de esquema aos usuários.

    1
    GRANT USAGE ON SCHEMA u1 TO u2,u3,u4,u5;
    

  4. Conceda ao usuário u2 a permissão para consultar a tabela u1.t1.

    1
    GRANT SELECT ON u1.t1 TO u2;
    

  5. Inicie uma nova sessão e conecte-se ao banco de dados como o usuário u2. Verifique se o usuário u2 pode consultar a tabela u1.t1, mas não pode gravar ou modificar a tabela.

    1
    2
    3
    SELECT * FROM u1.t1;
    INSERT INTO u1.t1 VALUES (1,20);
    UPDATE u1.t1 SET c2 = 3 WHERE c1 =1;
    

  6. Na sessão iniciada pelo usuário dbadmin, conceda permissões aos usuários u3, u4 e u5.

    1
    2
    3
    GRANT INSERT ON u1.t1 TO u3; -- Allow u3 to insert data.
    GRANT SELECT,UPDATE ON u1.t1 TO u4; -- Allow u4 to modify the table.
    GRANT ALL PRIVILEGES ON u1.t1 TO u5; -- Allow u5 to query, insert, modify, and delete table data.
    

  7. Inicie uma nova sessão e conecte-se ao banco de dados como o usuário u3. Verifique se o usuário u3 pode consultar a tabela u1.t1, mas não pode consultar ou modificar a tabela.

    1
    2
    3
    SELECT * FROM u1.t1;
    INSERT INTO u1.t1 VALUES (1,20);
    UPDATE u1.t1 SET c2 = 3 WHERE c1 =1;
    

  8. Inicie uma nova sessão e conecte-se ao banco de dados como o usuário u4. Verifique se o usuário u4 pode modificar e consultar a tabela u1.t1, mas não pode inserir dados na tabela.

    1
    2
    3
    SELECT * FROM u1.t1;
    INSERT INTO u1.t1 VALUES (1,20);
    UPDATE u1.t1 SET c2 = 3 WHERE c1 =1;
    

  9. Inicie uma nova sessão e conecte-se ao banco de dados como o usuário u5. Verifique se o usuário u5 pode consultar, inserir, modificar e excluir dados na tabela u1.t1.

    1
    2
    3
    4
    SELECT * FROM u1.t1;
    INSERT INTO u1.t1 VALUES (1,20);
    UPDATE u1.t1 SET c2 = 3 WHERE c1 =1;
    DELETE FROM u1.t1;
    

  10. Na sessão iniciada pelo usuário dbadmin, execute a função has_table_privilege para consultar as permissões do usuário.

    1
    SELECT * FROM pg_class WHERE relname = 't1';
    

    Verifique a coluna relacl na saída do comando. rolename=xxxx/yyyy indica que rolename tem a permissão xxxx na tabela e a permissão é obtida de yyyy.

    A figura a seguir mostra a saída do comando.

    • u1=arwdDxtA/u1 indica que u1 é o proprietário e tem permissões completas.
    • u2=r/u1 indica que u2 tem a permissão de leitura.
    • u3=a/u1 indica que u3 tem a permissão de inserção.
    • u4=rw/u1 indica que u4 tem as permissões de leitura e atualização.
    • u5=arwdDxtA/u1 indica que u5 tem permissões completas.