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)
可以查询以下权限
SELECT
INSERT
UPDATE
DELETE
REFERENCES
TRIGGER
TRUNCATE
更改历史记录
- PostgreSQL 8.4
- 能够接受以逗号分隔的权限类型列表(提交7449427a)
- PostgreSQL 7.2
- 添加(提交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 月发表的博文