ノート:

Oracle Database 23ai、Oracle Data SafeおよびOracle APEXを使用したAIを活用したユーザー行動分析の実装

イントロダクション

データベース環境の複雑化が進むにつれて、機密データを保護し、異常なユーザー行動を検出することが非常に重要です。このプロジェクトでは、Oracle Data Safeログ、Oracle Machine Learning for SQL (OML4SQL)およびOracle Database 23aiを活用して、ユーザー行動分析(UBA)を強化し、異常なアクセス・パターンと潜在的なセキュリティの脅威を特定します。

このステップバイステップ・チュートリアルでは、Oracle Machine Learning (OML)およびOracle APEXを使用してAIを利用した異常検出を実装し、リアルタイムのセキュリティ監視を有効にする方法を示します。データベース・セキュリティ管理者AutoML管理者AI/ML管理者およびAPEX開発者向けに設計されたこのソリューションは、プロアクティブな脅威検出のためにOracleのAI/ML機能を統合することで、データベース・セキュリティを強化します。

その中核となるプロジェクトは、通常のユーザーの動作を学習し、異常として偏差にフラグを付ける教師なし機械学習アルゴリズムであるOne Class Support Vector Machines (SVMs)を利用しています。総ログイン数や平均セッション期間などの機能を分析することで、モデルは不規則なアクティビティを特定し、潜在的なセキュリティの脅威や不正アクセスの試行を検出するのに役立ちます。

インスタンスIMDS更新

ユースケース:データベース・ユーザーの異常検出。

このユース・ケースでは、ログオンおよびログオフ・イベントを分析することによって、Oracleデータベース環境の異常なユーザー・ログインおよびログアウト・アクティビティを検出することに重点を置いています。システムは、異常なセッション期間や不規則なログイン頻度などの疑わしいパターンを識別し、Oracle APEXダッシュボードを介してインサイトを視覚化して、管理者がデータベースをプロアクティブに保護できるようにします。

AIおよびセキュリティ分析を活用することで、このアプローチは異常なログオンおよびログオフ・パターンにフラグを付け、潜在的なセキュリティの脅威を軽減します。

主要機能:

対象読者

目的

次のものを統合して、OCI環境にAI搭載のUBAを実装します。

主な目的は、Oracle Data Safeログオン・イベント・データセットを分析して異常なユーザー行動を特定し、予防的な脅威検出とデータベース・セキュリティの強化を実現することです。

前提条件

タスク1: Oracle Data Safeからのログオンおよびログオフ・イベント・データセットのダウンロード

ログオンおよびログオフ・イベントのフィルタ済レポートを生成してOracle Data Safeからダウンロードし、データベース・インポート用にCSVに変換します。

  1. OCIコンソールにログインし、「Oracle Databases」「データ・セーフ」「アクティビティ監査」「監査レポート」に移動して、「すべてのアクティビティ」をクリックします。

  2. フィルタを適用して、ログオンおよびログオフ・イベントを取得します。

    「コンパートメント」にナビゲートします。

  3. レポートを生成し、.xls形式でダウンロードします。たとえば、Datasafe_LOGIN_DatasetJan2024-Feb2025_V2.xlsです。

  4. Oracle Autonomous Databaseにロードするために、ファイルの名前を.csv形式に変更します。たとえば、Datasafe_LOGIN_DatasetJan2024-Feb2025_V2.csvです。

タスク2: Oracle Database 23ai Autonomous Databaseでのユーザーの作成

Oracle Database 23aiで、必要なOMLおよびWebアクセスを持つOML_USERというユーザーを作成します。

  1. OCIコンソールに移動し、「Oracle Databases」に移動して「Autonomous Database」をクリックします。

  2. 「データベース・アクション」および「データベース・ユーザー」をクリックします。

    コンパートメントの作成の選択

  3. OMLおよびWeb Accessを使用して、OML_USERというユーザーを作成します。

    コンパートメントの作成の選択

    コンパートメントの作成の選択

タスク3: Oracle Database 23ai Autonomous Databaseへのデータセットのロード

データ・ロードを使用してCSVデータセットをアップロードし、データの整合性を検証して、適切なロードを確認します。

  1. Webアクセス・リンクを使用してOML_USERとしてログインします。

    「Create Identity Domain」を選択します。

  2. 「Data Studio」にナビゲートし、「データ・ロード」をクリックします。

    「Create Identity Domain」を選択します。

  3. CSVファイルからコメント・セクションを削除し、列ヘッダーで始まることを確認します。

    「Create Identity Domain」を選択します。

  4. 「データのロード」をクリックし、CSVファイルを選択して、表名を構成します。

    「Create Identity Domain」を選択します。

    「Create Identity Domain」を選択します。

    「Create Identity Domain」を選択します。

    「Create Identity Domain」を選択します。

  5. 「開始および実行」をクリックしてデータをロードします。

    「Create Identity Domain」を選択します。

  6. データ・ロード・ステータスを確認し、拒否された行を修正します。

    「Create Identity Domain」を選択します。

タスク4: データの検証および消去

SQLプロシージャを使用してデータセットを処理し、不整合を削除して分析のためにデータを準備します。

  1. 「開発」にナビゲートし、OML_USERとして「SQL」をクリックします。

    「Create Identity Domain」を選択します。

  2. ステージング表(datasafe_audit_logs)を作成し、SQLプロシージャを使用してデータを処理します。

    • DATASAFE_LOGIN_RAW_DATASETからdatasafe_audit_logsにレコードを挿入します。
    • 対応するLOGONレコードがないLOGOFFレコードを削除します。
    • 後のタイムスタンプでLOGOFFイベントが存在しない場合は、LOGONレコードを削除します。
    CREATE TABLE datasafe_audit_logs (
        target VARCHAR2(100),
        db_user VARCHAR2(100),
        client_host VARCHAR2(100),
        event VARCHAR2(50),
        object VARCHAR2(100),
        operation_status VARCHAR2(50),
        operation_time TIMESTAMP
    );
    

    データセットをクリーンするプロシージャを実行します。

     CREATE OR REPLACE PROCEDURE process_datasafe_audit_logs AS
    BEGIN
        -- Step 1: Insert data from raw dataset to audit logs
        INSERT INTO datasafe_audit_logs (
            TARGET,
            DB_USER,
            CLIENT_HOST,
            EVENT,
            OBJECT,
            OPERATION_STATUS,
            OPERATION_TIME
        )
        SELECT
            TARGET,
            DB_USER,
            CLIENT_HOST,
            EVENT,
            OBJECT,
            OPERATION_STATUS,
            CAST(OPERATION_TIME AS TIMESTAMP(6)) -- Convert DATE to TIMESTAMP(6)
        FROM DATASAFE_LOGIN_RAW_DATASET
        WHERE OPERATION_STATUS = 'SUCCESS';
    
        -- Commit the insertion
        COMMIT;
    
        -- Step 2: Delete LOGOFF events that do not have a corresponding LOGON event
        DELETE FROM datasafe_audit_logs a
        WHERE a.EVENT = 'LOGOFF'
        AND NOT EXISTS (
            SELECT 1
            FROM datasafe_audit_logs b
            WHERE a.TARGET = b.TARGET
            AND a.DB_USER = b.DB_USER
            AND a.CLIENT_HOST = b.CLIENT_HOST
            AND b.EVENT = 'LOGON'
        );
    
        -- Step 3: Delete LOGON events that do not have a corresponding LOGOFF event
        -- with an OPERATION_TIME that is greater than or equal to the LOGON event.
        DELETE FROM datasafe_audit_logs a
        WHERE a.EVENT = 'LOGON'
        AND NOT EXISTS (
            SELECT 1
            FROM datasafe_audit_logs b
            WHERE a.TARGET = b.TARGET
            AND a.DB_USER = b.DB_USER
            AND a.CLIENT_HOST = b.CLIENT_HOST
            AND b.EVENT = 'LOGOFF'
            AND b.OPERATION_TIME >= a.OPERATION_TIME  -- Ensure LOGOFF happened after or at the same time
        );
    
        -- Commit the deletions
        COMMIT;
    END process_datasafe_audit_logs;
    /
    
    EXEC process_datasafe_audit_logs;
    

    「Create Identity Domain」を選択します。

タスク5: Oracle Machine Learningノートブックの作成

OML_USERの下にOMLノートブックを設定して、異常検出およびユーザー動作分析を実行します。

  1. 「開発」にナビゲートし、「Oracle Machine Learning」をクリックします。

    「Create Identity Domain」を選択します。

  2. OML_USERとしてログインし、新しいノートブックを作成します。

    「Create Identity Domain」を選択します。

    「Create Identity Domain」を選択します。

    「Create Identity Domain」を選択します。

タスク6: OML4SQLを使用したデータベース・ユーザーの異常の分析

SQLおよびOML4SQLを使用してセッション期間を計算し、異常なパターンを検出することで、データベース・ユーザーの異常を分析します。

  1. OML4SQLおよびOML4Py、OML4Rなどのその他のコンポーネントのSQLを選択するには、段落の下部にカーソルを移動します。このチュートリアルでは、OML4SQLを使用します。

    「Create Identity Domain」を選択します。

  2. 段落のタイトルを追加します。

    「Create Identity Domain」を選択します。

  3. セッション・データを取得するビュー(user_session_data)を作成します。

    CREATE OR REPLACE VIEW user_session_data AS
    WITH session_data AS (
        SELECT
            target,
            db_user,
            client_host,
            operation_time AS logon_time,
            LEAD(operation_time) OVER (
                PARTITION BY target, db_user, client_host
                ORDER BY operation_time
            ) AS logoff_time
        FROM datasafe_audit_logs
        WHERE event = 'LOGON'
    )
    SELECT * FROM session_data WHERE logoff_time IS NOT NULL;
    

    「Create Identity Domain」を選択します。

  4. セッション期間を計算し、サマリー・ビューを作成します(user_activity_summary)。1つ以上のSQL段落を追加し、問合せを配置して実行アイコンをクリックします。

    CREATE OR REPLACE VIEW user_activity_summary AS
    SELECT
        target,
        db_user,
        client_host,
        COUNT(*) AS total_logins,
        ROUND(
            AVG(
                EXTRACT(DAY FROM (logoff_time - logon_time)) * 24 * 60 +
                EXTRACT(HOUR FROM (logoff_time - logon_time)) * 60 +
                EXTRACT(MINUTE FROM (logoff_time - logon_time)) +
                EXTRACT(SECOND FROM (logoff_time - logon_time)) / 60
            ), 2
        ) AS avg_session_duration_minutes
    FROM user_session_data
    GROUP BY target, db_user, client_host;
    

    「Create Identity Domain」を選択します。

タスク7: 異常検出モデルの構築

OML4SQLで1クラスSVMを使用して、ターゲット・データベースごとにAIベースの異常検出モデルを作成します。

  1. OML4SQLのスクリプトを選択するには、段落の下部にカーソルを移動します。

    「Create Identity Domain」を選択します。

  2. 1クラスSVMの設定表(anomaly_model_settings)を作成します。

    %script
    CREATE TABLE anomaly_model_settings (
    setting_name  VARCHAR2(30),
    setting_value VARCHAR2(4000)
    );
    
    -- Insert settings for One-Class SVM
    BEGIN
       INSERT INTO anomaly_model_settings (setting_name, setting_value) VALUES ('ALGO_NAME', 'ALGO_SUPPORT_VECTOR_MACHINES');
       INSERT INTO anomaly_model_settings (setting_name, setting_value) VALUES ('SVMS_OUTLIER_RATE', '0.05');  -- 5% of data as anomalies
       COMMIT;
    END;
    

    「Create Identity Domain」を選択します。

  3. DBMS_DATA_MINING.CREATE_MODELを使用して、ターゲット・データベースごとに異常検出モデルを構築します。

    %script
    DECLARE
        CURSOR target_cursor IS
            SELECT DISTINCT target
            FROM user_activity_summary;
    BEGIN
        FOR target_rec IN target_cursor LOOP
            DBMS_DATA_MINING.CREATE_MODEL(
                model_name          => 'ANOMALY_DETECTION_MODEL_' || REPLACE(target_rec.target, ' ', '_'),
                mining_function     => dbms_data_mining.classification,
                data_table_name     => 'USER_ACTIVITY_SUMMARY',
                case_id_column_name => 'DB_USER',
                target_column_name  => NULL,  -- No target column for anomaly detection
                settings_table_name => 'ANOMALY_MODEL_SETTINGS'
            );
        END LOOP;
    END;
    

    「Create Identity Domain」を選択します。

  4. モデル作成を確認します。

    %sql
    SELECT model_name, mining_function, algorithm, creation_date FROM user_mining_models where model_name like 'ANOMALY_DETECTION_MODEL_%';
    

    「Create Identity Domain」を選択します。

タスク8: モデルの適用による異常の検出

異常予測を実行して、疑わしいユーザー・アクティビティを分類し、結果を構造化された表に格納します。

  1. 各ターゲット・データベースの異常なユーザーを格納する表を作成します。OML4SQLのスクリプトを選択するには、段落の下部にカーソルを移動します。

    .%script
    DECLARE
       CURSOR target_cursor IS
           SELECT DISTINCT target
           FROM user_activity_summary;
    BEGIN
       FOR target_rec IN target_cursor LOOP
           EXECUTE IMMEDIATE '
               CREATE TABLE anomalous_users_' || REPLACE(target_rec.target, ' ', '_') || ' AS
               SELECT
                   target,
                   db_user,
                   client_host,
                   total_logins,
                   avg_session_duration_minutes
               FROM (
                   SELECT
                       target,
                       db_user,
                       client_host,
                       total_logins,
                       avg_session_duration_minutes,
                       PREDICTION(ANOMALY_DETECTION_MODEL_' || REPLACE(target_rec.target, ' ', '_') || ' USING *) AS prediction
                   FROM user_activity_summary
                   WHERE target = ''' || target_rec.target || '''
               )
               WHERE prediction = 0';  -- Filter for anomalous users
       END LOOP;
    END;
    

    「Create Identity Domain」を選択します。

  2. 異常なユーザー・データを確認します。

    %sql
    SELECT * FROM ANOMALOUS_USERS_ADBIDCS3
    UNION ALL
    SELECT * FROM ANOMALOUS_USERS_DBAAS23PDB
    UNION ALL
    SELECT * FROM ANOMALOUS_USERS_DBAAS23PDB2;
    

    「Create Identity Domain」を選択します。

タスク9: Oracle APEXでの異常のビジュアル化

異常なデータベース・アクティビティをリアルタイムで監視および分析するチャートを含む対話型ダッシュボードを開発します。

  1. OCIコンソールからOracle APEXを起動します。

    「Create Identity Domain」を選択します。

    「Create Identity Domain」を選択します。

  2. OML_USERとしてログインし、新しいアプリケーションを作成します。

    「Create Identity Domain」を選択します。

    「Create Identity Domain」を選択します。

  3. 4つのチャートを含むダッシュボードを作成します。

    「Create Identity Domain」を選択します。

    「Create Identity Domain」を選択します。

    • チャート1:疑わしいユーザー テーブル(クラシック レポート)。

      SQL : %sql
      SELECT * FROM (
          SELECT * FROM ANOMALOUS_USERS_ADBIDCS3
          UNION ALL
          SELECT * FROM ANOMALOUS_USERS_DBAAS23PDB
          UNION ALL
          SELECT * FROM ANOMALOUS_USERS_DBAAS23PDB2
      )
      ORDER BY avg_session_duration_minutes DESC;
      

      「Create Identity Domain」を選択します。

    • チャート2:データベースごとの異常なユーザー(円グラフ)。

      SQL : %sql
      SELECT TARGET, COUNT(DB_USER) AS anomaly_count
      FROM (
          SELECT * FROM ANOMALOUS_USERS_ADBIDCS3
          UNION ALL
          SELECT * FROM ANOMALOUS_USERS_DBAAS23PDB
          UNION ALL
          SELECT * FROM ANOMALOUS_USERS_DBAAS23PDB2
      )
      GROUP BY TARGET;
      

      「Create Identity Domain」を選択します。

      「Create Identity Domain」を選択します。

    • チャート3:セッション時間トレンド(折れ線グラフ)。

      SELECT
      DB_USER,
      (AVG(AVG_SESSION_DURATION_MINUTES) / 60) AS session_duration_hours,
      TARGET
      FROM (
      SELECT * FROM ANOMALOUS_USERS_ADBIDCS3
      UNION ALL
      SELECT * FROM ANOMALOUS_USERS_DBAAS23PDB
      UNION ALL
      SELECT * FROM ANOMALOUS_USERS_DBAAS23PDB2
      )
      GROUP BY DB_USER, TARGET;
      

      「Create Identity Domain」を選択します。

      「Create Identity Domain」を選択します。

    • チャート4:異常が最も多い上位ユーザー(棒グラフ)。

      SQL : %sql
      SELECT
          DB_USER AS x_value,  -- Ensure DB_USER is used as the category (X-Axis)
          COUNT(*) AS y_value,  -- Anomaly count or other metric
          TARGET
      FROM (
          SELECT * FROM ANOMALOUS_USERS_ADBIDCS3
          UNION ALL
          SELECT * FROM ANOMALOUS_USERS_DBAAS23PDB
          UNION ALL
          SELECT * FROM ANOMALOUS_USERS_DBAAS23PDB2
      )
      GROUP BY DB_USER, TARGET
      ORDER BY y_value DESC;
      

      「Create Identity Domain」を選択します。

      「Create Identity Domain」を選択します。

  4. ページを実行し、ダッシュボードURLをチームと共有します。

    「Create Identity Domain」を選択します。

    「Create Identity Domain」を選択します。

次のステップ

このチュートリアルでは、Oracle Database 23ai、Oracle Data SafeおよびOracle APEXを使用したデータベース・セキュリティに対するAI主導のアプローチを示します。ここで、

  1. セッション期間を分析するために処理されたログインおよびログオフ・データ。
  2. OML4SQLを使用して異常検出モデルを構築しました。
  3. Oracle APEXダッシュボードで結果を視覚化し、リアルタイム監視を実現します。

機械学習とインタラクティブなダッシュボードを統合することで、セキュリティ・チームは疑わしいアクティビティをプロアクティブに検出して軽減できます。このスケーラブルなソリューションは、Oracleの組込みAI/ML機能を活用して、不正検出、ネットワーク・セキュリティなどにまで及び、シームレスな実装を実現します。

承認

その他の学習リソース

docs.oracle.com/learnの他のラボを確認するか、Oracle Learning YouTubeチャネルで無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスしてOracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。