Autonomous DatabaseでRAG (Retrieval-Augmented Generation)を利用したドキュメント検索は代表的なユースケースの一つです。一方で、ユーザーごとにアクセス可能なドキュメントを制御したいという要件も、ファイル共有サービスや社内ナレッジ検索システムではよく見られます。今回は、そのような要件をDeep Data Securityで実現する方法について紹介します。
今回のユースケースでは、だれでもアクセス可能なファイルと機密情報を含んだファイルの2種類を用意します。これらのファイルはベクトル化され、RAGによる検索対象として利用可能な状態になっています。
通常のSELECT AIでは、ベクトル索引に格納されたすべてのファイルを検索対象とするのでアクセス制御は行われません。そこでDeep Data Securityを利用し、下記のように各フォルダ配下のファイルに対するアクセス条件をデータ権限およびデータロールとして定義します。
定義したデータ・ロールを実際にSELECT AIでデータベースに接続するユーザーへ付与します。それぞれのユーザーは自身のデータ・ロールに応じてベクトル化されたファイルのみにアクセスが制限され、AIの回答が制限されるという結果になります。
では、実際に設定していきます。ADB(23.26.2~)のSELECT AI with RAGの実行環境が必要なので、チュートリアルを参考に準備して下さい。
Object Storageにファイルを準備
テストに必要な2つのファイルをダウンロードする。※ファイルの文字コードはUTF-8であることを確認しておく
ABC_BANK.txt
ABC_BANK_Confidential.txt
ABC_TEAMにABC_BANK_Confidential.txtをアップロード

ベクトル索引の作成
実行例。ベクトル索引の名前は、DEEPSEC_IDXを指定。それ以外のプロファイルや各種のパラメータは自身の環境に合わせる。
BEGIN
DBMS_CLOUD_AI.CREATE_PROFILE(
profile_name =>'RAG_PROFILE',
attributes =>'{"provider": "oci",
"credential_name": "OCI_CRED",
"vector_index_name": "DEEPSEC_IDX",
"embedding_model": "cohere.embed-v4.0",
"model": "xai.grok-code-fast-1"
}');
end;
BEGIN
DBMS_CLOUD_AI.CREATE_VECTOR_INDEX(
index_name => 'DEEPSEC_IDX',
attributes => '{
"vector_db_provider": "oracle",
"location": "https://objectstorage.xxxxxxx.oraclecloud.com/n/xxxxxxxx/b/deepsecdemo/o/",
"object_storage_credential_name": "OCI_CRED",
"profile_name": "RAG_PROFILE",
"vector_dimension": 1536,
"vector_distance_metric": "cosine",
"chunk_size": 400,
"chunk_overlap": 128,
"refresh_rate": 1
}'
);
END;
/
Deep Data Securityの準備
ADMINでADBにログインして実行。今回もローカル・エンド・ユーザーを使用する。
--ローカル・エンドユーザー、データ・ロールの作成と付与
CREATE END USER nsato IDENTIFIED BY xxxxxxx;
CREATE END USER mtanaka IDENTIFIED BY xxxxxxx;
CREATE DATA ROLE ALL_SALES;
CREATE DATA ROLE ABC_TEAM_ROLE;
GRANT DATA ROLE ALL_SALES to nsato, mtanaka;
grant data role ABC_TEAM_ROLE to mtanaka;
-- CREATE SESSIONを持つ通常のDBロールを作成
CREATE ROLE db_role;
GRANT CREATE SESSION TO db_role;
-- AI関連
GRANT EXECUTE ON DBMS_CLOUD_AI TO db_role;
-- エンド・ユーザーは、スキーマを持てないので、プロファイルとクレデンシャルを参照させる工夫が必要
-- プロファイル名をADMIN.RAG_PROFILE、クレデンシャルをADMIN.OCI_CREDとした場合の例
exec DBMS_CLOUD_AI.GRANT_PROFILE_ACCESS('ADMIN.RAG_PROFILE','db_role')
CREATE PUBLIC SYNONYM OCI_CRED FOR ADMIN.OCI_CRED;
Grant execute on ADMIN.OCI_CRED to db_role;
-- 作成したDBロールを基本のデータ・ロールに付与
GRANT db_role TO ALL_SALES;
--PUBLICフォルダ配下のファイルにアクセス許可
--ベクトル索引の表を間違えないように指定すること。通常は、スキーマ名.ベクトル索引$VECTAB
CREATE OR REPLACE DATA GRANT ALL_SALES_VECTOR
AS SELECT
ON admin.DEEPSEC_IDX$VECTAB
WHERE JSON_VALUE(ATTRIBUTES, '$.object_name') LIKE 'PUBLIC/%'
TO ALL_SALES ;
--ABC_TEAMフォルダ配下のファイルにアクセス許可
CREATE OR REPLACE DATA GRANT ABC_TEAM_VECTOR
AS SELECT
ON admin.DEEPSEC_IDX$VECTAB
WHERE JSON_VALUE(ATTRIBUTES, '$.object_name') LIKE 'ABC_TEAM/%'
TO ABC_TEAM_ROLE;
Deep Data Securityのポリシーに使える要素は、ベクトル索引のATRRIBUTES列くらいです。この列のJSONにはファイル名やファイルのURIやサイズ、ファイル更新日くらいしか情報がないので、ここではオブジェクト・ストレージのバケット名を条件としてアクセス・ポリシーを表現しています。ファイル個々に制御したい場合は、ファイル名の命名ルールなどを条件にする案もできそうです。
{"object_name":"ABC_TEAM/ABC_BANK_Confidential.txt","object_size":5424,"last_modified":"2026-06-12T14:47:16+00:00","location_uri":"https://objectstorage.xxxxxxx.oraclecloud.com/n/xxxxxxxx/b/deepsecdemo/o/","start_offset":1,"end_offset":400}
Select AI with RAGの実行
nasatoの場合
PUBLIC/ABC_BANK.txtのファイルの情報を基に回答を作成している。
sql nsato/xxxxxx@adb;
SQL> EXEC DBMS_CLOUD_AI.SET_PROFILE('ADMIN.RAG_PROFILE');
PL/SQLプロシージャが正常に完了しました。
SQL> select ai narrate 'ABC銀行の状況を教えて?';
_______________________________
ABC銀行は国内有数の総合金融機関であり、個人向け金融サービス、法人向け融資、資産運用、デジタルバンキング事業を展開している。
創業は1952年で、本店は東京都内に所在し、国内約350拠点、海外12か国に拠点を保有している。従業員数は約18,000名である。近年はデジタルトランスフォーメーションを経営の重点施策として掲げており、基幹システム刷新やクラウド活用を積極的に推進している。
IT戦略としては「クラウドファースト」を掲げており、新規システムについては原則クラウド利用を検討する方針となっている。現在は複数のクラウドサービスを利用しており、パブリッククラウド、プライベートクラウド、オンプレミス環境を組み合わせたハイブリッド構成を採用している。
データ分析基盤、顧客向けサービス、災害対策環境については段階的にクラウドへの移行が進んでいる。同行は2025年に発表した中期経営計画において、以下の重点施策を掲げている。・デジタルバンキング強化 ・AI活用による業務効率化 ・顧客体験向上 ・システム運用コスト削減 ・災害対策基盤強化 競合金融機関との競争が激化する中、IT投資による競争力強化を重要視している。
現在はAlphaDB、Enterprise Data Platform、およびNextGen Cloudを利用している。今後もデータ活用およびクラウド活用領域において追加投資が見込まれている重要顧客である。
Sources:
- PUBLIC/ABC_BANK.txt (https://objectstorage.ap-tokyo-1.oraclecloud.com/n/nr3c2r62ocsa/b/deepsecdemo/o/PUBLIC/ABC_BANK.txt)
SQL> select ai narrate 'ABC銀行の契約更新リスクはありますか?';
_______________________________
ABC銀行の契約更新リスクに関する具体的な情報は、提供されたデータには含まれていません。
データでは、ABC銀行が複数のクラウドサービス(AlphaDB、Enterprise Data Platform、NextGen Cloudなど)を利用し、ハイブリッド構成(パブリッククラウド、プライベートクラウド、オンプレミス環境)を採用していること、データ分析基盤や顧客向けサービスなどの領域で段階的にクラウド移行を進めていること、中期経営計画でIT投資による競争力強化を重視し、今後もデータ活用およびクラウド活用領域での追加投資が見込まれることが記載されています。
これらはクラウド依存の文脈を示唆しますが、契約更新リスクの有無や詳細については言及されていません。
Sources:
- PUBLIC/ABC_BANK.txt (https://objectstorage.ap-tokyo-1.oraclecloud.com/n/nr3c2r62ocsa/b/deepsecdemo/o/PUBLIC/ABC_BANK.txt)
SQL> select ai narrate 'ABC銀行で過去にトラブルはありましたか?';
_______________________________
あなたのデータには、ABC銀行の過去のトラブルに関する情報は含まれていません。
データでは、ABC銀行の企業概要として、創業年、拠点数、従業員数、デジタルトランスフォーメーションの推進、IT戦略、クラウド利用、中期経営計画などが記載されており、これらは主に同社の事業展開と戦略に焦点を当てた内容です。
Sources:
- PUBLIC/ABC_BANK.txt (https://objectstorage.ap-tokyo-1.oraclecloud.com/n/nr3c2r62ocsa/b/deepsecdemo/o/PUBLIC/ABC_BANK.txt)
mtanakaの場合
PUBLIC/ABC_BANK.txtだけでなく、ABC_TEAM/ABC_BANK_Confidential.txtファイルの情報を含めて回答を作成している。
sql mtanaka/xxxxxx@adb;
SQL> EXEC DBMS_CLOUD_AI.SET_PROFILE('ADMIN.RAG_PROFILE');
PL/SQLプロシージャが正常に完了しました。
--まったく同じプロンプトだと以前の結果を引っ張ってきてしまうので、少し変えてあげるのがポイント
SQL> select ai narrate 'ABC銀行の状況を教えて下さい';
ABC銀行は国内有数の総合金融機関であり、個人向け金融サービス、法人向け融資、資産運用、デジタルバンキング事業を展開している。創業は1952年、本店は東京都内に所在し、国内約350拠点、海外12か国に拠点を保有している。従業員数は約18,000名。
近年はデジタルトランスフォーメーションを経営の重点施策として掲げており、基幹システム刷新やクラウド活用を積極的に推進している。IT戦略としては「クラウドファースト」を掲げており、新規システムについては原則クラウド利用を検討する方針となっている。現在は複数のクラウドサービスを利用しており、パブリッククラウド、プライベートクラウド、オンプレミス環境を組み合わせたハイブリッド構成を採用している。データ分析基盤、顧客向けサービス、災害対策環境については段階的にクラウドへの移行が進んでいる。
同行は2025年に発表した中期経営計画において、以下の重点施策を掲げている。
・デジタルバンキング強化
・AI活用による業務効率化
・顧客体験向上
・システム運用コスト削減
・災害対策基盤強化
競合金融機関との競争が激化する中、IT投資による競争力強化を重要視している。現在はAlphaDB、Enterprise Data Platform、およびNextGen Cloudを利用している。今後もデータ活用およびクラウド活用領域において追加投資が見込まれている重要顧客である。
ABC銀行は当社金融営業本部における重点顧客である。現在の年間契約額は約2.8M USD。主な契約は以下で構成される。
・AlphaDB Enterprise
・Enterprise Data Platform
・NextGen Cloud
現在利用中の基幹データ基盤は2027年3月に保守期限を迎える予定であり、2026年度中に次期基盤選定プロジェクトが開始される見込み。競合状況としてはCloud-AおよびCloud-Bが積極的な提案活動を実施している。
【訪問メモ①】
日時: 2026年4月10日
参加者
ABC銀行
・鈴木 隆一 CIO
・田中 真一 IT企画部長
・山本 直樹 インフラ統括責任者
内容
次期システム更改について意見交換。
CIOコメント
「現行基盤の性能には満足しているが、運用コスト削減が重要課題である」
「今後はクラウド利用をさらに拡大したい」
次世代クラウド基盤およびハイブリッド運用モデルに関心を示した。
【訪問メモ②】
日時: 2026年5月22日
参加者
・鈴木 隆一 CIO
・高橋 美咲 デジタル戦略担当執行役員
内容
次期中期IT戦略についてヒアリング。
執行役員コメント
「2027年度
【サポート履歴・トラブル情報】
過去24か月間に発生した主要サポート案件
案件番号: INC-2025-0187
発生日: 2025年8月12日
概要: 分析基盤において性能劣化が発生し、一部レポート処理が通常より大幅に遅延。
影響: 月次経営レポート作成業務に遅延が発生。
顧客影響: 高
対応: システム構成見直しおよび性能チューニングを実施。
結果: 48時間以内に復旧。
顧客コメント: 「迅速な対応により業務影響を最小限に抑えることができた」
案件番号: INC-2025-0243
発生日: 2025年11月7日
概要: バックアップ環境において設定不整合が
Sources:
- PUBLIC/ABC_BANK.txt (https://objectstorage.ap-tokyo-1.oraclecloud.com/n/nr3c2r62ocsa/b/deepsecdemo/o/PUBLIC/ABC_BANK.txt)
- ABC_TEAM/ABC_BANK_Confidential.txt (https://objectstorage.ap-tokyo-1.oraclecloud.com/n/nr3c2r62ocsa/b/deepsecdemo/o/ABC_TEAM/ABC_BANK_Confidential.txt)
SQL> select ai narrate 'ABC銀行の契約更新リスクがあるか確認したい';
_______________________________________________________
ABC銀行の契約更新リスクは限定的と評価されており、契約更新確率は80%と判断されています。リスク要因としては、Cloud-Aによる価格攻勢、Cloud-Bとの比較評価、運用コスト削減要求が挙げられます。
一方で、ポジティブ要因として、現行基盤の評価が高い、クラウド戦略との整合性が高い、CIOとの関係が良好、執行役員レベルとの接点が確立されている点が挙げられます。
過去の障害案件が契約更新に直接影響した事例はないものの、クラウド利用コスト増加、競合サービスとの価格比較、運用効率改善要求が継続的な懸念事項として認識されています。
現在、重大なエスカレーション案件は存在せず、顧客との関係性は良好です。
Sources:
- ABC_TEAM/ABC_BANK_Confidential.txt (https://objectstorage.ap-tokyo-1.oraclecloud.com/n/nr3c2r62ocsa/b/deepsecdemo/o/ABC_TEAM/ABC_BANK_Confidential.txt)
SQL> select ai narrate 'ABC銀行で過去にトラブルはあるか教えて';
__________________________________________________________
はい、ABC銀行では過去24か月間に以下の主要なトラブルが発生しています。
- 案件番号: INC-2025-0187
発生日: 2025年8月12日
概要: 分析基盤において性能劣化が発生し、一部レポート処理が通常より大幅に遅延。
影響: 月次経営レポート作成業務に遅延が発生。
顧客影響: 高
対応: システム構成見直しおよび性能チューニングを実施。
結果: 48時間以内に復旧。
顧客コメント: 「迅速な対応により業務影響を最小限に抑えることができた」
- 案件番号: INC-2025-0243
発生日: 2025年11月7日
概要: バックアップ環境において設定不整合が発生。
影響: バックアップジョブが一時停止。
顧客影響: 中
対応: 設定修正および運用手順改善を実施。
結果: 当日中に復旧。
顧客コメント: 「再発防止策について継続的な説明を希望」
- 案件番号: SR-2026-0054
発生日: 2026年2月15日
概要: クラウド利用料金増加に関する問い合わせ。
内容: 利用料金が当初予算を上回る見込みとなり、コスト最適化施策について相談を受けた。
対応: 利用状況分析レポートを提供し、コスト削減案を提案。
Sources:
- ABC_TEAM/ABC_BANK_Confidential.txt (https://objectstorage.ap-tokyo-1.oraclecloud.com/n/nr3c2r62ocsa/b/deepsecdemo/o/ABC_TEAM/ABC_BANK_Confidential.txt)
以上です。SelectAI with RAGでもDeep Data Securityによるアクセス制御が効いていることが分かります。今回はローカルエンドユーザーを利用した例を紹介しましたが、Microsoft Entra IDなどのIdP(Identity Provider)と認証連携することで、ユーザーが所属するグループに応じて、RAGが参照可能なドキュメントを制御することも可能です。
また、独自にVector SearchとLLMを組み合わせる場合は柔軟なアクセス制御を実装できますが、ADBの DBMS_CLOUD_AI.CREATE_VECTOR_INDEX によるベクトル索引を使う場合は、ベクトル索引に入っている情報のみでDeep Data Securityのポリシーを定義する必要がある、という点を気にしながらポリシーを検討頂くとよいかと思います。



