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