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 |
ROLE object_name |
SCHEMA object_name |
SEQUENCE object_name |
TABLESPACE object_name |
TYPE object_name |
VIEW object_name
} IS 'label'
ここでaggregate_signatureは以下の通りです。
* |
[ argmode ] [ argname ] argtype [ , ... ] |
[ [ argmode ] [ argname ] argtype [ , ... ] ] ORDER BY [ argmode ] [ argname ] argtype [ , ... ]
SECURITY LABELはセキュリティラベルをデータベースオブジェクトに適用します。
ラベルプロバイダごとに1つの、任意の数のセキュリティラベルを指定したデータベースオブジェクトに関連付けることができます。
ラベルプロバイダは、register_label_provider
関数を使用して自身を登録する、ロード可能なモジュールです。
注意:
register_label_provider
はSQL関数ではありません。 バックエンドにロードされたCコードからのみ呼び出すことができます。
ラベルプロバイダは、指定されたラベルが有効かどうか、および指定されたオブジェクトにラベルを割り当てることが許されているかどうかを決定します。 また、ラベルプロバイダは指定されたラベルの意味の決定権を持ちます。 PostgreSQLは、ラベルプロバイダがセキュリティラベルを解釈するかしないか、どのように解釈するかに関して制限を持ちません。 単にこれらを格納するための機構を提供するだけです。 実際には、この機能はSE-Linuxなどのラベルベースの強制アクセス制御(MAC)システムと統合できるようにすることを意図したものです。 こうしたシステムでは、すべてのアクセス制御の決定は、ユーザとグループなどの伝統的な任意アクセス制御(DAC)という考えではなく、オブジェクトラベルに基づいて行われます。
ラベル付けされるオブジェクトの名前です。 テーブル、集約、ドメイン、外部テーブル、関数、シーケンス、型、ビューの名前はスキーマ修飾可能です。
このラベルが関連するプロバイダの名前です。 指定されたプロバイダはロードされていなければならず、かつ、提供されるラベル付け操作と一致しなければなりません。 プロバイダが1つだけロードされていた場合、プロバイダの名前を省略して簡略化することができます。
関数または集約の引数のモードです。 IN、OUT、INOUT、VARIADICのいずれかです。 省略された場合のデフォルトはINです。 関数の識別を決定するためには入力引数のみが必要ですので、実際にはSECURITY LABELはOUTをまったく考慮しないことに注意してください。 このためIN、INOUT、VARIADICのリストで十分です。
関数または集約の引数の名前です。 関数の識別を決定するためには引数のデータ型のみが必要ですので、実際にはSECURITY LABEL ON FUNCTIONは引数名をまったく考慮しないことに注意してください。
関数または集約の引数のデータ型です。
ラージオブジェクトのOIDです。
これは意味がない単語です。
文字列リテラルで記述された新しいセキュリティラベルです。 セキュリティラベルを削除するためにはNULLと記述します。