HAS_TABLE_PRIVILEGE
Retorna true
se o usuário tiver o privilégio especificado para a tabela especificada; caso contrário, retorna false
.
Sintaxe
nota
Essa é uma função do nó de liderança. Essa função retorna um erro se fizer referência a uma tabela criada por usuário, a uma tabela de sistema STL ou STV ou a uma exibição de sistema SVV ou SVL. Para obter mais informações sobre privilégios, consulte GRANT.
has_table_privilege( [ user, ] table, privilege)
Argumentos
- usuário
-
O nome do usuário para verificar os privilégios da tabela. O padrão é verificar o usuário atual.
- tabela
-
Tabela associada ao privilégio.
- privilege
-
Privilégio a verificar. Os valores válidos são os seguintes:
-
SELECT
-
INSERT
-
UPDATE
-
DELETE
-
DROP
-
REFERENCES
-
Tipo de retorno
BOOLEAN
Exemplos
A consulta a seguir descobre que o usuário GUEST não tem privilégio SELECT na tabela LISTING.
select has_table_privilege('guest', 'listing', 'select');
has_table_privilege
---------------------
false
A consulta a seguir lista os privilégios da tabela, incluindo seleção, inserção, atualização e exclusão, usando a saída das tabelas de catálogo pg_tables e pg_user. Isso é apenas um exemplo. Talvez seja necessário especificar um nome de esquema e nomes de tabelas do seu banco de dados. Para ter mais informações, consulte Consultar as tabelas de catálogo.
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
A consulta anterior também contém uma junção cruzada. Para ter mais informações, consulte Exemplos de JOIN. Para consultar tabelas que não estão no esquema public
, remova a condição schemaname
da cláusula WHERE e use o exemplo a seguir antes da consulta.
SET SEARCH_PATH to 'schema_name
';