SECURITY LABEL — オブジェクトに適用するセキュリティラベルを定義または変更する
SECURITY LABEL [ FORprovider] ON { TABLEobject_name| COLUMNtable_name.column_name| AGGREGATEaggregate_name(aggregate_signature) | DATABASEobject_name| DOMAINobject_name| EVENT TRIGGERobject_name| FOREIGN TABLEobject_nameFUNCTIONfunction_name[ ( [ [argmode] [argname]argtype[, ...] ] ) ] | LARGE OBJECTlarge_object_oid| MATERIALIZED VIEWobject_name| [ PROCEDURAL ] LANGUAGEobject_name| PROCEDUREprocedure_name[ ( [ [argmode] [argname]argtype[, ...] ] ) ] | PUBLICATIONobject_name| ROLEobject_name| ROUTINEroutine_name[ ( [ [argmode] [argname]argtype[, ...] ] ) ] | SCHEMAobject_name| SEQUENCEobject_name| SUBSCRIPTIONobject_name| TABLESPACEobject_name| TYPEobject_name| VIEWobject_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)という考えではなく、オブジェクトラベルに基づいて行われます。
object_nametable_name.column_nameaggregate_namefunction_nameprocedure_nameroutine_nameラベル付けされるオブジェクトの名前です。 テーブル、集約、ドメイン、外部テーブル、関数、プロシージャ、ルーチン、シーケンス、型、ビューの名前はスキーマ修飾可能です。
providerこのラベルが関連するプロバイダの名前です。 指定されたプロバイダはロードされていなければならず、かつ、提供されるラベル付け操作と一致しなければなりません。 プロバイダが1つだけロードされていた場合、プロバイダの名前を省略して簡略化することができます。
argmode
関数、プロシージャ、または集約の引数のモードです。
IN、OUT、INOUT、VARIADICのいずれかです。
省略された場合のデフォルトはINです。
関数の識別を決定するためには入力引数のみが必要ですので、実際にはSECURITY LABELはOUTをまったく考慮しないことに注意してください。
このためIN、INOUT、VARIADICのリストで十分です。
argname
関数、プロシージャ、または集約の引数の名前です。
関数の識別を決定するためには引数のデータ型のみが必要ですので、実際にはSECURITY LABEL ON FUNCTIONは引数名をまったく考慮しないことに注意してください。
argtype関数、プロシージャ、または集約の引数のデータ型です。
large_object_oidラージオブジェクトのOIDです。
PROCEDURALこれは意味がない単語です。
label
文字列リテラルで記述された新しいセキュリティラベルです。
セキュリティラベルを削除するためにはNULLと記述します。
以下の例はテーブルのセキュリティラベルを変更する方法を示します。
SECURITY LABEL FOR selinux ON TABLE mytable IS 'system_u:object_r:sepgsql_table_t:s0';
標準SQLにはSECURITY LABELコマンドはありません。
src/test/modules/dummy_seclabel