HAS_TABLE_PRIVILEGE
如果用户对指定的表具有指定特权,则返回 true
,否则返回 false
。
语法
注意
这是领导节点函数。如果此函数引用了用户创建的表、STL/STV 系统表或 SVV/SVL 系统视图,它将返回错误。有关权限的更多信息,请参阅 GRANT。
has_table_privilege( [ user, ] table, privilege)
参数
- 用户
-
要接受表特权检查的用户的名称。默认为检查当前用户。
- table
-
与特权关联的表。
- privilege
-
要检查的特权。有效值如下所示:
-
SELECT
-
INSERT
-
UPDATE
-
删除
-
DROP
-
REFERENCES
-
返回类型
BOOLEAN
示例
以下查询发现 GUEST 用户对 LISTING 表没有 SELECT 特权。
select has_table_privilege('guest', 'listing', 'select');
has_table_privilege --------------------- false
以下查询使用 pg_tables 和 pg_user 目录表的输出来列出表权限,包括选择、插入、更新和删除。这只是一个示例。您可能需要指定数据库中的架构名称和表名。有关更多信息,请参阅 查询目录表。
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
前一个查询还包含交叉联接。有关更多信息,请参阅 JOIN 示例。要查询不在 public
架构中的表,请从 WHERE 子句中删除 schemaname
条件,并在查询之前使用以下示例。
SET SEARCH_PATH to '
schema_name
';