Skip to content

Deep Data Security

Oracle AI Database 26ai のセキュリティ新機能として Deep Data Security(略称 Deep Sec) が追加されました。

この機能の特徴は「エンドユーザーのコンテキストをベースとしたアクセス制御」をデータベース層で実現することです。 通常アプリケーション側で行っていた行・列レベルのアクセス制御をデータベースへ移譲することで,AI エージェントのようなアドホックなクエリに対するデータ保護をより強化できます。

また,OCI IAM Identity Domains や Microsoft Entra ID と連携することで,アイデンティティ・プロバイダーのグループ情報を Data Role として引き継ぎ,認証・接続・アクセス制御までを一気通貫で実装することも可能です。

以下が Deep Sec におけるフローの概要です。

Deep Data Security の処理フロー

エンドユーザーが接続するとセキュリティコンテキストが確立され,SELECT 実行時に Data Grant が評価されて,フィルタ済みの行・列だけが返却される。

エンドユーザーOracle AI Database 26ai接続(パスワード / ID トークン)① エンドユーザーセキュリティコンテキストを確立セッションは XS$NULL,実体は ORA_END_USER_CONTEXT で参照ORA_END_USER_CONTEXT.username = “manderson”Data Role: employee_role / manager_role を有効化SELECT * FROM hr.employees② Data Grant を評価(加算的に合算)employee_role → WHERE email = ‘manderson’manager_role → WHERE manager = ‘manderson’manager_role は SSN 列を除外③ フィルタ済みの行・列のみ返却

上図の流れを順に説明します。

  1. 接続とセキュリティコンテキストの確立 — エンドユーザーがローカルパスワードまたはアイデンティティプロバイダーから発行されるトークンで接続すると,その識別情報と保持する Data Role がセッションに紐付き,エンドユーザーセキュリティコンテキストが確立されます。このときセッションは XS$NULL という特殊な DB ユーザーとして扱われ,実際のエンドユーザー情報は ORA_END_USER_CONTEXT から参照します。

  2. Data Grant の評価 — エンドユーザーが SELECT などを実行すると,有効な Data Role に紐付く Data Grant がデータベース内で評価されます。各 Data Grant の WHERE 句が行フィルタ,ALL COLUMNS EXCEPT が列除外として適用され,複数ロールを持つ場合は参照できる行・列がロールごとに加算されます。

  3. フィルタ済みの結果を返却 — 評価結果に基づき,そのエンドユーザーがアクセスを許可された行・列だけがクエリ結果として返されます。アプリケーション側でフィルタ処理を実装しなくても,データベース層でエンドユーザー単位のアクセス制御が完結します。

コンポーネント説明
END USERアクセス制御の主体。ローカルパスワードまたはアイデンティティプロバイダーより発行されるトークンで接続する。通常の DB ユーザーではなく,CREATE END USER コマンドによって作成する
Data RoleData 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 IdentityOAuth クライアント ID に紐付くアプリケーション識別子。アプリ自体への Data Role 付与に使用する

アクセス制御の単位は 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 で参照できる行・列が合算されます。

Deep Sec のアクセス制御は END USER / Data Role / Data Grant の 3 階層で構成されます。

オブジェクト役割単体でのアクセス権
END USER認証された利用者。スキーマやオブジェクト権限は直接持たないなし
Data RoleData 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 の合算結果」になります。

  1. ローカル・エンドユーザーによる Deep Data Security

    ローカルパスワード認証のエンドユーザーを作成し,Data Role・Data Grant を設定します。manderson(manager / employee 両ロール)と ebaker(employee のみ)で参照できるデータが異なることを確認します。

  2. OCI IAM Identity Domains との連携

    OCI IAM の機密アプリケーション・カスタム claim・グループを設定し,IAM グループを Data Role にマッピングします。IAM トークンで接続し,グループに応じたアクセス制御が機能することを確認します。