注意:

使用 Oracle Database 23ai、Oracle Data Safe 和 Oracle APEX 实施基于 AI 的用户行为分析

简介

随着数据库环境变得越来越复杂,保护敏感数据和检测异常用户行为至关重要。此项目利用 Oracle Data Safe 日志、Oracle Machine Learning for SQL (OML4SQL) 和 Oracle Database 23ai 增强用户行为分析 (User Behavior Analytics,UBA),识别异常访问模式和潜在的安全威胁。

此分步教程演示如何使用 Oracle Machine Learning (OML)Oracle APEX 实施 AI 驱动的异常检测,从而实现实时安全监视。该解决方案专为 Database Security AdminsAutoML AdminsAI/ML AdminsAPEX Developers 设计,通过集成 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 DatabasesData SafeActivity AuditingAudit Reports ,然后单击 All Activity

  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 中创建用户

在 Oracle Database 23ai 中创建具有所需 OML 和 Web 访问权限的名为 OML_USER 的用户。

  1. 转到 OCI 控制台,导航到 Oracle Databases ,然后单击 Autonomous Database

  2. 单击 Database Actions(数据库操作)Database Users(数据库用户)

    选择创建区间

  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
    • 删除没有对应 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;
    

    选择创建身份域

任务 5:创建 Oracle Machine Learning 记事本

OML_USER 下设置 OML 记事本以执行异常检测和用户行为分析。

  1. 导航到 Development(开发),然后单击 Oracle Machine Learning

    选择创建身份域

  2. OML_USER 身份登录并创建新记事本。

    选择创建身份域

    选择创建身份域

    选择创建身份域

任务 6:使用 OML4SQL 分析数据库用户异常

通过计算会话持续时间并使用 SQL 和 OML4SQL 检测异常模式来分析数据库用户异常。

  1. 将光标移到段落底部,为 OML4SQL 和其他组件(如 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 段落并放置查询,然后单击“Run(运行)”图标。

    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. 为一类 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 帮助中心