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)/ Melhores práticas/ Gerenciamento de segurança/ Gerenciamento e controle de permissões de dados por meio de exibições
Atualizado em 2024-05-09 GMT+08:00

Gerenciamento e controle de permissões de dados por meio de exibições

Use modos de exibição para conceder a usuários diferentes a permissão para consultar dados diferentes na mesma tabela, fornecendo gerenciamento e segurança de permissões de dados.

Cenário

Depois de se conectar ao cluster como usuário dbadmin, crie um cliente de tabela de exemplo.

1
CREATE TABLE customer (id bigserial NOT NULL, province_id bigint NOT NULL, user_info varchar, primary key (id)) DISTRIBUTE BY HASH(id);

Insira os dados de teste no cliente da tabela de exemplo.

1
2
INSERT INTO customer(province_id,user_info) VALUES (1,'Alice'),(1,'Jack'),(2,'Jack'),(3,'Matu');
INSERT 0 4

Consulte a tabela do cliente.

1
2
3
4
5
6
7
8
SELECT * FROM customer;
 id | province_id | user_info
----+-------------+-----------
  3 |           2 | Jack
  1 |           1 | Alice
  2 |           1 | Jack
  4 |           3 | Matu
(4 rows)

Requisito: o usuário u1 pode visualizar apenas os dados da província 1 (province_id=1) e o usuário u2 pode visualizar apenas os dados da província 2 (province_id=2).

Implementação

Você pode criar uma exibição para atender aos requisitos no cenário anterior. O procedimento é o seguinte:

  1. Depois de se conectar ao cluster como usuário dbadmin, crie as exibições v1 e v2 para as províncias 1 e 2 no modo dbadmin.

    Execute a instrução CREATE VIEW para criar a exibição v1 para consultar os dados da província 1.
    1
    2
    CREATE VIEW v1 AS
        SELECT * FROM customer WHERE province_id=1;
    

    Execute a instrução CREATE VIEW para criar a exibição v2 para consultar os dados da província 2.

    1
    2
    CREATE VIEW v2 AS
        SELECT * FROM customer WHERE province_id=2;
    

  2. Crie os usuários u1 e u2.

    1
    2
    CREATE USER u1 PASSWORD '*********';
    CREATE USER u2 PASSWORD '*********';
    

  3. Execute a instrução GRANT para conceder a permissão de consulta de dados para o usuário de destino.

    Conceda a permissão na exibição do esquema correspondente a u1 e u2.

    1
    GRANT USAGE ON schema dbadmin TO u1,u2;
    

    Conceda a u1 a permissão para consultar os dados da província 1 na exibição v1.

    1
    GRANT SELECT ON v1 TO u1;
    

    Conceda a u2 a permissão para consultar os dados da província 2 na exibição V2.

    1
    GRANT SELECT ON v2 TO u2;
    

Verificar o resultado da consulta

  • Alterne para a conta u1 para se conectar ao cluster.
    1
    SET ROLE u1 PASSWORD '*********';
    
    Essa interface é usada para consultar a exibição v1. u1 pode consultar apenas os dados da exibição v1.
    1
    2
    3
    4
    5
    6
    SELECT * FROM dbadmin.v1;
     id | province_id | user_info
    ----+-------------+-----------
      1 |           1 | Alice
      2 |           1 | Jack
    (2 rows)
    
    Se u1 tentar consultar dados no modo de exibição v2, as seguintes informações de erro serão exibidas:
    1
    2
    SELECT * FROM dbadmin.v2;
    ERROR:  SELECT permission denied to user "u1" for relation "dbadmin.v2"
    

    O resultado mostra que o usuário u1 pode visualizar apenas os dados da província 1 (province_id=1).

  • Use a conta u2 para se conectar ao cluster.
    1
    SET ROLE u2 PASSWORD '*********';
    
    Essa interface é usada para consultar a exibição v2. u2 pode consultar apenas os dados da exibição v2.
    1
    2
    3
    4
    5
    SELECT * FROM dbadmin.v2;
     id | province_id | user_info
    ----+-------------+-----------
      3 |           2 | Jack
    (1 row)
    

    Se u2 tentar consultar dados no modo de exibição v1, as seguintes informações de erro serão exibidas:

    1
    2
    SELECT * FROM dbadmin.v1;
    ERROR:  SELECT permission denied to user "u2" for relation "dbadmin.v1"
    

    O resultado mostra que o usuário u2 pode visualizar apenas os dados da província 2 (province_id=2).