has_column_privilege()

确定用户是否对表列具有权限的函数

has_column_privilege() 是一个系统函数,用于确定用户是否对表的特定列具有权限

has_column_privilege() 添加于PostgreSQL 8.4

用法

has_column_privilege() 有两种形式

  • has_column_privilege(表名 TEXT OID, 列名 TEXT SMALLINT, 权限 TEXT)
  • has_column_privilege(用户名 TEXT OID, 表名 TEXT OID, 列名 TEXT SMALLINT, 权限 TEXT)

列可以通过名称或其编号来指定,该编号对应于pg_attribute中此列的attnum列值(请注意,此编号可能与列在表中的当前明显位置不同,因此对于临时查询的实用性有限)。

可以查询以下权限:

  • SELECT
  • INSERT
  • UPDATE
  • REFERENCES

请注意,当以OID提供表,或以SMALLINT提供列时,如果找不到匹配的对象,则函数将返回NULL。如果表名和列名作为字符串提供,则如果找不到匹配的对象,则会引发错误。

更改历史记录

示例

确定当前用户是否对指定表中的特定列具有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)

分类

系统函数用户和角色

另请参阅

has_any_column_privilege()

反馈

提交任何关于“has_column_privilege()”的评论、建议或更正 此处