has_table_privilege()
是一个系统函数,用于确定用户是否对指定的表具有指定的权限。
has_table_privilege()
在 PostgreSQL 7.2 中添加。
用法
has_table_privilege()
有两种形式
has_table_privilege(表名 TEXT 或 OID, 权限 TEXT)
has_table_privilege(用户名 TEXT 或 OID, 表名 TEXT 或 OID, 权限 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 月的博文