has_database_privilege() 是一个系统函数,用于确定用户是否对指定的数据库拥有指定的权限。
has_database_privilege() 在 PostgreSQL 7.3 中被添加。
用法
has_database_privilege() 有两种形式:
has_database_privilege(database TEXT 或 OID, privilege TEXT)has_database_privilege(user TEXT 或 OID, database TEXT 或 OID, privilege TEXT)
可以查询以下权限
CREATECONNECTTEMP/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 文档: 访问权限查询函数
