2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1

SECURITY LABEL

SECURITY LABEL — 定义或更改应用于对象的安全标签

概要

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 |
  PROCEDURE procedure_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |
  PUBLICATION object_name |
  ROLE object_name |
  ROUTINE routine_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |
  SCHEMA object_name |
  SEQUENCE object_name |
  SUBSCRIPTION object_name |
  TABLESPACE object_name |
  TYPE object_name |
  VIEW object_name
} IS { string_literal | NULL }

where aggregate_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

函数、过程或聚合参数的模式:INOUTINOUTVARIADIC。如果省略,默认为 IN。请注意,SECURITY LABEL 实际上不关心 OUT 参数,因为仅输入参数就足以确定函数的身份。因此,列出 ININOUTVARIADIC 参数就足够了。

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 命令。

另请参阅

sepgsql, src/test/modules/dummy_seclabel

提交更正

如果您在文档中看到任何不正确、与您对特定功能的体验不符或需要进一步说明的内容,请使用此表格报告文档问题。