# 安全标签

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 'label'

where aggregate_signature is:

* |
[ argmode ] [ argname ] argtype [ , ... ] |
[ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]

# 描述

安全标签将安全标签应用于数据库对象。任意数量的安全标签,每个标签提供者一个,可以与给定的数据库对象相关联。标签提供者是可加载的模块,它们使用函数注册自己register_label_provider.

# 笔记

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

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

# 参数

对象名
table_name.column_name
聚合名称
函数名
过程名称
例程名称

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

提供者

与此标签关联的提供者的名称。必须加载指定的提供程序,并且必须同意建议的标记操作。如果仅加载了一个提供程序,则为简洁起见,可以省略提供程序名称。

参数模式

函数、过程或聚合参数的模式:,出去,进出, 或者杂音.如果省略,则默认为.注意安全标签实际上并没有注意出去参数,因为只需要输入参数来确定函数的身份。所以列出来就足够了,进出, 和杂音论据。

参数名称

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

参数类型

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

large_object_oid

大对象的 OID。

程序

这是一个噪音词。

标签

新的安全标签,写成字符串文字;要么空值删除安全标签。

# 例子

以下示例显示了如何更改表的安全标签。

SECURITY LABEL FOR selinux ON TABLE mytable IS 'system_u:object_r:sepgsql_table_t:s0';

# 兼容性

没有安全标签SQL 标准中的命令。

# 也可以看看

sepgsql,src/test/modules/dummy_seclabel