has_database_privilege()
是一个系统函数,用于确定用户是否对指定的数据库拥有指定的权限。
has_database_privilege()
在PostgreSQL 7.3 中添加。
用法
has_database_privilege()
有两种形式
has_database_privilege(数据库 TEXT 或 OID, 权限 TEXT)
has_database_privilege(用户 TEXT 或 OID, 数据库 TEXT 或 OID, 权限 TEXT)
可以查询以下权限
CREATE
CONNECT
TEMP
/TEMPORARY
如果以逗号分隔的列表形式提供,则可以查询多个权限。请注意,如果一个或多个权限可用,则该函数将始终返回 't
' (TRUE
)。
更改历史记录
- PostgreSQL 8.4
- 能够接受逗号分隔的权限类型列表 (提交 7449427a)
- PostgreSQL 7.3
- 添加 (提交 4ab8e690)
示例
确定当前用户是否对指定的数据库具有 CONNECT
权限
postgres=# SELECT has_database_privilege('postgres', 'CONNECT'); has_database_privilege ------------------------ t (1 row)
确定指定的用户是否对指定的表具有 CREATE
权限
postgres=# SELECT has_database_privilege('someuser', 'postgres', 'CREATE'); has_database_privilege ------------------------ f (1 row)
查询多个权限
postgres=# SELECT has_database_privilege('someuser', 'postgres', 'CONNECT, CREATE'); has_database_privilege ------------------------ t (1 row)
请注意,即使 CREATE
权限不可用,该函数也会返回 't
' (TRUE
)。
尝试为这种对象类型确定未识别的权限
postgres=# SELECT has_database_privilege('postgres', 'DELETE'); ERROR: unrecognized privilege type: "DELETE"
尝试为不存在的数据库确定权限
postgres=# SELECT has_database_privilege('somedbname', 'CONNECT'); ERROR: database "somedbname" does not exist
参考
- PostgreSQL 文档: 访问权限查询函数