Postgresql 中文操作指南

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 [ , ... ]

Description

SECURITY LABEL 将一个安全标签应用于数据库对象。可以将任意数量的安全标签(每个标签提供程序一个)与一个给定的数据库对象关联起来。标签提供程序是可以加载的模块,它们使用函数 register_label_provider 来注册自身。

Note

register_label_provider 不是一个 SQL 函数;它只能从加载到后端中的 C 代码中调用。

标签提供者用于确定给定标签是否有效且能否将该标签分配给指定对象。给定标签的含义同样由标签提供者决定。PostgreSQL 不会对标签提供者的安全标签的解释方式施加任何限制,它仅仅提供存储这些标签的机制。在实践中,这个功能的目的是允许与基于标签的强制访问控制 (MAC) 系统(如 SELinux)集成。此类系统根据对象标签而非传统自由访问控制 (DAC) 概念(如用户和组)来做出所有访问控制决定。

Parameters

  • object_nametable_name.column_nameaggregate_namefunction_nameprocedure_name__routine_name

    • 要标记对象的名称。驻留在架构(表、函数等)中的对象的名称可以是架构限定的。

  • provider

    • 要与此标签关联的提供者的名称。必须加载指定提供者,且该提供者必须同意提议的标记操作。如果只加载了一个提供者,为了简洁,可以省略提供者名称。

  • argmode

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

  • argname

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

  • argtype

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

  • large_object_oid

    • 大对象的 OID。

  • PROCEDURAL

    • 这是一个干扰词。

  • string_literal

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

  • NULL

    • 写入 NULL 以删除安全标签。

Examples

以下示例显示了如何设置或更改表的安全标签:

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;

Compatibility

SQL 标准中没有 SECURITY LABEL 命令。

See Also

sepgsqlsrc/test/modules/dummy_seclabel