Select AIとVirtual Private DatabaseによるAIアプリの構築 (2026/04/01)

Select AIとVirtual Private DatabaseによるAIアプリの構築 (2026/04/01)

https://blogs.oracle.com/machinelearning/building-ai-apps-with-select-ai-and-virtual-private-database

投稿者:Chandrakanth Putha | Senior Product Manager

現代のエンタープライズアプリケーションでは、データとの自然言語による対話を可能にするために、生成型AIの統合がますます進んでいます。Oracle Select AIを使用すると、ユーザーは「四半期ごとの売上を表示してください」や「地域別の収益はいくらですか」といったビジネス上の質問を自然言語で尋ねることができ、大規模言語モデル(LLM)とDBMS_CLOUD_AIパッケージを使用して、これらの質問を自動的にSQLに変換します。これにより、ビジネスユーザーはSQLを記述する必要がなくなり、セルフサービス分析が可能になります。同時に、Oracle Virtual Private Database(VPD)は行レベルのセキュリティを提供し、各ユーザーがアクセスできるデータ行を制御します。これは、DBMS_RLSとポリシー関数を使用して述語の形式でSQLクエリにフィルタリング条件を自動的に追加することで実現され、アプリケーションが独自のフィルタを適用しない場合でも、ユーザーが承認されたデータのみを表示できるようにします。

Select AIとVPDを組み合わせることで、真の力が発揮されます。AI駆動型アプリケーションでは、自然言語プロンプトに基づいてSQLステートメントが動的に生成されます。ここで重要な企業上の懸念が生じます。LLMがSELECT * FROM SALES_DATAのような広範囲なクエリを生成した場合、どうなるでしょうか?行レベルの制御がない場合、このようなクエリは機密データを漏洩させる可能性があります。基となるテーブルでVPDを有効にすることで、AIが生成するすべてのクエリはポリシー仕様によって自動的に制限されます。Select AIはSQLを動的に生成しますが、データベースは実行前にVPDポリシーを適用します。つまり、AI駆動型アクセスはインテリジェントでありながら、厳格なデータセキュリティポリシーによって管理されます。この組み合わせにより、企業レベルのセキュリティを損なうことなく、自然言語によるアクセスが可能になります。

以下では、以下の方法を使用してAI搭載APEXアプリケーションを構築する方法を示します。

  • Oracle Select AI
  • DBMS_RLS (VPD)
  • 行レベルのセキュリティポリシー
  • APEX認証コンテキスト

この記事は、JAPACハブのスタッフソリューションエンジニアであるナリニ・M氏との共同執筆です。

ワークフロー

以下のワークフローは、APEXにおけるユーザーの自然言語によるリクエストが、Select AIによってSQLに変換される仕組みを示しています。SQLは動的に生成されますが、仮想プライベートデータベース(VPD)は、実行前にそのSQLに対してセキュリティポリシーを自動的に適用します。

図1:実装ワークフロー:ステップバイステップガイド

Autonomous AI Databaseインスタンスのプロビジョニングとユーザーの作成が完了したら、次のステップは、ADMINユーザーにSelect AIおよびVPD機能を有効にするために必要な権限を付与することです。AIプロファイルの作成と行レベルのセキュリティポリシーの定義を行うには、ユーザーは必要なパッケージに対する実行権限を持っている必要があります。

管理者ユーザーとしてデータベースアクションSQLワークシートにログインし、以下の権限付与を実行します。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
GRANT EXECUTE ON DBMS_CLOUD TO SELECT_AI_USER;GRANT EXECUTE ON DBMS_CLOUD_AI TO SELECT_AI_USER;GRANT EXECUTE ON DBMS_RLS TO SELECT_AI_USER;

これらの権限により、ユーザーSELECT_AI_USERはSelect AIプロファイルを構成し、データベース内でVPDポリシーを実装することができます。

SQLスクリプト「仮想プライベートデータベース マルチリージョン販売データセット」にアクセスしてください。このスクリプトは、マルチリージョン販売設定用のサンプルデータベーステーブルを作成します。定義するテーブルは次の4つです。

  • 地域(地理的な領域)
  • 製品(製品詳細)
  • 売上(製品と地域を関連付けた取引)
  • APP_USERS(地域と役割が割り当てられているユーザー向け)

次に、世界各地の地域、様々なカテゴリーの製品、複数の販売記録など、サンプルデータを用いてこれらのテーブルにデータを入力します。また、地域マネージャーやアプリケーション管理者であるグローバルマネージャーなどのユーザーも追加します。

OCIで認証するための資格情報を作成します。

この認証情報により、自律型AIデータベースのユーザーSELECT_AI_USERは、必要なOCI認証情報を安全に保存することで、OCI生成型AIサービスに接続できるようになります。この認証情報は、後でSelect AIプロファイルを作成する際に参照されます。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
BEGIN
  DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'OCI_GENERATIVE_AI_CRED',
  user_ocid => '',
  tenancy_ocid => '',
  fingerprint => '',
  private_key => '');
END;

Select AIプロファイルを作成する

Select AIプロファイルは、使用するAIプロバイダーとモデルを定義します。また、自然言語によるプロンプトから応答を生成するために必要なメタデータとデータベースオブジェクトに関する詳細情報も含まれます。

Select AIは、幅広いAIプロバイダーとLLMの利用をサポートしています。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
BEGIN
  DBMS_CLOUD_AI.create_profile(
    profile_name => 'SALES_PROFILE',
    attributes => '{"provider": "oci",
    "credential_name": "SELECT_AI_CRED",
    "model": "meta.llama-3.3-70b-instruct",
    "comments":"true",
    "object_list": [{"owner": " SELECT_AI_USER ", "name": "SALES"},
                    {"owner": " SELECT_AI_USER ", "name": "PRODUCTS"},
                    {"owner": " SELECT_AI_USER ", "name": "REGIONS"},
                    {"owner": " SELECT_AI_USER ", "name": "APP_USERS"}]}');
END;

VPDポリシーを作成する

VPDポリシー関数を作成し、そのポリシーをテーブルに適用することで、行レベルのセキュリティを強制します。これにより、ログインしているユーザーのコンテキストに基づいて、データへのアクセスが動的に制限されます。

以下の関数は、app_users テーブルから現在のユーザーの役割と地域を確認します。ユーザーが ADMIN の役割を持っている場合は、すべての行へのアクセスを許可します。そうでない場合は、ユーザーの地域に一致する行のみにアクセスを制限します。テーブルにユーザーが見つからない場合は、データがないことを示す条件を返してアクセスをブロックします。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
create or replace FUNCTION sales_region_policy (
  schema_name IN VARCHAR2,
  table_name IN VARCHAR2)
RETURN VARCHAR2 AS
  v_region_id NUMBER;
  v_role VARCHAR2(50);
BEGIN
  -- Get current user info from app_users
  SELECT region_id, role
  INTO v_region_id, v_role
  FROM app_users
  WHERE upper(username) = upper(SYS_CONTEXT('APEX$SESSION','APP_USER'));
  -- If ADMIN, allow all rows
  IF upper(v_role) = 'ADMIN' THEN 
    RETURN '1=1';
  -- If not ADMIN, restrict to their region
  ELSE
    RETURN 'region_id = ' || v_region_id;
  END IF;
EXCEPTION
  WHEN NO_DATA_FOUND THEN
  -- If user not found in table, deny access
  RETURN '1=0';
END sales_region_policy;

以下のPL/SQLブロックは、DBMS_RLS.ADD_POLICY(Oracleの行レベルセキュリティ機能)を使用して、SALESテーブルにセキュリティルールを追加します。このルールはsales_region_policy関数をテーブルにリンクし、SELECTクエリが実行されるたびに、ユーザーが表示できる行を関数が決定するようにします。簡単に言えば、データを自動的にフィルタリングし、ユーザーがアクセスを許可されているデータのみを表示できるようにします。


クリップボードにコピーされました
エラー: コピーできませんでした
クリップボードにコピーされました
エラー: コピーできませんでした
BEGIN
 DBMS_RLS.ADD_POLICY(
   object_schema   => 'SELECT_AI_USER',
   object_name     => 'SALES',
   policy_name     => 'sales_region_policy',
   function_schema => 'SELECT_AI_USER',
   policy_function => 'sales_region_policy',
   statement_types => 'SELECT');
END;

Oracleチャットボット(APEXアプリケーション)を使用して設定を検証する

Select AIを搭載したAsk Oracleは、自然言語を使用してAIと対話するためのチャットボットスタイルのインターフェースを提供するOracle APEXアプリケーションのサンプルです。LLM会話、NL2SQLクエリ、RAG、およびAIエージェントワークフローに対応しており、そのまま使用することも、ニーズに合わせてカスタマイズすることも可能です。

仮想プライベートデータベースのglobal_managerは、すべてのリージョンにわたるすべてのデータにアクセスできるアプリケーション管理者ユーザーです。global_managerユーザーはアプリケーション管理者ロールを持ち、リージョンフィルタによる制限を受けません。

NA_manager、SA_manager、EU_managerなどの他のユーザーは地域マネージャーであり、それぞれが担当する地域に関連するデータのみにアクセスできます。

global_managerユーザーは、すべてのリージョンにわたるデータにアクセスできます。global_managerとしてアプリケーションにログインしてください。

 「地域別の総収益を表示」という自然言語クエリを実行してください。

「売れ筋商品トップ3」という自然言語クエリを実行してください。

na_managerとしてアプリケーションにログインし、自然言語クエリを実行します。na_managerは、自身の担当地域に関連するデータのみにアクセスできます。

「地域別の総収益を表示」という自然言語クエリを実行してください。

「売れ筋商品トップ3」という自然言語クエリを実行してください。


Oracle Virtual Private Database (VPD) は、各ユーザーが表示できるデータを制限することで行レベルのセキュリティを強化し、Select AI は自然言語クエリを可能にします。これらを組み合わせることで、AI が生成する応答は、ユーザーがアクセスを許可されているデータのみを返すようになります。また、AI 時代のセキュリティ脅威への対処を支援するために開発された最新の Oracle テクノロジーであるOracle Deep Data Securityもぜひご覧ください。Deep Data Security は、行レベルと列レベルでエンドユーザーのアクセス権限を強化する宣言型のデータベースネイティブ制御を使用します。エンドユーザーのセキュリティをアプリケーション コードから一元化して分離することで、組織は新たな脅威が出現するたびに防御策を継続的に更新できます。Deep Data Security の詳細については、こちらをご覧ください

リソース

詳細については、以下をご覧ください。

コメント

このブログの人気の投稿

Oracle Database 19cサポート・タイムラインの重要な更新 (2024/11/20)

ミリ秒の問題: BCCグループとOCIが市場データ・パフォーマンスを再定義する方法(AWSに対するベンチマークを使用) (2025/11/13)

OCIのカスタム・ルート表を使用した詳細なルーティング制御 (2025/02/27)