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

安全标签

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 函数;它只能从加载到后端的 C 代码中调用。

标签提供者确定给定标签是否有效,以及是否允许将该标签分配给给定对象。给定标签的含义同样由标签提供者自行决定。 PostgreSQL 对标签提供者必须如何解释安全标签没有施加任何限制;它仅仅提供了一种存储它们的机制。实际上,此功能旨在允许与基于标签的强制访问控制 (MAC) 系统(如 SELinux)集成。此类系统基于对象标签做出所有访问控制决策,而不是传统的自主访问控制 (DAC) 概念(如用户和组)。

参数

object_name
table_name.column_name
aggregate_name
function_name
procedure_name
routine_name

要标记的对象的名称。位于模式中的对象的名称(表、函数等)可以是模式限定的。

提供者

与此标签关联的提供者的名称。指定的提供者必须已加载,并且必须同意拟议的标记操作。如果恰好加载了一个提供者,则可以省略提供者名称以简化。

参数模式

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

参数名称

函数、过程或聚合参数的名称。请注意,SECURITY LABEL 实际上并不关注参数名称,因为只需要参数数据类型来确定函数的身份。

参数类型

函数、过程或聚合参数的数据类型。

大对象 OID

大对象的 OID。

过程化

这是一个无意义的词。

字符串字面量

安全标签的新设置,以字符串字面量形式编写。

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

另请参阅

sepgsqlsrc/test/modules/dummy_seclabel

提交更正

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