has_table_privilege() 是一个系统函数,用于确定用户是否对指定的表拥有指定的 特权。
has_table_privilege() 函数添加于 PostgreSQL 7.2。
用法
has_table_privilege() 函数有两种形式:
has_table_privilege(table TEXT 或 OID, privilege TEXT)has_table_privilege(user TEXT 或 OID, table TEXT 或 OID, privilege TEXT)
可以查询以下权限
SELECTINSERTUPDATEDELETEREFERENCESTRIGGERTRUNCATE
变更历史
- PostgreSQL 8.4
- 能够接受逗号分隔的权限类型列表(提交 7449427a)
- PostgreSQL 7.2
- 添加于 (commit c9499e68)
示例
确定当前用户是否对指定表拥有 UPDATE 特权
postgres=# SELECT has_table_privilege('foo', 'UPDATE');
has_table_privilege
---------------------
t
(1 row)
确定指定用户是否对指定表拥有 SELECT 特权
postgres=# SELECT has_table_privilege('someuser', 'foo', 'SELECT');
has_table_privilege
---------------------
f
(1 row)
查询多个权限
postgres=# SELECT has_table_privilege('foo', 'INSERT, DELETE, UPDATE WITH GRANT OPTION');
has_table_privilege
---------------------
t
(1 row)
尝试确定此对象类型不受识别的权限
postgres=# SELECT has_table_privilege('foo', 'CREATE');
ERROR: unrecognized privilege type: "CREATE"
尝试确定不存在的表的权限
postgres=# SELECT has_table_privilege('bar', 'DELETE');
ERROR: relation "bar" does not exist
参考资料
- PostgreSQL 文档: 访问权限查询函数
有用链接
- 如何查看用户的继承权限 - Richard Yen 于 2021 年 8 月的博客文章
