Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2026-09-29 GMT+08:00

Control de acceso basado en roles (RBAC)

¿Qué es RBAC?

  • El control de acceso basado en roles (RBAC) consiste en otorgar permisos a los roles y permitir que los usuarios obtengan permisos asociándose con los roles.
  • Un rol es un conjunto de permisos.
  • RBAC simplifica en gran medida la gestión de permisos.

¿Qué es el modelo RBAC?

Asignar permisos adecuados a los roles.

Asociar usuarios con los roles.

Escenarios

Supongamos que hay dos esquemas, s1 y s2.

Hay dos grupos de usuarios:

  • Los usuarios u1 y u2 pueden consultar todas las tablas de s1 y actualizar todas las tablas de s2.
  • Los usuarios u3 y u4 pueden consultar todas las tablas de s2 y actualizar todas las tablas de s1.

Otorgamiento de permisos

  1. Conéctese a la base de datos DWS como usuario dbadmin.
  2. Ejecute las siguientes instrucciones para crear los esquemas s1 y s2 y los usuarios u1 a u4:

    Reemplace {password} con la contraseña 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 y ejecute las siguientes instrucciones para crear las tablas s1.t1 y s2.t1:

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

  4. Ejecute la siguiente sentencia para insertar datos en las tablas:

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

  5. Ejecute las siguientes sentencias para crear cuatro roles, cada uno con el permiso de consulta o actualización de la tabla s1 o 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. Ejecute las siguientes sentencias para otorgar los permisos de acceso de los esquemas s1 y s2 a los roles:

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

  7. Ejecute las siguientes sentencias para otorgar permisos específicos a los roles:

    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. Ejecute las siguientes sentencias para otorgar roles a los usuarios:

    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. Ejecute la siguiente sentencia para ver el rol vinculado a un usuario específico:

    1
    \du u1;
    

  10. Inicie otra sesión. Conéctese a la base de datos como usuario u1.

    1
    gsql -d gaussdb -h DWS_EIP -U u1 -p 8000 -r -W {password};
    

  11. Ejecute las siguientes sentencias en la nueva sesión para verificar que el usuario u1 puede consultar, pero no puede actualizar s1.t1:

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

  12. Ejecute las siguientes sentencias en la nueva sesión para verificar que el usuario u1 puede actualizar s2.t1:

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