has_column_privilege() 是一个系统函数,用于确定用户是否对表的特定列拥有 权限。
has_column_privilege() 添加于 PostgreSQL 8.4。
用法
has_column_privilege() 有两种形式
has_column_privilege(table TEXT 或 OID, column TEXT 或 SMALLINT, privilege TEXT)has_column_privilege(user TEXT 或 OID, table TEXT 或 OID, column TEXT 或 SMALLINT, privilege TEXT)
列可以按名称或编号指定,该编号对应于该列 pg_attribute 中的 attnum 列值(请注意,此编号可能与列在表中当前的显式位置不同,因此对于临时查询的实际用途有限)。
可以查询以下权限
SELECTINSERTUPDATEREFERENCES
注意,当提供表的 OID 或列的 SMALLINT 时,如果找不到匹配的对象,函数将返回 NULL。如果表和列名称以字符串形式提供,并且找不到匹配的对象,则会引发错误。
变更历史
- PostgreSQL 8.4
- 添加(提交 7449427a)
示例
确定当前用户是否对指定表中的特定列拥有 SELECT 权限
postgres=# SELECT has_column_privilege('foo', 'id', 'SELECT');
has_column_privilege
----------------------
t
(1 row)
同上,但指定列编号
postgres=# SELECT has_column_privilege('foo', 1::SMALLINT, 'SELECT');
has_column_privilege
----------------------
t
(1 row)
确定指定用户是否对指定表中的特定列拥有 UPDATE 权限
postgres=# SELECT has_column_privilege('someuser', 'foo', 'id', 'UPDATE');
has_column_privilege
----------------------
f
(1 row)
尝试确定此对象类型不受识别的权限
postgres=# SELECT has_column_privilege('foo', 'id', 'DELETE');
ERROR: unrecognized privilege type: "DELETE"
尝试确定不存在的表的权限
postgres=# SELECT has_column_privilege('bar', 'id', 'SELECT');
ERROR: relation "bar" does not exist
尝试确定不存在的列的权限
postgres=# SELECT has_column_privilege('foo', 'bar', 'SELECT');
ERROR: column "bar" of relation "foo" does not exist
尝试确定不存在的表 OID 的权限
postgres=# SELECT has_column_privilege(9999, 'id', 'SELECT'); has_column_privilege ---------------------- (1 row)
参考资料
- PostgreSQL 文档: 访问权限查询函数
