Deep Data Security
Deep Data Security とは
Section titled “Deep Data Security とは”Oracle AI Database 26ai のセキュリティ新機能として Deep Data Security(略称 Deep Sec) が追加されました。
この機能の特徴は「エンドユーザーのコンテキストをベースとしたアクセス制御」をデータベース層で実現することです。 通常アプリケーション側で行っていた行・列レベルのアクセス制御をデータベースへ移譲することで,AI エージェントのようなアドホックなクエリに対するデータ保護をより強化できます。
また,OCI IAM Identity Domains や Microsoft Entra ID と連携することで,アイデンティティ・プロバイダーのグループ情報を Data Role として引き継ぎ,認証・接続・アクセス制御までを一気通貫で実装することも可能です。
仕組みの概要
Section titled “仕組みの概要”以下が Deep Sec におけるフローの概要です。
上図の流れを順に説明します。
-
接続とセキュリティコンテキストの確立 — エンドユーザーがローカルパスワードまたはアイデンティティプロバイダーから発行されるトークンで接続すると,その識別情報と保持する Data Role がセッションに紐付き,エンドユーザーセキュリティコンテキストが確立されます。このときセッションは
XS$NULLという特殊な DB ユーザーとして扱われ,実際のエンドユーザー情報はORA_END_USER_CONTEXTから参照します。 -
Data Grant の評価 — エンドユーザーが
SELECTなどを実行すると,有効な Data Role に紐付く Data Grant がデータベース内で評価されます。各 Data Grant のWHERE句が行フィルタ,ALL COLUMNS EXCEPTが列除外として適用され,複数ロールを持つ場合は参照できる行・列がロールごとに加算されます。 -
フィルタ済みの結果を返却 — 評価結果に基づき,そのエンドユーザーがアクセスを許可された行・列だけがクエリ結果として返されます。アプリケーション側でフィルタ処理を実装しなくても,データベース層でエンドユーザー単位のアクセス制御が完結します。
主要コンポーネント
Section titled “主要コンポーネント”| コンポーネント | 説明 |
|---|---|
| END USER | アクセス制御の主体。ローカルパスワードまたはアイデンティティプロバイダーより発行されるトークンで接続する。通常の DB ユーザーではなく,CREATE END USER コマンドによって作成する |
| Data Role | Data Grant をまとめた名前付きコレクション。単体ではアクセス権を持たず,END USER やアプリケーション ID に付与して使う。OCI IAM グループ / Entra ID ロールへの外部マッピングも可能 |
| Data Grant | テーブル単位のアクセス許可定義。許可する操作(SELECT / UPDATE / INSERT / DELETE)・行フィルタ(WHERE 句)・列除外(ALL COLUMNS EXCEPT)を指定し,Data Role または END USER に付与する |
| ORA_END_USER_CONTEXT | エンドユーザーのセッション情報を保持する JSON コンテキスト。Data Grant の WHERE 句や SQL 内で参照できる |
| Application Identity | OAuth クライアント ID に紐付くアプリケーション識別子。アプリ自体への Data Role 付与に使用する |
Data Grant の構造
Section titled “Data Grant の構造”アクセス制御の単位は Data Grant と呼ばれます。この Data Grant は例えば以下のように定義されます。
CREATE DATA GRANT <schema>.<grant_name> AS SELECT -- 許可する操作(SELECT / UPDATE など) (ALL COLUMNS EXCEPT <col>) -- 列の除外(省略時は全列) ON <schema>.<table> WHERE <column> = ORA_END_USER_CONTEXT.username -- 行フィルタ TO <data_role>;Data Grant は加算的に機能します。END USER が複数の Data Role を持つ場合,それぞれの Data Grant で参照できる行・列が合算されます。
Data Role と Data Grant の関係
Section titled “Data Role と Data Grant の関係”Deep Sec のアクセス制御は END USER / Data Role / Data Grant の 3 階層で構成されます。
| オブジェクト | 役割 | 単体でのアクセス権 |
|---|---|---|
| END USER | 認証された利用者。スキーマやオブジェクト権限は直接持たない | なし |
| Data Role | Data Grant をまとめた名前付きコレクション | なし(Data Grant を関連付けて初めて意味を持つ) |
| Data Grant | 対象テーブルの行(WHERE)・列(ALL COLUMNS EXCEPT / 列リスト)・操作(SELECT / UPDATE / INSERT / DELETE)を定義 | これがアクセス権の実体 |
- 付与の向き —
GRANT DATA ROLE <role> TO <end_user>で END USER(またはアプリケーション ID)に Data Role を付与します。Data Grant はCREATE DATA GRANT ... TO <grantee>の<grantee>に Data Role・END USER のどちらでも(カンマ区切りで複数・混在も)指定できます。Data Role にまとめるのが基本で,END USER への直接付与は個別の例外を与えるためのショートカットです。 - 有効化 — END USER が認証されると,付与された Data Role が自動的に有効化されます。外部マップ Data Role(IAM グループ / Entra ロール)は,トークンの claim に該当グループが含まれていれば
GRANTなしで自動有効化されます。 - 評価フロー — ① 認証済み END USER の Data Role を有効化 → ② 有効な Data Role(+ END USER への直接付与分)に紐づく Data Grant を収集 → ③ 各 Data Grant の行・列条件を述語として SQL に自動書き換え → ④ 認可された行・列だけを返却。
- 加算的(和集合) — 複数の Data Role / Data Grant が該当する場合,参照・操作できる行と列はそれらの 和集合 になります。ある Data Grant で除外された列でも,別の Data Grant が同じ行に対してその列を許可していれば参照できます(例:
mandersonは自分の行では SSN を見られるが,部下の行の SSN は見られない)。 - 時限付与 — Data Grant には
START TIME/END TIMEを指定して有効期間を限定することもできます。
一言でまとめると END USER ─(付与)→ Data Role ─(内包)→ Data Grant ─(定義)→ 行 / 列 / 操作 という連鎖で,END USER が実際に参照できるデータは「有効なすべての Data Grant の合算結果」になります。
このサイトで扱う内容
Section titled “このサイトで扱う内容”-
ローカル・エンドユーザーによる Deep Data Securityローカルパスワード認証のエンドユーザーを作成し,Data Role・Data Grant を設定します。
manderson(manager / employee 両ロール)とebaker(employee のみ)で参照できるデータが異なることを確認します。 -
OCI IAM の機密アプリケーション・カスタム claim・グループを設定し,IAM グループを Data Role にマッピングします。IAM トークンで接続し,グループに応じたアクセス制御が機能することを確認します。