↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

百科 / SQL 命令 / 角色与权限

SQL COMMAND · 角色与权限

SECURITY LABEL

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

define or change a security label applied to an object

SECURITY角色与权限引入 9.1现存至 20 devel6 次语法变更

动词
SECURITY
对象
LABEL
引入版本
9.1
状态
现存
语法变更次数
6
手册小节数
5

本站手册 · 18官方文档 ↗

版本轨迹

相对 PostgreSQL 17 无变化。

语法铁道图 PostgreSQL 18

沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。

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
aggregate_signature
* argmode argname argtype , argmode argname argtype , ORDER BY argmode argname argtype ,

语法概要

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 }

其中 aggregate_signature 是:

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

PostgreSQL 18 手册 · 查看完整参考页

描述

SECURITY LABEL 为数据库对象设置安全标签。一个给定的数据库对象可以关联任意数量的安全标签,每个标签提供者对应一个。标签提供者是使用函数 register_label_provider 注册自身的可加载模块。

注意

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

语法演化

相邻大版本之间的差异,新的在前。版本号链接到对应快照。

  1. PostgreSQL 14← 13正文更新

    正文更新
  2. PostgreSQL 13← 12正文更新

    正文更新
  3. PostgreSQL 12← 11语法变化

    + FOREIGN TABLE object_name |
  4. PostgreSQL 11← 10语法变化

    + PROCEDURE procedure_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |+ ROLE object_name |+ ROUTINE routine_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |+ } IS { string_literal | NULL }− } IS 'label'正文更新
  5. PostgreSQL 10← 9.6语法变化

    + FUNCTION function_name [ ( [ [ argmode ] [ argname ] argtype [, ...] ] ) ] |+ PUBLICATION object_name |+ SEQUENCE object_name |+ SUBSCRIPTION object_name |正文更新
  6. PostgreSQL 9.5← 9.4正文更新

    正文更新
  7. PostgreSQL 9.4← 9.3语法变化

    + AGGREGATE aggregate_name ( aggregate_signature ) |+ * |+ [ argmode ] [ argname ] argtype [ , ... ] |+ [ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]− AGGREGATE agg_name (agg_type [, ...] ) |正文更新
  8. PostgreSQL 9.3← 9.2语法变化

    + EVENT TRIGGER object_name |+ MATERIALIZED VIEW object_name |
  9. PostgreSQL 9.2← 9.1语法变化

    + AGGREGATE agg_name (agg_type [, ...] ) |+ DATABASE object_name |+ ROLE object_name |+ SEQUENCE object_name |+ TABLESPACE object_name |
  10. PostgreSQL 9.1← 9.0新增此命令

同组命令

命令动词对象版本变动最近变更
ROLES & PRIVILEGES角色与权限20 条↑
GRANTGRANT— 1717 次
定义访问权限现存
REVOKEREVOKE— 1719 次
撤销访问权限现存
ALTER DEFAULT PRIVILEGESALTERDEFAULT PRIVILEGES 186 次
定义默认访问权限现存
CREATE GROUPCREATEGROUP 198 次
定义一个新的数据库角色现存
ALTER GROUPALTERGROUP 144 次
更改角色名称或成员资格现存
DROP GROUPDROPGROUP 8.22 次
移除一个数据库角色现存
SECURITY LABELSECURITYLABEL 126 次
定义或更改应用于对象的安全标签现存
DROP OWNEDDROPOWNED 142 次
移除一个数据库角色所拥有的数据库对象现存
REASSIGN OWNEDREASSIGNOWNED 142 次
更改一个数据库角色所拥有的数据库对象的所有权现存
CREATE POLICYCREATEPOLICY 142 次
为一个表定义一条新的行级安全策略现存
ALTER POLICYALTERPOLICY 141 次
更改一条行级安全策略的定义现存
DROP POLICYDROPPOLICY 9.61 次
从一个表中移除一条行级安全策略现存
CREATE ROLECREATEROLE 177 次
定义一个新的数据库角色现存
ALTER ROLEALTERROLE 1410 次
更改数据库角色现存
DROP ROLEDROPROLE 8.21 次
移除一个数据库角色现存
SET ROLESETROLE 9.01 次
设置当前会话的当前用户标识符现存
SET SESSION AUTHORIZATIONSETSESSION AUTHORIZATION 9.02 次
设置当前会话的会话用户标识符和当前用户标识符现存
CREATE USERCREATEUSER 1912 次
定义一个新的数据库角色现存
ALTER USERALTERUSER 1417 次
更改数据库角色现存
DROP USERDROPUSER 8.23 次
移除一个数据库角色现存