选择并实施您的部署

使用本部分介绍的方法保护 Oracle Autonomous Database Serverless@Azure:

  1. 使用透明数据加密和 Azure Key Vault
  2. 配置和启用 Oracle Database Vault
  3. 使用 Oracle Data Safe 注册数据库
  4. 通过与 Entra ID 集成来集中用户身份验证和授权
  5. 统一审计和数据库管道,将数据导出到 Azure Blob 存储
  6. 使用适用于 Oracle Database 23ai 的 Oracle SQL Firewall

选项 1:使用透明数据加密和 Azure Key Vault

在所有 Oracle Autonomous Database Serverless 数据库中,默认情况下会配置和启用 Oracle Transparent Data Encryption (TDE)。

以下步骤将显示如何验证默认 TDE 设置。接下来,我们将介绍使用 Azure Key Vault 为 Oracle Autonomous Database Serverless 实施客户管理的加密的步骤。



adbs-key-vault-arch-oracle.zip

要实施此处提供的计划,您必须首先满足以下先决条件:

  • 使用 Microsoft Azure 控制台部署 Oracle Autonomous Database Serverless 实例
  • 创建 Azure Key Vault(标准或高级)
  • 在 Azure Key Vault 中创建 RSA 2048 位密钥
  • Autonomous Database 创建服务主体

要使用 TDE 和 Azure 密钥库,请执行以下步骤:

  1. Oracle Autonomous Database Serverless 实例的 azure 服务主体分配服务主体 Vault 访问策略:
    1. 转到 Azure Key Vault 实例。
    2. 依次单击设置访问配置
    3. 单击 Vault Access Policy
    4. 单击转到访问策略
  2. 创建 Vault 访问策略:
    1. 选择权限:
      • 获取
      • 列出
      • 加密
      • Sign
      • 验证
    2. 单击下一步
  3. 选择为 Oracle Autonomous Database Serverless 实例创建的服务主体
    1. 继续单击下一步,直到转到“复查并创建”。
    2. 单击创建
  4. 收集 Oracle Cloud Infrastructure (OCI) 中要用于配置 Oracle Autonomous Database Serverless 进行密钥管理的以下信息。
    • Vault URI
    • 密钥名称
  5. 从 Azure Key Vault 实例中,复制密钥的名称。
  6. 在 OCI 中,转到 Oracle Autonomous Database Serverless 实例。
    1. 单击更多操作
    2. 单击管理加密密钥
    3. 单击使用客户管理的密钥进行加密
    4. 从“密钥类型”菜单中,选择 Azure
    5. 使用 Azure 中的信息填充以下字段:
      • Vault URI(不包括尾随斜杠)
      • 密钥名称
    6. 单击保存
      Autonomous Database 将在再次显示“Available(可用)”时更新,您也可以在 Autonomous Database Details(自治数据库详细信息)中查看新分配的密钥。

      密钥历史记录还应显示客户托管密钥 (Microsoft Azure) 现在是用于 TDE 的主加密密钥。

  7. 以管理员身份登录数据库并验证 TDE。

    打开数据库客户端并连接到新预配的数据库。连接后,使用 CloudShell 或类似方法运行此 SQL 查询,以验证数据库是否具有 TDE 主密钥以及表空间是否使用 AES256 进行加密。

    SQL> set page 900
    SQL> set linesize 900
    column activation_time format a40
    column tag format a150
    column pdb_name format a40
    column tablespace_name format a30
    column algorithm format a10SP2-0158: unknown SET option "page"
    SQL> SQL> SQL> SQL> SQL> SQL>
    SQL> select KEY_ID,ACTIVATION_TIME,KEY_USE from V$ENCRYPTION_KEYS;
    
    KEY_ID
    ------------------------------------------------------------
    ACTIVATION_TIME                          KEY_USE
    ---------------------------------------- -----------------
    ATAQECQ0Q8NaSEBa0dDOQ8EPMAAAAAAAAAAAAAAAAAA== 06-MAY-25 01.41.04.516182 PM +00:00  TDE IN PDB
    AVAK/QOQ6Bac3xAJEBAQDAUAAAAAAAAAAAAAAAAAAA== 06-MAY-25 01.58.34.616781 PM +00:00  TDE IN PDB
    
    SQL> select a.name pdb_name, b.name tablespace_name, c.ENCRYPTIONALG algorithm
      2    from v$pdbs a, v$tablespace b, v$encrypted_tablespaces c
      3   where a.con_id = b.con_id
      4     and b.con_id = c.con_id
      5     and b.ts# = c.ts#;
         2    3    4    5
    
    PDB_NAME                                 TABLESPACE_NAME                ALGORITHM
    ---------------------------------------- ------------------------------ ----------
    G283BFEA6ED35C8_MULTICLOUDWEBINAR01      SYSTEM                         AES256
    G283BFEA6ED35C8_MULTICLOUDWEBINAR01      SYSAUX                         AES256
    G283BFEA6ED35C8_MULTICLOUDWEBINAR01      UNDOTBS1                       AES256
    G283BFEA6ED35C8_MULTICLOUDWEBINAR01      USERS                          AES256
    G283BFEA6ED35C8_MULTICLOUDWEBINAR01      DBFS_DATA                      AES256
    G283BFEA6ED35C8_MULTICLOUDWEBINAR01      TEMP                           AES256
    
    6 rows selected.
    
    SQL>

选项 2:配置和启用 Oracle Database Vault

Oracle Autonomous Database Serverless 实例中配置并启用 Oracle Database Vault ,以保护数据免受未经授权的特权账户访问。

您需要创建一些额外的数据库账户,以便于 Oracle Database Vault 职责分离。启用 Oracle Database Vault 后,创建一个 Oracle Database Vault 领域,以将敏感数据与数据库中的高权限帐户分开。

要配置和启用 Oracle Database Vault

  1. Oracle Database Vault 配置创建必要的账户。

    Oracle 建议创建多个帐户,以确保永远不会锁定您的数据。丢失这些帐户的密码可能会使您的数据无法访问。

    登录到 Oracle Autonomous Database Serverless 数据库并创建四个数据库账户:将向两个账户分配 Database Vault 所有者角色,并向两个账户分配 Database Vault 账户管理器角色。

    使用以下示例代码创建帐户,其中 <user_name> 是用于标识关联帐户的名称。

    Connected to:
    Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems
    Version 23.8.0.25.05
    
    SQL> create user DBOWNER identified by "<user_name>";
    User created.
    
    SQL> create user DBVACCTMGR identified by "<user_name>";
    User created.
    
    SQL> create user DBOWNER_BACKUP identified by "<user_name>";
    User created.
    
    SQL> create user DBVACCTMGR_BACKUP identified by "<user_name>";
    User created.
    
    SQL> grant connect, resource to DBOWNER;
    Grant succeeded.
    
    SQL> grant connect, resource to DBOWNER_BACKUP;
    Grant succeeded.
    
    SQL> grant connect, resource to DBVACCTMGR;
    Grant succeeded.
    
    SQL> grant connect, resource to DBVACCTMGR_BACKUP;
    Grant succeeded.
    
    SQL> show con_name;
    
    CON_NAME
    ------------------------------
    G283BFEA6ED35C8_MULTICLOUDWEBI
    NAR01
    
    SQL> select * from dba_dv_status;
    
    NAME                STATUS
    ------------------  ----------------
    DV_APP_PROTECTION   NOT CONFIGURED
    DV_CONFIGURE_STATUS FALSE
    DV_ENABLE_STATUS    FALSE
    SQL>
    
  2. 配置和启用 Oracle Database Vault
    1. admin 身份登录数据库,并执行以下程序包来配置 Oracle Database Vault
      SQL>
      SQL> EXEC DBMS_CLOUD_MCADM.CONFIGURE_DATABASE_VAULT('DBVOWNER', 'DBVACCTMGR');
       
      PL/SQL procedure successfully completed.
      配置 Oracle Database Vault 后,启用它。启用 Oracle Database Vault 后,具有 Database Vault 所有者角色的账户可以管理 Vault 配置,具有 Database Vault 帐户管理员角色的账户可以在数据库中创建和管理账户。现在,您可以利用数据库中的职责划分。
    2. 重新启动数据库。
      从 OCI 中的数据库实例页面中,单击更多操作,然后选择重新启动
    3. 使用以下示例代码验证 Oracle Database Vault 是否已配置和启用。
      Connected to:
      Oracle Database 23ai Enterprise Edition Release 23.0.0.0.0 - for Oracle Cloud and Engineered Systems
      Version 23.0.0.25.0
      
      SQL> SELECT * FROM DBA_DV_STATUS;
      
      NAME                     STATUS
      ------------------------ ----------------
      DV_APP_PROTECTION        NOT CONFIGURED
      DV_CONFIGURE_STATUS      TRUE
      DV_ENABLE_STATUS         TRUE
      
      SQL>
    4. 授予 Oracle Database Vault 角色以备份账户:
      
      SQL> grant DV_OWNER to DBOWNER_BACKUP;
      
      Grant succeeded.
      
      SQL> grant DV_ACCTMGR to DBVACCTMGR_BACKUP;
      
      Grant succeeded.
      
      SQL>  
  3. 创建领域以将敏感数据与特权帐户分开。
    1. 在创建领域之前,以 admin 身份登录并验证特权帐户是否有权访问敏感数据(在本例中为人力资源 (HR) 数据):
      SQL> show user;
      USER is "ADMIN"
      SQL> select EMPLOYEE_ID,FIRST_NAME,LAST_NAME,SALARY from HR.EMPLOYEES where ROWNUM < 8;
      
      EMPLOYEE_ID FIRST_NAME      LAST_NAME                 SALARY
      ----------- --------------- ------------------------- ----------
              100 Steven          King                         24000
              101 Neena           Yang                         17000
              102 Lex             Garcia                       17000
              103 Alexander       James                         9000
              104 Bruce           Miller                        6000
              105 David           Williams                      4800
              106 Valli           Jackson                       4800
      
      7 rows selected.
      
      SQL>
    2. 以具有 Database Vault 所有者角色的用户身份登录 Oracle Autonomous Database Serverless 。执行此 PL/SQL 块以创建名为 Protect HR Data 的领域:
      SQL> begin
        2  DVSYS.DBMS_MACADM.CREATE_REALM(
        3     realm_name => 'Protect HR Data'
        4    , description => 'This Realm will protect HR data from unauthorized privileged user access'
        5    , enabled => 'Y'
        6    , realm_type => DBMS_MACADM.MANDATORY_REALM );
        7  end;
        8  /
      PL/SQL procedure successfully completed.
      
      SQL>
    3. 添加要受领域保护的数据库对象。执行此 PL/SQL 块以将 HR 方案中的所有表添加到“保护 HR 数据”领域:
      SQL> begin
        DVSYS.DBMS_MACADM.ADD_OBJECT_TO_REALM(
          realm_name => 'Protect HR Data',
          object_owner => 'HR',
          object_name => '%',
          object_type => 'TABLE');
      end;
      / 
      2    3    4    5    6    7    8
      
      PL/SQL procedure successfully completed.
      
      SQL>
    4. 执行此 PL/SQL 块以将 HR 方案账户和 HR 经理 hr_debra 添加为领域授权参与者。这将确保只有应用程序服务帐户和人力资源经理才能访问人力资源方案中的数据。数据库中的任何 DBA 账户或任何其他高权限账户都无法访问 Database Vault 领域保护的数据。
      SQL> begin
        DVSYS.DBMS_MACADM.ADD_OBJECT_TO_REALM(
          realm_name => 'Protect HR Data',
          object_owner => 'HR',
          object_name => '%',
          object_type => 'TABLE');
      end;
      /  2    3    4    5    6    7    8
      
      PL/SQL procedure successfully completed.
      
      SQL>
    5. 验证 ADMIN 不能再访问 HR 数据:
      SQL> 
      SQL> show user;
      USER is "ADMIN"
      SQL> select EMPLOYEE_ID,FIRST_NAME,LAST_NAME,SALARY from HR.EMPLOYEES where ROWNUM < 8;
      select EMPLOYEE_ID,FIRST_NAME,LAST_NAME,SALARY from HR.EMPLOYEES where ROWNUM < 8
                                                                                       *
      ERROR at line 1:
      ORA-01031: insufficient privileges
      
      
      SQL>

选项 3:在 Oracle Data Safe 中注册数据库

Oracle Data Safe 是面向您的 Oracle 数据库的统一控制中心和,它可以帮助您了解数据敏感性,评估数据风险,屏蔽敏感数据,实施和监视安全控制,评估用户安全性,监视用户活动,以及满足数据安全合规性要求。

在此选项中,您将目标实例注册到 Oracle Data Safe 。成功注册后,查看安全评估和用户评估结果,并为每个结果配置基线。

要将数据库注册到 Oracle Data Safe ,请执行以下步骤:

  1. 使用 Oracle Data Safe 注册目标数据库:
    1. 在 OCI 控制台中,依次单击 Oracle Database 和数据安全下的概览。单击左侧导航窗格中的目标数据库,然后单击注册数据库
    2. 选择 Oracle Autonomous Database Serverless ,输入所需的信息,然后单击注册
    3. 成功注册目标后,Oracle Data Safe 将启动安全评估扫描和用户评估扫描。
  2. 查看安全评估:
    1. 在“数据安全概览”页中,单击左侧导航窗格中的安全评估。选择目标概要选项卡,然后单击数据库的目标概要。
    2. 向下滚动并查看每个查找结果。如有必要,请采取纠正措施并启动其他扫描。如果您对当前扫描结果感到满意并接受查找结果,请单击设置为基线。将来的所有扫描都将与基线进行比较,如果数据库配置与设定的基线不同,您将收到通知。
  3. 查看用户评估:
    1. 在“数据安全概览”页中,单击左侧导航窗格中的“安全评估”。选择目标概要选项卡,然后单击数据库的目标概要。
    2. 向下滚动并查看每个查找结果。如有必要,请采取纠正措施并启动其他扫描。如果您对当前扫描结果感到满意并接受查找结果,请单击设置为基线。将来的所有扫描都将与基线进行比较,如果数据库配置与设定的基线不同,您将收到通知。

选项 4:通过与 Entra ID 集成来集中用户验证和授权

随着数据库实例数量的增加,管理 Oracle Database 用户的用户和凭证将很快成为一种具有挑战性的管理负担。

几十年来,Oracle 一直在创建创新解决方案来缓解此问题。Oracle Autonomous Database 认可 Microsoft 云身份平台 Entra ID(以前称为 Active Directory)颁发的 OAuth2 令牌。通过此功能,您可以在中央云身份解决方案中管理用户和角色,而 Oracle Autonomous Database 则将这些凭证用于基于策略的访问控制。

验证流显示在下图中,并按以下步骤进行说明:



azure-authentication-oracle.zip

  1. Azure 用户请求访问 Oracle Autonomous Database Serverless 实例。
  2. 数据库客户机或应用程序从 Entra ID 请求授权代码。
  3. Entra ID 对用户进行验证并返回授权代码。
  4. 帮助程序工具或应用程序使用带有 Entra ID 的授权代码将其交换为 OAuth2 标记。
  5. 数据库客户机将 OAuth2 访问令牌发送到 Oracle 数据库。该令牌包括用户在数据库的 Entra ID 应用程序注册中分配到的数据库应用程序角色。
  6. Oracle Autonomous Database Serverless 实例使用 Entra ID 公钥来验证访问令牌是否由 Entra ID 创建。

要实施此处提供的计划,您必须首先满足以下先决条件:

  • Oracle Autonomous Database Serverless 设置为 Microsoft Azure Entra ID 企业应用程序(教程在“浏览更多”部分中引用)。
  • 设置 SQL Developer Client 以实现无缝的 Azure Entra ID 验证。

要将验证与 Microsoft Entra ID 集成,请执行以下步骤:

  1. 配置 Oracle Autonomous Database Serverless 以使用 Azure Entra ID 中的企业应用程序进行验证。

    以下过程指示 Oracle Autonomous Database Serverless 将 Entra ID 租户用作身份提供者,并具体绑定企业应用程序签发的 OAuth2 令牌以授权数据库。

    1. 登录到 Oracle Database Actions (SQL Developer Web) 实例。
    2. 在左侧面板中,选择相应的连接
    3. 单击搜索栏上方的菜单中的视图
    4. 在搜索栏中,输入视图的名称(如 MULTICLOUD_DEMO_AZURE_CONFIGS),以快速查找视图,然后单击视图名称。
    5. 输入以下 SQL 代码,其中包含关联的租户 ID 和应用程序 URI:
      BEGIN
          DBMS_CLOUD_ADMIN.ENABLE_EXTERNAL_AUTHENTICATION(
              type   => 'AZURE_AD',
              params => JSON_OBJECT('tenant_id' VALUE '<tenant_id>',
                                    'application_id' VALUE 'f2c359b4-c3f9-4415-a333-332340376e59',
                                    'application_id_uri' VALUE '<application_id_uri>'),
              force => TRUE
          );
      END;
  2. 创建用户关联:
    1. Oracle Autonomous Database Serverless 中创建用户方案,并将该用户与 Entra ID 中的用户主用户 ID 关联。定义全局用户表示使用 Entra ID 标记主题来断言数据库用户的身份。
      对于此用例,使用“属于数据库的实体 ID”的一对一映射。对于较大的部署,管理员可以选择基于 Entra ID 中的角色和组成员资格配置共享方案用户映射。
    2. 向 Oracle Database Actions (SQL Developer Web) 实例中的数据库用户授予连接功能:
      CREATE USER <azure_user_name> IDENTIFIED GLOBALLY AS 'AZURE_USER=<azure_user_name>';
      
      grant connect to <azure_user_name>;
  3. 使用 Oracle SQL Developer 和 Entra ID 登录到数据库。
    打开 Oracle SQL Developer ,并使用最新的 JDBC 库配置与 Oracle Autonomous Database Serverless 实例的连接,以允许使用 Azure Entra ID 进行交互式登录。
    1. Oracle SQL Developer “连接”面板上,单击新建连接
    2. 指定连接名称。
    3. 选择 OS 作为验证类型。
    4. 选择定制 JDBC 作为连接类型。
    5. 输入 JDBC URL:
      jdbc:oracle:thin:@config=<jdbc_url>
    6. 通过单击测试来验证连接,该测试将打开浏览器以交互方式登录到 Entra ID。
    7. 使用已映射为数据库全局用户的用户进行验证。
      成功登录后,将建立打开的 SQL 连接。
    8. 运行 show user 以返回方案用户。
      show user;
      select sys_context('USERENV', 'AUTHENTICATED_IDENTITY') from dual;
    9. 检查会话的上下文以显示已验证的主体保留 Entra ID 主体。
      这由统一审计线索用于将 Entra ID 用户与已验证主体执行的事务处理关联。
    10. 单击数据库连接窗口中的保存

选项 5:统一审计和数据库管道以将数据导出到 Azure Blob 存储

拥有强大的预防性安全控制只是战斗的一半;公司还必须审计和监控他们的系统,即使他们没有受到攻击。

创建数据库事务处理的审计线索是一种确保可跟踪性的强大方法。Oracle Autonomous Database 包含已准备好配置和部署的管道,可将这些审计日志推送到您选择的多云存储。本节说明如何轻松地使用现有的 Entra ID 服务主体(在上一节中创建)以连续的时间间隔将审计线索推送到 Azure Blob Storage。



adbs-pipeline-export-arch-oracle.zip

要实施此处提供的计划,您必须首先满足以下先决条件:

  • 使用 Oracle Data Safe 启用统一的审计线索。
  • Oracle Autonomous Database Serverless 创建服务主体。
  • 创建 Azure 存储账户。
  • 在 Azure 存储账户中为 Oracle Autonomous Database Serverless 审计日志创建专用容器。

要使用和存储审计日志,请执行以下步骤:

  1. 将 Storage Blob Data Contributor 角色分配给 Oracle Autonomous Database Serverless 服务主体:
    1. 在 Azure 门户中,选择以前创建的存储账户。
    2. 单击访问控制 (IAM)
    3. 依次单击添加添加角色分配
    4. 使用“搜索”栏搜索 Storage Blob Data Contributor
    5. 单击 Storage Blob Data Contributor 角色。
    6. 单击下一步
  2. Oracle Autonomous Database Serverless 服务主体添加到角色分配中。
    1. 在“成员”部分中,搜索 Oracle Autonomous Database Serverless 服务主体。
    2. 分配成员资格。
    3. 单击复查 + 分配
  3. 从 Azure 存储容器位置配置管道属性。

    打开 SQL 工作表并执行以下 SQL 过程,其中 <storage_location_url> 是 Azure 存储位置的 URL:

    BEGIN
    DBMS_CLOUD_PIPELINE.SET_ATTRIBUTE( pipeline_name => 'ORA$AUDIT_EXPORT',
      attribute_name => 'credential_name',
      attribute_value => 'AZURE$PA' );
    
    DBMS_CLOUD_PIPELINE.SET_ATTRIBUTE( pipeline_name => 'ORA$AUDIT_EXPORT',
      attribute_name => 'location',
      attribute_value => '<storage_location_url>' );
    
    DBMS_CLOUD_PIPELINE.SET_ATTRIBUTE( pipeline_name => 'ORA$AUDIT_EXPORT',
      attribute_name => 'interval',
      attribute_value => '15' );
    
    END;
    /
  4. 要测试导出管道并将其设置为运行,请执行以下语句:
    /* THIS RUNS THE PIPELINE ONCE*/
    /
    BEGIN DBMS_CLOUD_PIPELINE.RUN_PIPELINE_ONCE( pipeline_name => 'ORA$AUDIT_EXPORT' );
    END;
    /
    
    /* IF SUCCESSFUL - THIS WILL RESET THE PIPELINE*/
    /
    BEGIN DBMS_CLOUD_PIPELINE.RESET_PIPELINE( pipeline_name => 'ORA$AUDIT_EXPORT', purge_data => TRUE);
    END;
    /
    
    /* THIS WILL MAKE IT ACTIVE AND RUNNING ON THE SET INTERVAL */
    /
    BEGIN DBMS_CLOUD_PIPELINE.START_PIPELINE( pipeline_name => 'ORA$AUDIT_EXPORT' );
    END;
    /
    如果管道配置正确,您将在管道属性中配置的 Azure Blob 存储容器中看到一个文件。随着时间的推移,它将在存储容器中创建仅包含最新统一审计线索记录的增量文件。

选项 6:使用 Oracle SQL Firewall for Oracle Autonomous Database Serverless 23ai

除了虚拟网络安全列表和网络安全组外,Oracle Autonomous Database Serverless 23ai 还附带了 Oracle SQL Firewall。

Oracle SQL Firewall 是一项深度防御功能,可在数据库运行时运行,可对数据实施基于策略和基于上下文的访问控制。

对于 Oracle Database@Azure ,SQL 防火墙策略可以提供最后一英里保护,防止未经授权的访问,无论入口点是什么。



adbs-sqlfirewall-flow-oracle.zip



adbs-sqlfirewall-arch-oracle.zip

要实施此处提供的计划,您必须首先满足以下先决条件:

  • Oracle Autonomous Database Serverless 23ai 实例中注册 Oracle Data Safe
  • Oracle Data Safe 中启用 SQL 防火墙(在“浏览更多”部分中提供了指向说明的链接)。

要将 Oracle SQL Firewall 用于 Oracle Autonomous Database Serverless 23ai,请执行以下步骤:

  1. 为您为 Entra ID 验证创建的用户开始收集 SQL 流量:
    1. 在 SQL 防火墙仪表盘中,单击 SQL 集合
    2. 指定要创建 SQL 防火墙策略的用户。
    3. 单击创建和启动 SQL 集合
  2. 在与所选用户生成一些 SQL 流量后,根据捕获的 SQL 语句配置策略:
    1. 在“SQL 收集详细信息”页上,单击停止
    2. 单击生成防火墙策略
    3. 根据需要查看并根据需要更新允许的 SQL 会话上下文值。
      例如,对于允许的语句,选择一行,单击更新,然后单击行末尾的 X 以删除允许的语句。对于测试 Puposes,您可以对所有允许的语句执行此操作。
    4. 单击部署并强制实施以启用策略。
  3. 测试启用的 SQL 防火墙策略。
    使用 SQL Developer(或任何 SQL Client),登录到数据库并作为为 SQL 防火墙策略实施创建的 Entra ID 用户进行验证(删除所有允许的 SQL 语句)。验证后,会出现错误消息,指示数据库已成功通过安全列表和网络安全组,但在 SQL 连接级别拒绝请求。
  4. 要查看违规报表,请单击 SQL 防火墙仪表盘左侧导航窗格中的违规报表