Skip to content

Oracle Label Security

Oracle Label Security(OLS)は、データ行にラベルを付与し、ユーザーに割り当てたラベルレベルと照合することで行レベルのアクセス制御を実現する機能です。

同じ表にアクセスしても、ユーザーが持つラベルレベル以下のデータしか参照できないため、アプリケーション側の変更なしにデータの機密レベルに応じたアクセス制御を実現できます。

ラベルは以下の3つの要素から構成されます。必須なのはレベルのみで、区分とグループはオプションです。

要素必須説明
レベル(Level)必須アクセス権の上下を表す数値。数値が大きいほど機密性が高い
区分(Compartment)任意水平方向の分類。同一レベル内でさらに分離したい場合に使用
グループ(Group)任意階層的なグループ管理。親グループが子グループのデータにアクセスできる

ユーザーに設定したユーザーラベルと、データ行に付与したデータラベルを照合してアクセス可否を判断します。

Oracle Label Security のラベル照合

データ行のラベルレベルと、ユーザーラベルの max_level / min_level の範囲を照合する。HR は SENSITIVE〜INTERNAL の全レベルを参照でき、SALES_APP は CONFIDENTIAL〜INTERNAL のみ参照でき SENSITIVE 行は非表示になる。

ポリシー: OLS_POL_DEMO機密レベル(Level)データ行のラベルHRmax SENS / min INTLSALES_APPmax CONF / min INTLSENSITIVECONFIDENTIALINTERNAL(4000) — 最も機密(3000)(2000)AC_MGRSA_REPIT_PROG×○ = 参照可 / × = ユーザーラベルの範囲外で非表示(SENSITIVE 行は SALES_APP から見えない)

テーブルにポリシーを適用すると、ラベルを格納する NUMBER 型のラベル列が自動的に追加されます。 ラベルの設定は CHAR_TO_LABEL、参照時の変換は LABEL_TO_CHAR 関数を使います。

プロシージャ説明
LBACSYS.CONFIGURE_OLSOLS を構成する(初回のみ)
LBACSYS.OLS_ENFORCEMENT.ENABLE_OLSOLS を有効化する(PDB 再起動が必要)
LBACSYS.OLS_ENFORCEMENT.DISABLE_OLSOLS を無効化する

ポリシー・レベル・ラベルの管理

Section titled “ポリシー・レベル・ラベルの管理”
パッケージ主なプロシージャ用途
SA_SYSDBACREATE_POLICY / ENABLE_POLICY / DROP_POLICYポリシーの作成・有効化・削除
SA_COMPONENTSCREATE_LEVEL / DROP_LEVELレベルの定義・削除
SA_LABEL_ADMINCREATE_LABEL / DROP_LABELデータラベルの作成・削除
SA_USER_ADMINSET_LEVELS / DROP_USER_ACCESSユーザーラベルの設定・削除
SA_POLICY_ADMINAPPLY_TABLE_POLICY / ENABLE_TABLE_POLICY / REMOVE_TABLE_POLICYテーブルへのポリシー適用・制御
ビュー内容
DBA_OLS_STATUSOLS の構成・有効化状態(OLS_CONFIGURE_STATUS / OLS_ENABLE_STATUS
ALL_SA_LEVELSポリシーに定義されたレベル一覧
ALL_SA_LABELS作成されたデータラベル一覧(LABEL_TAGLABEL_VALUE
ALL_SA_USER_LABELSユーザーに割り当てられたラベル設定

HR スキーマの JOB_HISTORY 表をコピーし、3段階のレベル(SENSITIVE / CONFIDENTIAL / INTERNAL)を持つポリシーを適用します。 HR ユーザーと SALES_APP ユーザーで参照できるデータが異なることを確認します。

  1. Oracle Label Security の準備

    OLS を有効化し(CONFIGURE_OLS / ENABLE_OLS)、PDB を再起動します。SA_SYSDBA.CREATE_POLICY でポリシーを作成・有効化します。

  2. OLS ポリシーの準備

    レベル(SENS / CONF / INTL)・データラベル・ユーザーラベルを作成し、JOB_HISTORY_4OLS 表にポリシーを適用します。CHAR_TO_LABEL でデータ行にラベルを付与します。

  3. ラベル制御の確認

    HR ユーザーは全10行が見え、SALES_APP ユーザーはSENSレベルの行(AC_MGR / SA_MAN)が非表示になって8行のみ参照できることを確認します。

  4. OLS 設定の削除

    テーブルポリシー・ユーザーラベル・ラベル・レベル・ポリシーを順に削除し、OLS を無効化してクリーンアップします。