SECURITY LABEL [ FOR provider ] ON
{
TABLE object_name |
COLUMN table_name.column_name |
AGGREGATE aggregate_name ( aggregate_signature ) |
DATABASE object_name |
DOMAIN object_name |
EVENT TRIGGER object_name |
FOREIGN TABLE object_name
FUNCTION function_name ( [ [ argmode ] [ argname ] argtype [, ...] ] ) |
LARGE OBJECT large_object_oid |
MATERIALIZED VIEW object_name |
[ PROCEDURAL ] LANGUAGE object_name |
ROLE object_name |
SCHEMA object_name |
SEQUENCE object_name |
TABLESPACE object_name |
TYPE object_name |
VIEW object_name
} IS 'label'
where aggregate_signature is:
* |
[ argmode ] [ argname ] argtype [ , ... ] |
[ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]
SECURITY LABEL为一个数据库对象申请一个安全标签。
每一个标签提供程序的任意数量的安全标签都可以与一个给定的数据库对象关联。
标签提供者是可加载模块,通过使用函数register_label_provider
记录他们自己。
注意:
register_label_provider
不是SQL函数;只能从C代码存入后端调用。
标签提供者决定一个给定的标签是否有效,并且是否允许将那个标签分配给一个给定的对象。 给定标签的含义和标签提供者的描述相同。PostgreSQL 不限制标签提供者是否或如何解释安全标签;只是提供过一个存储它们的机制。实际上, 这个便利是为了允许集成基于标签的强制访问控制(MAC)系统,如SE-Linux。 这样的系统使得访问控制决策基于对象标签,而不是传统的自主访问控制(DAC)概念,如用户和组。
有标签的对象的名字。可模式修饰的表、集群、域、外部表、函数、序列、类型和视图的名字。
与这个标签相关的提供者的名字。被指名的提供者必须被加载并且必须同意提出的标签操作。 如果只加载了一个提供者,那么为了简洁会省略提供者的名字。
函数或聚合参数的模式:IN, OUT, INOUT, 或 VARIADIC。 如果省略,缺省是IN。请注意,SECURITY LABEL 并不实际注意OUT参数,因为只需要输入参数判断函数的安全。 所以列出IN, INOUT, 和 VARIADIC就足够了。
函数或聚合参数的名字。请注意,SECURITY LABEL 并不实际注意参数名字,因为只需要参数数据类型判断函数的身份。
函数或聚合参数的数据类型。
大对象的OID。
这是一个噪声字。
新的安全标签,写作一个字符串;或NULL以删除安全标签。