ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
# SECURITY LABEL ## Name SECURITY LABEL -- 定义或改变一个应用于对象的安全标签 ## Synopsis ``` SECURITY LABEL [ FOR _provider_ ] ON { TABLE _object_name_ | COLUMN _table_name_._column_name_ | AGGREGATE _agg_name_ (_agg_type_ [, ...] ) | 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_' ``` ## 描述 `SECURITY LABEL`为一个数据库对象申请一个安全标签。 每一个标签提供程序的任意数量的安全标签都可以与一个给定的数据库对象关联。 标签提供者是可加载模块,通过使用函数`register_label_provider`记录他们自己。 > **Note:** `register_label_provider`不是SQL函数;只能从C代码存入后端调用。 标签提供者决定一个给定的标签是否有效,并且是否允许将那个标签分配给一个给定的对象。 给定标签的含义和标签提供者的描述相同。PostgreSQL 不限制标签提供者是否或如何解释安全标签;只是提供过一个存储它们的机制。实际上, 这个便利是为了允许集成基于标签的强制访问控制(MAC)系统,如SE-Linux。 这样的系统使得访问控制决策基于对象标签,而不是传统的自主访问控制(DAC)概念,如用户和组。 ## 参数 `_object_name_``_table_name.column_name_` `_agg_name_` `_function_name_` 有标签的对象的名字。可模式修饰的表、集群、域、外部表、函数、序列、类型和视图的名字。 `_provider_` 与这个标签相关的提供者的名字。被指名的提供者必须被加载并且必须同意提出的标签操作。 如果只加载了一个提供者,那么为了简洁会省略提供者的名字。 `_arg_type_` 聚集函数操作的输入数据类型。要引用一个零参数的聚集函数,在输入数据类型的列表位置写`*`。 `_argmode_` 函数参数的模式:`IN`, `OUT`, `INOUT`, 或 `VARIADIC`。 如果省略,缺省是`IN`。请注意,`SECURITY LABEL ON FUNCTION` 并不实际注意`OUT`参数,因为只需要输入参数判断函数的安全。 所以列出`IN`, `INOUT`, 和 `VARIADIC`就足够了。 `_argname_` 函数参数的名字。请注意,`SECURITY LABEL ON FUNCTION` 并不实际注意参数名字,因为只需要参数数据类型判断函数的身份。 `_argtype_` 如果有,是函数参数的数据类型(可以有模式修饰)。 `_large_object_oid_` 大对象的OID。 `PROCEDURAL` 这是一个噪声字。 `_label_` 新的安全标签,写作一个字符串;或`NULL`以删除安全标签。 ## 例子 下列例子显示了如何改变一个表的安全标签。 ``` SECURITY LABEL FOR selinux ON TABLE mytable IS 'system_u:object_r:sepgsql_table_t:s0'; ``` ## 兼容性 SQL标准中没有`SECURITY LABEL`命令。 ## 又见 [sepgsql](#calibre_link-398), [dummy_seclabel](#calibre_link-378)