附註:

使用 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 功能進行主動式威脅偵測,強化資料庫安全性。

專案的核心是使用一級支援向量機 (SVM) ,這是一種無監督的機器學習演算法,可學習一般使用者行為,並將偏差標記為異常。透過分析登入總數和平均階段作業持續時間等功能,模型可識別不規則的活動,協助偵測潛在的安全威脅和未經授權的存取嘗試。

執行處理 IMDS 更新

使用案例:資料庫使用者異常偵測。

此使用案例著重於分析登入和登出事件,以偵測 Oracle 資料庫環境中的異常使用者登入和登出活動。系統會識別可疑模式 (例如異常階段作業持續時間或不定期登入頻率),並透過 Oracle APEX 儀表板將洞察分析視覺化,讓管理員能夠主動保護資料庫。

藉由運用 AI 和安全性分析,此方法會標記異常的登入和登出模式,協助降低潛在的安全威脅。

關鍵重點:

適用對象

目標

透過整合在 OCI 環境中導入 AI 驅動的 UBA:

主要目標是透過分析 Oracle Data Safe 登入事件資料集來識別異常的使用者行為,進而主動偵測威脅並增強資料庫安全性。

必要條件

作業 1:從 Oracle Data Safe 下載登入和登出事件資料集

從 Oracle Data Safe 產生並下載已篩選的「登入」和「登出」事件報表,然後將其轉換成 CSV 以進行資料庫匯入。

  1. 登入 OCI 主控台,瀏覽至 Oracle 資料庫資料安全活動稽核稽核報表,然後按一下所有活動

  2. 套用篩選條件以擷取「登入」和「登出」事件。

    瀏覽至區間

  3. 產生報表並以 .xls 格式下載。例如,Datasafe_LOGIN_DatasetJan2024-Feb2025_V2.xls

  4. 將檔案重新命名為 .csv 格式,以載入至 Oracle Autonomous Database。例如,Datasafe_LOGIN_DatasetJan2024-Feb2025_V2.csv

作業 2:在 Oracle Database 23ai Autonomous Database 中建立使用者

建立一個名為 OML_USER 的使用者,並在 Oracle Database 23ai 中使用必要的 OML 和 Web 存取。

  1. 移至 OCI 主控台,瀏覽至 Oracle 資料庫並按一下 Autonomous Database

  2. 按一下資料庫動作資料庫使用者

    選取建立區間

  3. 使用 OMLWeb Access 建立名為 OML_USER 的使用者。

    選取建立區間

    選取建立區間

作業 3:將資料集載入 Oracle Database 23ai Autonomous Database

使用「資料載入」上傳 CSV 資料集、驗證資料完整性,以及確保正確載入。

  1. 使用 Web 存取連結以 OML_USER 身分登入。

    選取建立識別網域

  2. 導覽至 Data Studio ,然後按一下資料載入

    選取建立識別網域

  3. 從 CSV 檔案移除備註區段,並確定其開頭為資料欄表頭。

    選取建立識別網域

  4. 按一下載入資料,選取 CSV 檔案,然後設定表格名稱。

    選取建立識別網域

    選取建立識別網域

    選取建立識別網域

    選取建立識別網域

  5. 按一下啟動並執行以載入資料。

    選取建立識別網域

  6. 驗證資料載入狀態,並修正任何被拒絕的資料列。

    選取建立識別網域

工作 4:驗證和清除資料

使用 SQL 程序來處理資料集,以移除不一致並準備資料進行分析。

  1. 導覽至開發,然後按一下 SQL 作為 OML_USER

    選取建立識別網域

  2. 建立暫存表格 (datasafe_audit_logs) 並使用 SQL 程序處理資料。

    • DATASAFE_LOGIN_RAW_DATASET 插入記錄至 datasafe_audit_logs
    • 刪除沒有對應登入記錄的登出記錄。
    • 如果沒有含較晚時間戳記的 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;
    

    選取建立識別網域

作業 5:建立 Oracle Machine Learning 記事本

OML_USER 底下設定 OML 記事本,以執行異常偵測和使用者行為分析。

  1. 導覽至開發,然後按一下 Oracle Machine Learning

    選取建立識別網域

  2. OML_USER 身分登入並建立新的記事本。

    選取建立識別網域

    選取建立識別網域

    選取建立識別網域

作業 6:使用 OML4SQL 分析資料庫使用者異常

使用 SQL 和 OML4SQL 計算階段作業持續時間及偵測異常樣式,以分析資料庫使用者異常情況。

  1. 將游標移至段落底端,以選取 OML4SQL 的 SQL 以及 OML4Py、OML4R 等其他元件的 SQL。在本教學課程中,我們將使用 OML4SQL。

    選取建立識別網域

  2. 新增段落的標題。

    選取建立識別網域

  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;
    

    選取建立識別網域

  4. 計算階段作業持續時間並建立摘要檢視 (user_activity_summary)。再新增一個 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;
    

    選取建立識別網域

作業 7:建立異常偵測模型

在 OML4SQL 中使用一級 SVM,為每個目標資料庫建立 AI 式異常偵測模型。

  1. 將游標移至段落底部,以選取 OML4SQL 的命令檔。

    選取建立識別網域

  2. 建立 One-Class 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;
    

    選取建立識別網域

  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;
    

    選取建立識別網域

  4. 驗證模型建立。

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

    選取建立識別網域

作業 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;
    

    選取建立識別網域

  2. 複查異常的使用者資料。

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

    選取建立識別網域

作業 9:視覺化 Oracle APEX 中的異常

使用圖表開發互動式儀表板,以即時監控和分析異常的資料庫活動。

  1. 從 OCI 主控台啟動 Oracle APEX。

    選取建立識別網域

    選取建立識別網域

  2. OML_USER 身分登入並建立新應用程式。

    選取建立識別網域

    選取建立識別網域

  3. 建立含有四個圖表的儀表板。

    選取建立識別網域

    選取建立識別網域

    • 圖表 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;
      

      選取建立識別網域

    • 圖表 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;
      

      選取建立識別網域

      選取建立識別網域

    • 圖表 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;
      

      選取建立識別網域

      選取建立識別網域

    • 圖表 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;
      

      選取建立識別網域

      選取建立識別網域

  4. 執行頁面並與您的團隊共用儀表板 URL。

    選取建立識別網域

    選取建立識別網域

接下來的步驟

本教學課程示範使用 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