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_nameFUNCTIONfunction_name[ ( [ [argmode] [argname]argtype[, ...] ] ) ] | LARGE OBJECTlarge_object_oid| [ 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 'label' 其中aggregate_signature是: * | [argmode] [argname]argtype[ , ... ] | [ [argmode] [argname]argtype[ , ... ] ] ORDER BY [argmode] [argname]argtype[ , ... ]
SECURITY LABEL对一个数据库对象应用一个安全
标签。可以把任意数量的安全标签(每个标签提供者对应一个)关联到一个给定
的数据库对象。标签提供者是使用函数register_label_provider
注册自己的可装载模块。
register_label_provider不是一个 SQL 函数,它只能在被载入
到后端的 C 代码中调用。
标签提供者决定一个给定标签是否合法并且它是否可以被分配该标签给一个给定 对象。一个给定标签的含义也同样由标签提供者判断。 LightDB没有对一个标签提供者是否必须或者如何解释 安全标签做出限定,它仅仅只是提供了一种机制来存储它们。实际上,这个功能是 为了允许与基于标签的强制访问控制(MAC)系统集成(例如 SELinux)。这类系统会基于对象标签而不是传统的自主 访问控制(DAC)概念(例如用户和组)做出所有访问控制决定。
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一个函数,存储过程或聚集函数参数的数据类型。在lightdb_oracle_type_date_to_oracle_date中介绍了date类型的使用。
large_object_oid大对象的 OID。
PROCEDURAL这是一个噪声词。
label
写成一个字符串文本的新安全标签。如果写成NULL表示删除
原有的安全标签。
在SQL标准中没有SECURITY LABEL命令。