SECURITY LABEL — 定义或更改应用在对象上的安全标签
SECURITY LABEL [ FORprovider] ON { TABLEobject_name| COLUMNtable_name.column_name| AGGREGATEaggregate_name(aggregate_signature) | DATABASEobject_name| DOMAINobject_name| EVENT TRIGGERobject_name| FOREIGN TABLEobject_name| FUNCTIONfunction_name[ ( [ [argmode] [argname]argtype[, ...] ] ) ] | LARGE OBJECTlarge_object_oid| MATERIALIZED VIEWobject_name| [ PROCEDURAL ] LANGUAGEobject_name| PROCEDUREprocedure_name[ ( [ [argmode] [argname]argtype[, ...] ] ) ] | PUBLICATIONobject_name| ROLEobject_name| ROUTINEroutine_name[ ( [ [argmode] [argname]argtype[, ...] ] ) ] | SCHEMAobject_name| SEQUENCEobject_name| SUBSCRIPTIONobject_name| TABLESPACEobject_name| TYPEobject_name| VIEWobject_name} IS {string_literal| NULL } whereaggregate_signatureis: * | [argmode] [argname]argtype[ , ... ] | [ [argmode] [argname]argtype[ , ... ] ] ORDER BY [argmode] [argname]argtype[ , ... ]
SECURITY LABEL 为一个数据库对象应用安全标签。任意数量的安全标签可以与一个给定的数据库对象相关联,每个标签提供者对应一个。标签提供者是一些可装载的模块,它们通过使用函数 register_label_provider 来注册自己。
register_label_provider 不是一个 SQL 函数;它只能从装载到后端中的 C 代码里调用。
标签提供者决定一个给定的标签是否有效,以及是否允许把该标签赋给给定的对象。给定标签的含义同样由标签提供者自行决定。PostgreSQL 对标签提供者是否以及如何解释安全标签没有任何限制;它只是提供了一种存储它们的机制。实际上,这个功能旨在允许与基于标签的强制访问控制(MAC)系统(例如 SELinux)集成。这类系统基于对象标签做出所有的访问控制决策,而不是基于用户和组等传统的自主访问控制(DAC)概念。
必须拥有该数据库对象才能使用 SECURITY LABEL。
object_nametable_name.column_nameaggregate_namefunction_nameprocedure_nameroutine_name要加标签的对象的名称。位于模式中的对象(表、函数等)的名称可以用模式限定。
provider要与这个标签相关联的提供者的名称。被指定名称的提供者必须已被装载,并且必须同意所提议的加标签操作。如果恰好只装载了一个提供者,为了简便可以省略提供者名称。
argmode 函数、过程或聚合参数的模式:IN、OUT、INOUT 或 VARIADIC。如果省略,默认为 IN。注意 SECURITY LABEL 实际上并不关注 OUT 参数,因为确定函数的身份只需要输入参数。因此,只列出 IN、INOUT 和 VARIADIC 参数就足够了。
argname 函数、过程或聚合参数的名称。注意 SECURITY LABEL 实际上并不关注参数的名称,因为确定函数的身份只需要参数的数据类型。
argtype函数、过程或聚合参数的数据类型。
large_object_oid大对象的 OID。
PROCEDURAL这是一个无实际意义的词。
string_literal安全标签的新设置,写成一个字符串字面值。
NULL 写 NULL 可删除该安全标签。
下面的例子展示了如何设置或更改一个表的安全标签:
SECURITY LABEL FOR selinux ON TABLE mytable IS 'system_u:object_r:sepgsql_table_t:s0';
删除该标签:
SECURITY LABEL FOR selinux ON TABLE mytable IS NULL;
SQL 标准中没有 SECURITY LABEL 命令。
src/test/modules/dummy_seclabel