¿Cómo puedo ver los permisos de tabla de un usuario?
Escenario 1: Ejecute el comando information_schema.table_privileges a view the table permissions of a user. Por ejemplo:
1 | SELECT * FROM information_schema.table_privileges WHERE GRANTEE='user_name'; |

| Columna | Tipo de datos | Descripción |
|---|---|---|
| grantor | sql_identifier | Concedidor de permisos |
| grantee | sql_identifier | Concesionario del permiso |
| table_catalog | sql_identifier | Base de datos donde se encuentra la tabla |
| table_schema | sql_identifier | Esquema donde se encuentra la tabla |
| table_name | sql_identifier | Nombre de la tabla |
| privilege_type | character_data | Tipo de permiso concedido. El valor puede ser SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, ANALYZE, VACUUM, ALTER, DROP o TRIGGER. |
| is_grantable | yes_or_no | Indica si el permiso se puede conceder a otros usuarios. YES indica que el permiso se puede conceder a otros usuarios, y NO indica que el permiso no se puede conceder a otros usuarios. |
| with_hierarchy | yes_or_no | Indica si se permiten operaciones específicas heredadas en el nivel de tabla. Si la operación específica es SELECT, se muestra YES. De lo contrario, se muestra NO. |
En la figura anterior, el usuario u2 tiene todos los permisos de la tabla t2 en el esquema u2 y el permiso SELECT de la tabla t1 en el esquema u1.
information_schema.table_privileges solo puede consultar los permisos concedidos directamente al usuario, la función has_table_privilege() puede consultar tanto los permisos concedidos directamente como los permisos indirectos (obtenidos por el rol de GRANT al usuario). Por ejemplo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | CREATE TABLE t1 (c1 int); CREATE USER u1 password '********'; CREATE USER u2 password '********'; GRANT dbadmin to u2; //Indirectly grant permissions through roles. GRANT SELECT on t1 to u1; // Directly grant the permission. SET ROLE u1 password '********'; SELECT * FROM public.t1; // Directly grant the permission to access the table. c1 ---- (0 rows) SET ROLE u2 password '********'; SELECT * FROM public.t1; // Indirectly grant the permission to access the table. c1 ---- (0 rows) RESET role; //Switch back to dbadmin. SELECT * FROM information_schema.table_privileges WHERE table_name = 't1'; // Can only view direct grants. grantor | grantee | table_catalog | table_schema | table_name | privilege_type | is_grantable | with_hierarchy ---------+------------+---------------+--------------+------------+----------------+--------------+---------------- dbadmin | u1 | gaussdb | public | t1 | SELECT | NO | YES (1 rows) SELECT has_table_privilege('u2', 'public.t1', 'select'); // Can view both direct and indirect grants. has_table_privilege --------------------- t (1 row) |
Escenario 2: Para check whether a user has permissions on a table, realice los siguientes pasos: