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_signature
is: * | [argmode
] [argname
]argtype
[ , ... ] | [ [argmode
] [argname
]argtype
[ , ... ] ] ORDER BY [argmode
] [argname
]argtype
[ , ... ]
SECURITY LABEL
将安全标签应用于数据库对象。一个给定的数据库对象可以关联任意数量的安全标签,每个标签提供者一个。标签提供者是可通过加载注册自己的可加载模块,这些模块通过使用 register_label_provider
函数进行注册。
register_label_provider
不是一个 SQL 函数;它只能从加载到后端(backend)的 C 代码中调用。
标签提供者决定给定的标签是否有效,以及是否允许将该标签分配给给定的对象。给定的标签的含义同样由标签提供者自行决定。PostgreSQL 不对标签提供者如何解释安全标签施加任何限制;它仅提供一个存储它们的机制。实际上,此功能旨在允许与基于标签的强制访问控制(MAC)系统(如 SELinux)集成。此类系统基于对象标签而不是传统的自主访问控制(DAC)概念(如用户和组)做出所有访问控制决策。
要使用 SECURITY LABEL
,您必须拥有该数据库对象的所有权。
object_name
table_name.column_name
aggregate_name
function_name
procedure_name
routine_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
如果您在文档中看到任何不正确、与您对特定功能的体验不符或需要进一步说明的内容,请使用此表格报告文档问题。