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/ Controle de acesso baseado em função (RBAC)
Atualizado em 2024-05-09 GMT+08:00

Controle de acesso baseado em função (RBAC)

O que é o RBAC?

  • O controle de acesso baseado em função (RBAC) é conceder permissões a funções e permitir que os usuários obtenham permissões associando-se a funções.
  • Uma função é um conjunto de permissões.
  • O RBAC simplifica muito o gerenciamento de permissões.

O que é o modelo RBAC?

Atribua permissões apropriadas às funções.

Associe usuários às funções.

Cenários

Suponha que existam dois esquemas, s1 e s2.

Existem dois grupos de usuários:

  • Os usuários u1 e u2 podem consultar todas as tabelas em s1 e atualizar todas as tabelas em s2.
  • Os usuários u3 e u4 podem consultar todas as tabelas em s2 e atualizar todas as tabelas em s1.

Procedimento para conceder permissões

  1. Conecte-se ao banco de dados do DWS como usuário dbadmin.
  2. Execute as instruções a seguir para criar os esquemas s1 e s2 e os usuários de u1 a u4:

    Substitua {password} pela senha real.

    1
    2
    3
    4
    5
    6
    CREATE SCHEMA s1;
    CREATE SCHEMA s2;
    CREATE USER u1 PASSWORD '{password}';
    CREATE USER u2 PASSWORD '{password}';
    CREATE USER u3 PASSWORD '{password}';
    CREATE USER u4 PASSWORD '{password}';
    

  3. Copie e execute as seguintes instruções para criar as tabelas s1.t1 e s2.t1:

    1
    2
    CREATE TABLE s1.t1 (c1 int, c2 int);
    CREATE TABLE s2.t1 (c1 int, c2 int);
    

  4. Execute a instrução a seguir para inserir dados nas tabelas:

    1
    2
    INSERT INTO s1.t1 VALUES (1,2);
    INSERT INTO s2.t1 VALUES (1,2);
    

  5. Execute as seguintes instruções para criar quatro funções, cada uma com a permissão de consulta ou atualização da tabela s1 ou s2:

    1
    2
    3
    4
    CREATE ROLE rs1_select PASSWORD disable;  -- Permission to query s1
    CREATE ROLE rs1_update PASSWORD disable; -- Permission to update s1
    CREATE ROLE rs2_select PASSWORD disable; -- Permission to query s2
    CREATE ROLE rs2_update PASSWORD disable; -- Permission to update s2
    

  6. Execute as seguintes instruções para conceder as permissões de acesso dos esquemas s1 e s2 às funções:

    1
    GRANT USAGE ON SCHEMA s1, s2 TO rs1_select, rs1_update,rs2_select, rs2_update;
    

  7. Execute as seguintes instruções para conceder permissões específicas às funções:

    1
    2
    3
    4
    GRANT SELECT ON ALL TABLES IN SCHEMA s1 TO rs1_select; -- Grant the query permission on all the tables in s1 to the rs1_select role.
    GRANT SELECT,UPDATE ON ALL TABLES IN SCHEMA s1 TO rs1_update;  -- Grant the query and update permissions on all the tables in s1 to the rs1_update role.
    GRANT SELECT ON ALL TABLES IN SCHEMA s2 TO rs2_select;  -- Grant the query permission on all the tables in s2 to the rs2_select role.
    GRANT SELECT,UPDATE ON ALL TABLES IN SCHEMA s2 TO rs2_update;  -- Grant the query and update permissions on all the tables in s2 to the rs2_update role.
    

  8. Execute as seguintes instruções para conceder atribuições aos usuários:

    1
    2
    GRANT rs1_select, rs2_update TO u1, u2;  -- Users u1 and u2 have the permissions to query s1 and update s2.
    GRANT rs2_select, rs1_update TO u3, u4;  -- Users u3 and u4 have the permissions to query s2 and update s1.
    

  9. Execute a instrução a seguir para exibir a função vinculada a um usuário específico:

    1
    \du u1;
    

  10. Comece outra sessão. Conecte-se ao banco de dados como o usuário u1.

    1
    gsql -d gaussdb -h GaussDB(DWS)_EIP -U u1 -p 8000 -r -W {password};
    

  11. Execute as seguintes instruções na nova sessão para verificar se o usuário u1 pode consultar, mas não pode atualizar s1.t1:

    1
    2
    SELECT * FROM s1.t1;
    UPDATE s1.t1 SET c2 = 3 WHERE c1 = 1;
    

  12. Execute as seguintes instruções na nova sessão para verificar se o usuário u1 pode atualizar s2.t1:

    1
    2
    SELECT * FROM s2.t1;
    UPDATE s2.t1 SET c2 = 3 WHERE c1 = 1;