PostgreSQL 中文参考文档
🌐 英文原版 官方 ↗

SECURITY LABEL

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

Synopsis

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 来注册自己。

Note

register_label_provider 不是一个 SQL 函数;它只能从装载到后端中的 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 命令。

另请参阅

sepgsql, src/test/modules/dummy_seclabel