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_name
FUNCTIONfunction_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は、ラベルプロバイダがセキュリティラベルを解釈するかしないか、どのように解釈するかに関して制限を持ちません。 単にこれらを格納するための機構を提供するだけです。 実際には、この機能はSELinuxなどのラベルベースの強制アクセス制御(MAC)システムと統合できるようにすることを意図したものです。 こうしたシステムでは、すべてのアクセス制御の決定は、ユーザとグループなどの伝統的な任意アクセス制御(DAC)という考えではなく、オブジェクトラベルに基づいて行われます。
object_name
table_name.column_name
aggregate_name
function_name
procedure_name
routine_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