HAS_TABLE_PRIVILEGE
Devuelve true
si el usuario tiene un privilegio especificado para la tabla especificada; de lo contrario, devuelve false
.
Sintaxis
nota
Esta es una función del nodo principal. Esta función devuelve un error si hace referencia a una tabla creada por usuarios, a una tabla de sistema STL o STV, o a una vista de sistema SVV o SVL. Para obtener más información acerca de los privilegios, consulte GRANT.
has_table_privilege( [ user, ] table, privilege)
Argumentos
- usuario
-
El nombre del usuario para verificar los privilegios de la tabla. El valor predeterminado es comprobar el usuario actual.
- tabla
-
Tabla asociada con el privilegio.
- privilege
-
Privilegio por comprobar. Los valores válidos son los siguientes:
-
SELECT
-
INSERT
-
UPDATE
-
DELETE
-
DROP
-
REFERENCES
-
Tipo de retorno
BOOLEAN
Ejemplos
La siguiente consulta descubre que el usuario GUEST no cuenta con el privilegio SELECT en la tabla LISTING.
select has_table_privilege('guest', 'listing', 'select');
has_table_privilege --------------------- false
La siguiente consulta enumera los privilegios de tabla, incluidos select, insert, update y delete, mediante la salida de las tablas de catálogo pg_tables y pg_user. Se trata solo de un ejemplo. Es posible que deba especificar un nombre de esquema y los nombres de las tablas de su base de datos. Para obtener más información, consulte Consulta de las tablas de catálogos.
SELECT tablename ,usename ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'select') AS sel ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'insert') AS ins ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'update') AS upd ,HAS_TABLE_PRIVILEGE(users.usename, tablename, 'delete') AS del FROM (SELECT * from pg_tables WHERE schemaname = 'public' and tablename in ('event','listing')) as tables ,(SELECT * FROM pg_user) AS users;
tablename | usename | sel | ins | upd | del ----------+-----------+--------+-------+-------+------- event | john | true | true | true | true event | sally | false | false | false | false event | elsa | false | false | false | false listing | john | true | true | true | true listing | sally | false | false | false | false listing | elsa | false | false | false | false
La consulta anterior también contiene una combinación cruzada. Para obtener más información, consulte Ejemplos de JOIN. Para consultar tablas que no están en el esquema public
, elimine la condición schemaname
de la cláusula WHERE y utilice el siguiente ejemplo antes de la consulta.
SET SEARCH_PATH to '
schema_name
';