Oracle Label Security
Oracle Label Security とは
Section titled “Oracle Label Security とは”Oracle Label Security(OLS)は、データ行にラベルを付与し、ユーザーに割り当てたラベルレベルと照合することで行レベルのアクセス制御を実現する機能です。
同じ表にアクセスしても、ユーザーが持つラベルレベル以下のデータしか参照できないため、アプリケーション側の変更なしにデータの機密レベルに応じたアクセス制御を実現できます。
ラベルの構成要素
Section titled “ラベルの構成要素”ラベルは以下の3つの要素から構成されます。必須なのはレベルのみで、区分とグループはオプションです。
| 要素 | 必須 | 説明 |
|---|---|---|
| レベル(Level) | 必須 | アクセス権の上下を表す数値。数値が大きいほど機密性が高い |
| 区分(Compartment) | 任意 | 水平方向の分類。同一レベル内でさらに分離したい場合に使用 |
| グループ(Group) | 任意 | 階層的なグループ管理。親グループが子グループのデータにアクセスできる |
仕組みの概要
Section titled “仕組みの概要”ユーザーに設定したユーザーラベルと、データ行に付与したデータラベルを照合してアクセス可否を判断します。
ポリシー: OLS_POL_DEMOレベル定義: SENSITIVE(4000) > CONFIDENTIAL(3000) > INTERNAL(2000)
データ行のラベル: IT_PROG → INTERNAL(200) AC_MGR → SENSITIVE(400) ← 機密性が高い SA_REP → CONFIDENTIAL(300)
ユーザーラベル(max_level / min_level): HR → max: SENS / min: INTL → 全データ参照可(SENS/CONF/INTL) SALES_APP → max: CONF / min: INTL → CONF/INTL のみ参照可 SENS(AC_MGR, SA_MAN)は非表示テーブルにポリシーを適用すると、ラベルを格納する NUMBER 型のラベル列が自動的に追加されます。
ラベルの設定は CHAR_TO_LABEL、参照時の変換は LABEL_TO_CHAR 関数を使います。
主要パッケージと操作
Section titled “主要パッケージと操作”OLS の有効化
Section titled “OLS の有効化”| プロシージャ | 説明 |
|---|---|
LBACSYS.CONFIGURE_OLS | OLS を構成する(初回のみ) |
LBACSYS.OLS_ENFORCEMENT.ENABLE_OLS | OLS を有効化する(PDB 再起動が必要) |
LBACSYS.OLS_ENFORCEMENT.DISABLE_OLS | OLS を無効化する |
ポリシー・レベル・ラベルの管理
Section titled “ポリシー・レベル・ラベルの管理”| パッケージ | 主なプロシージャ | 用途 |
|---|---|---|
SA_SYSDBA | CREATE_POLICY / ENABLE_POLICY / DROP_POLICY | ポリシーの作成・有効化・削除 |
SA_COMPONENTS | CREATE_LEVEL / DROP_LEVEL | レベルの定義・削除 |
SA_LABEL_ADMIN | CREATE_LABEL / DROP_LABEL | データラベルの作成・削除 |
SA_USER_ADMIN | SET_LEVELS / DROP_USER_ACCESS | ユーザーラベルの設定・削除 |
SA_POLICY_ADMIN | APPLY_TABLE_POLICY / ENABLE_TABLE_POLICY / REMOVE_TABLE_POLICY | テーブルへのポリシー適用・制御 |
| ビュー | 内容 |
|---|---|
DBA_OLS_STATUS | OLS の構成・有効化状態(OLS_CONFIGURE_STATUS / OLS_ENABLE_STATUS) |
ALL_SA_LEVELS | ポリシーに定義されたレベル一覧 |
ALL_SA_LABELS | 作成されたデータラベル一覧(LABEL_TAG・LABEL_VALUE) |
ALL_SA_USER_LABELS | ユーザーに割り当てられたラベル設定 |
このサイトで扱う内容
Section titled “このサイトで扱う内容”HR スキーマの JOB_HISTORY 表をコピーし、3段階のレベル(SENSITIVE / CONFIDENTIAL / INTERNAL)を持つポリシーを適用します。
HR ユーザーと SALES_APP ユーザーで参照できるデータが異なることを確認します。
-
OLS を有効化し(
CONFIGURE_OLS/ENABLE_OLS)、PDB を再起動します。SA_SYSDBA.CREATE_POLICYでポリシーを作成・有効化します。 -
レベル(SENS / CONF / INTL)・データラベル・ユーザーラベルを作成し、
JOB_HISTORY_4OLS表にポリシーを適用します。CHAR_TO_LABELでデータ行にラベルを付与します。 -
HRユーザーは全10行が見え、SALES_APPユーザーはSENSレベルの行(AC_MGR / SA_MAN)が非表示になって8行のみ参照できることを確認します。 -
テーブルポリシー・ユーザーラベル・ラベル・レベル・ポリシーを順に削除し、OLS を無効化してクリーンアップします。