2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1

SECURITY LABEL

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 函式;它只能從載入到後端(backend)的 C 程式碼中呼叫。

標籤提供者決定給定的標籤是否有效,以及是否允許將該標籤分配給給定的物件。給定的標籤的含義同樣由標籤提供者自行決定。PostgreSQL 不對標籤提供者如何解釋安全標籤施加任何限制;它僅提供一個儲存它們的機制。實際上,此功能旨在允許與基於標籤的強制訪問控制(MAC)系統(如 SELinux)整合。此類系統基於物件標籤而不是傳統的自主訪問控制(DAC)概念(如使用者和組)做出所有訪問控制決策。

要使用 SECURITY LABEL,您必須擁有該資料庫物件的所有權。

引數

object_name
table_name.column_name
aggregate_name
function_name
procedure_name
routine_name

要標記的物件名稱。位於模式中的物件(表、函式等)的名稱可以被模式限定。

provider

要與之關聯的標籤的提供者名稱。指定的提供者必須已載入,並且必須同意提出的標籤操作。如果只加載了一個提供者,則可以省略提供者名稱以簡化輸入。

argmode

函式、過程或聚合引數的模式:INOUTINOUTVARIADIC。如果省略,預設為 IN。請注意,SECURITY LABEL 實際上不關心 OUT 引數,因為僅輸入引數就足以確定函式的身份。因此,列出 ININOUTVARIADIC 引數就足夠了。

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

提交更正

如果您在文件中看到任何不正確、與您對特定功能的體驗不符或需要進一步說明的內容,請使用此表格報告文件問題。