10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

今回は、少し具体的なユースケースを用いてDeep Data Securityを試してみます。
最近ではSQLだけでなくLLMを利用したNL2SQL(自然言語)によるデータベースアクセスも増えてきていますので、その両方のパターンで実際にどのような動作するのかというのを試してみます。

テストシナリオですが、例えば、血液検査などの検査結果を格納しているデータベースがあったとします。そのデータにアクセスできる人を医師、スタッフ、医学生の3種類のロールを用意し、それぞれでアクセスできるデータの範囲をDeep Data Securityによって制御させます。

使用するデータ・モデルは、HEALTHCARE_WORKERS(医療従事者), PATIENTS(患者), EXAM_RESULTS(検査結果)という以下の3つの表です。

  • HEALTHCARE_WORKERS表には、医師としてDOCTOR、医事課や受付といったSTAFF、実習生としてSTUDENTのロールを持った人がいる
  • PATIENTS表の患者は、EXAM_RESULTS表の検査結果のレコードを複数持ち、HEALTHCARE_WORKERSのドクターに紐づく

image.png

HEALTHCARE_WORKERSの3つのロールは、以下のように定義したアクセス範囲でPATIENTSとEXAM_RESULTS表にアクセスすることが可能です。

  • エンドユーザー: nsatoは、DOCTORなのですべての表に無制限でアクセス可能
  • エンドユーザー: mtanakaは、STAFFなので患者表にはアクセスできるが、検査結果はアクセスできない
  • エンドユーザー: myamamotoは、STUDENTなので担当する患者と検査結果のみアクセスできる

image.png

テストデータを生成するスクリプトはこちら。23.26.2以上のADBの場合は、スクリプト内の0.User Creationの部分で4つのユーザーのパスワードを変更し、adminでSQLを実行すれば、demoスキーマにテストデータや必要な権限等が一式で作成されます。
簡単に実行させるためローカル・エンド・ユーザーを使っていますが、OCI IAMのユーザーを使いたい場合は、この手順でIAMとの連携をし、CREATE DATA ROLEの部分をCREATE OR REPLACE DATA ROLE employee_role MAPPED TO 'IAM_OAUTH_GROUP=doctor_role'のようにそれぞれマッピングして、IAMにユーザーとグループを作成します。

SQLで実行

それぞれのエンドユーザーで表にアクセスし、Deep Data Securityの動作を確認する

DOCTOR: nsatoはすべての表に制限なくアクセス可能

$ sql nsato/xxxxxx@adb
SQL> select * from demo.healthcare_workers;

   WORKER_ID USERNAME      FIRSTNAME    LASTNAME     WORKER_NAME    WORKER_ROLE    DEPARTMENT    EMAIL                               CREATED_AT
____________ _____________ ____________ ____________ ______________ ______________ _____________ ___________________________________ ______________________________
           1 nsato         naoto        sato         佐藤 直人          DOCTOR         内科            sato.naoto@hospital.example         26-06-11 05:52:37.134709000
           2 rsuzuki       rina         suzuki       鈴木 里奈          DOCTOR         糖尿病内科         suzuki.rina@hospital.example        26-06-11 05:52:37.158024000
           3 mtanaka       megumi       tanaka       田中 恵           STAFF          医事課           tanaka.megumi@hospital.example      26-06-11 05:52:37.178567000
           4 ykondo        yuki         kondo        近藤 由紀          STAFF          受付            kondo.yuki@hospital.example         26-06-11 05:52:37.200133000
           5 myamamoto     makoto       yamamoto     山本 誠           STUDENT        医学部実習         yamamoto.makoto@hospital.example    26-06-11 05:52:37.222078000
           6 ytakahashi    yu           takahashi    高橋 悠           STUDENT        医学部実習         takahashi.yu@hospital.example       26-06-11 05:52:37.244118000

6行が選択されました。

SQL> select * from demo.patients;

   PATIENT_ID    HEALTHCARE_WORKER_ID PATIENT_NAME    SEX    BIRTH_DATE    PHONE            PREFECTURE    CREATED_AT    
_____________ _______________________ _______________ ______ _____________ ________________ _____________ ______________________________
            1                       1 山田 太郎           M      82-04-12      090-1111-0001    東京都           26-06-11 05:52:37.285827000
            2                       1 田中 花子           F      78-09-03      090-1111-0002    神奈川県          26-06-11 05:52:37.308421000
            3                       2 佐々木 一郎          M      90-01-21      090-1111-0003    埼玉県           26-06-11 05:52:37.328984000
            4                       2 小林 美咲           F      69-11-30      090-1111-0004    千葉県           26-06-11 05:52:37.348817000
            5                       5 中村 健            M      88-06-18      090-1111-0005    東京都           26-06-11 05:52:37.367329000
            6                       6 渡辺 愛            F      95-02-14      090-1111-0006    大阪府           26-06-11 05:52:37.387711000

6行が選択されました。

SQL> select * from demo.exam_results;

   EXAM_ID    PATIENT_ID EXAM_DATE       HEIGHT_CM    WEIGHT_KG    SYSTOLIC_BP    DIASTOLIC_BP    HBA1C    LDL    TRIGLYCERIDE    FASTING_GLUCOSE SMOKING_STATUS    NOTES                   BMI
__________ _____________ ____________ ____________ ____________ ______________ _______________ ________ ______ _______________ __________________ _________________ ___________________ _______
         1             1 25-11-10              170           84            142              90      6.1    158             220                112 Former            前回よりやや悪化。              29.1
         2             1 26-02-10              170         85.5            145              92      6.3    160             230                115 Former            生活習慣改善指導。              29.6
         3             1 26-05-10              170         86.5            148              94      6.5    162             245                118 Former            腹囲増加。再検査推奨。            29.9
         4             2 25-11-10              158           59            132              84      5.7    142             176                 99 Never             軽度高値あり。                23.6
         5             2 26-05-10              158           60            136              86      5.8    148             182                102 Never             経過観察。生活習慣改善指導。           24
         6             3 25-11-12              176           69            124              80      5.5    108             101                 94 Never             前回も概ね正常。               22.3
         7             3 26-05-11              176           68            122              78      5.4    104              98                 92 Never             異常所見なし。                  22
         8             4 25-11-12              155           63            130              82      6.8    168             198                138 Current           高血糖傾向。                 26.2
         9             4 26-02-12              155         63.5            131              83        7    169             205                142 Current           糖尿病精査推奨。               26.4
        10             4 26-05-11              155           64            132              84      7.2    170             210                146 Current           HbA1c高値。糖尿病精査推奨。       26.6
        11             5 25-11-13              172           79            126              80      5.8    134             205                101 Former            中性脂肪高め。                26.7
        12             5 26-05-12              172           81            128              82      5.9    138             230                105 Former            運動・食事指導対象。             27.4
        13             6 25-11-14              160           54            118              76      5.3     96              88                 90 Never             概ね正常。                  21.1
        14             6 26-05-13              160           55            120              78      5.4    100              92                 92 Never             経過観察。                  21.5


14行が選択されました。

STAFF: mtanakaは、自分の情報と患者表にはアクセス可。検査結果はアクセス不可

$ sql mtanaka/xxxxxx@adb
SQL> select * from demo.healthcare_workers;

   WORKER_ID USERNAME    FIRSTNAME    LASTNAME    WORKER_NAME    WORKER_ROLE    DEPARTMENT    EMAIL                             CREATED_AT
____________ ___________ ____________ ___________ ______________ ______________ _____________ _________________________________ ______________________________
           3 mtanaka     megumi       tanaka      田中 恵           STAFF          医事課           tanaka.megumi@hospital.example    26-06-11 05:52:37.178567000

SQL> select * from demo.patients;

   PATIENT_ID    HEALTHCARE_WORKER_ID PATIENT_NAME    SEX    BIRTH_DATE    PHONE            PREFECTURE    CREATED_AT    
_____________ _______________________ _______________ ______ _____________ ________________ _____________ ______________________________
            1                       1 山田 太郎           M      82-04-12      090-1111-0001    東京都           26-06-11 05:52:37.285827000
            2                       1 田中 花子           F      78-09-03      090-1111-0002    神奈川県          26-06-11 05:52:37.308421000
            3                       2 佐々木 一郎          M      90-01-21      090-1111-0003    埼玉県           26-06-11 05:52:37.328984000
            4                       2 小林 美咲           F      69-11-30      090-1111-0004    千葉県           26-06-11 05:52:37.348817000
            5                       5 中村 健            M      88-06-18      090-1111-0005    東京都           26-06-11 05:52:37.367329000
            6                       6 渡辺 愛            F      95-02-14      090-1111-0006    大阪府           26-06-11 05:52:37.387711000

6行が選択されました。

SQL> select * from demo.exam_results;

次のコマンド行の開始中にエラーが発生しました : 1 -
select * from admin.exam_results
コマンド行 : 1 列 : 21 でのエラー
エラー・レポート -
SQLエラー: ORA-00942: 表またはビュー "ADMIN"."EXAM_RESULTS"は存在しません

STUDENT: myamamotoは、自分の情報と担当患者と検査結果だけアクセス可

$ sql myamamoto/xxxxxx@adb
SQL> select * from demo.healthcare_workers;

   WORKER_ID USERNAME     FIRSTNAME    LASTNAME    WORKER_NAME    WORKER_ROLE    DEPARTMENT    EMAIL                               CREATED_AT
____________ ____________ ____________ ___________ ______________ ______________ _____________ ___________________________________ ______________________________
           5 myamamoto    makoto       yamamoto    山本 誠           STUDENT        医学部実習         yamamoto.makoto@hospital.example    26-06-11 05:52:37.222078000

SQL> select * from demo.patients;

   PATIENT_ID    HEALTHCARE_WORKER_ID PATIENT_NAME    SEX    BIRTH_DATE    PHONE            PREFECTURE    CREATED_AT    
_____________ _______________________ _______________ ______ _____________ ________________ _____________ ______________________________
            5                       5 中村 健            M      88-06-18      090-1111-0005    東京都           26-06-11 05:52:37.367329000

SQL> select * from demo.exam_results;

   EXAM_ID    PATIENT_ID EXAM_DATE       HEIGHT_CM    WEIGHT_KG    SYSTOLIC_BP    DIASTOLIC_BP    HBA1C    LDL    TRIGLYCERIDE    FASTING_GLUCOSE SMOKING_STATUS    NOTES             BMI
__________ _____________ ____________ ____________ ____________ ______________ _______________ ________ ______ _______________ __________________ _________________ _____________ _______
        11             5 25-11-13              172           79            126              80      5.8    134             205                101 Former            中性脂肪高め。          26.7
        12             5 26-05-12              172           81            128              82      5.9    138             230                105 Former            運動・食事指導対象。       27.4

NL2SQLで実行

本来であればADBのSelect AIで実行したいのですが、Select AIのNL2SQLは、実行に必要なメタデータの読み込みがDeep Data Security内で許可されないため正しく動作しません。(※2026年7月頃対応予定)。 なのでここではOracle SQLcl MCP Serverを使います。下記実行している環境は、VSCode + Codex + SQLcl MCP Serverで実行していますが、ご自身の利用可能なSQLcl MCP Serverで実行してみて下さい。
また、SQLcl MCP Serverが接続するエンドユーザーは、通常のデータ・ディクショナリでオブジェクト情報を得られないので、LLMに表定義(DDL)などを指示書として事前に教えてあげるとスムーズにNL2SQLが実行できるかと思います。

DOCTOR: nsatoでのNL2SQLによる問い合わせ

最近の検査結果から、生活習慣病の疑いがある患者を一覧で出して -> すべての患者を対象に実行
image.png

最新の検査結果を使って、糖尿病疑いが強い患者を抽出して -> すべての患者を対象に実行
image.png

医師ごとに生活習慣病の疑いがある患者数を集計して -> すべてのドクターを対象に実行
image.png

STAFF: mtanakaでの実行結果

最近の検査結果から、生活習慣病の疑いがある患者を一覧で出して -> 検査結果にアクセスできないのでエラー
image.png

STUDENT: myamamotoでの実行

最近の検査結果から、生活習慣病の疑いがある患者を一覧で出して -> 担当患者1名から検索
image.png

最新の検査結果を使って、糖尿病疑いが強い患者を抽出して -> 担当患者1名から検索
image.png

医師ごとに生活習慣病の疑いがある患者数を集計して > 自分自身だけで検索
image.png

以上です。NL2SQLでもDeep Data Securityによるアクセス制御が効いていることが分かります。ADBのSelect AIが対応した際にその手順を追加する予定です。

10
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?