加密源数据库中的数据

透明数据加密 (TDE ) 透明地加密 Oracle Database 中的休息数据。它停止来自操作系统的未授权尝试访问存储在文件中的数据库数据,而不影响应用程序如何使用 SQL 访问数据。 TDE 与 Oracle Database 完全集,可以加密整个数据库备份 (RMAN)、数据泵导出、整个应用程序表空间或特定敏感列。加密的数据在数据库中保持加密,无论是在表空间存储文件、临时表空间、还原表空间还是重做日志等其他文件中。

确定是否在源数据库上启用 TDE

在源数据库上未启用透明数据加密 (Transparent Data Encryption, TDE ) 时,将数据库迁移到 Oracle Cloud Infrastructure (OCI) 或灾难恢复期间不会加密数据。您需要手动加密未加密的数据。在 OCI 中,将自动加密任何新数据。

  1. 确定表空间是否已加密。
    SQL> select tablespace_name, encrypted from dba_tablespaces;

    表空间未加密时,输出将类似于以下内容:

    TABLESPACE_NAME 	       		ENC
    ------------------------------ ---
    SYSTEM                          NO
    SYSAUX                          NO
    UNDOTBS1                        NO
    TEMP                            NO
    USERS			      NO
  2. 在文件系统中查找关联的数据库数据文件 (.dbf)。
    SQL> select TABLESPACE_NAME, FILE_NAME from dba_data_files;

    输出看起来类似于以下内容:

    TABLESPACE_NAME
    ------------------------------
    FILE_NAME
    
    SYSTEM
    /opt/oracle/oradata/ORCLCDB/system01.dbf
    
    SYSAUX
    /opt/oracle/oradata/ORCLCDB/sysaux01.dbf
    
    UNDOTBS1
    /opt/oracle/oradata/ORCLCDB/undotbs01.dbf
    
    USERS
    /opt/oracle/oradata/ORCLCDB/users01.dbf

在源数据库上启用 TDE 加密

使用透明数据加密 (TDE ) 可以加密存储在表和表空间中的敏感数据。对于有权访问数据的数据库用户或应用程序,将以透明方式解密加密数据。

  1. 转到源数据库中的 $ORACLE_BASE 目录。
    bash-4.2$ pwd
    /opt/oracle/admin/ORCLCDB
  2. 创建名为 wallet 的目录。
    $ mkdir wallet
  3. 创建 Wallet 以及使用字母数字字符组合的安全口令。
    此步骤将创建并打开 Wallet。打开数据库后,Wallet 将保持打开状态,直到显式关闭 Wallet 或关闭数据库,此时 Wallet 将自动关闭。
    SQL> alter system set encryption key identified by "wallet_password";
  4. 重新启动数据库后重新打开已关闭的 Wallet。
    SQL> alter system set wallet open identified by "wallet_password";
  5. 加密表空间。
    以下代码使用 AES-128 加密。
    alter tablespace system encryption online using 'aes128' encrypt file_name_convert=('/opt/oracle/oradata/ORCLCDB/system01.dbf','/opt/oracle/oradata/ORCLCDB/system01_enc.dbf');
    
    alter tablespace sysaux encryption online using 'aes128' encrypt file_name_convert=('/opt/oracle/oradata/ORCLCDB/sysaux01.dbf','/opt/oracle/oradata/ORCLCDB/sysaux01_enc.dbf');
    
    alter tablespace undotbs1 encryption online using 'aes128' encrypt file_name_convert=('/opt/oracle/oradata/ORCLCDB/undotbs01.dbf','/opt/oracle/oradata/ORCLCDB/undotbs01_enc.dbf');
    
    alter tablespace users encryption online using 'aes128' encrypt file_name_convert=('/opt/oracle/oradata/ORCLCDB/users01.dbf','/opt/oracle/oradata/ORCLCDB/users01_enc.dbf');
    
  6. 请确保表空间已加密。
    SQL> select tablespace_name, encrypted from dba_tablespaces;

    输出看起来类似于以下内容:

    TABLESPACE_NAME 	       ENC
    ------------------------------ ---
    SYSTEM			    YES
    SYSAUX			    YES
    UNDOTBS1                       YES
    TEMP			      NO
    USERS			     YES
  7. 验证文件系统上的关联数据库数据文件 (.dbf) 是否已加密。
    SQL> select TABLESPACE_NAME, FILE_NAME from dba_data_files;

    输出看起来类似于以下内容:

    TABLESPACE_NAME
    ------------------------------
    FILE_NAME
    
    SYSTEM
    /opt/oracle/oradata/ORCLCDB/system01_enc.dbf
    
    SYSAUX
    /opt/oracle/oradata/ORCLCDB/sysaux01_enc.dbf
    
    UNDOTBS1
    /opt/oracle/oradata/ORCLCDB/undotbs01_enc.dbf
    
    USERS
    /opt/oracle/oradata/ORCLCDB/users01_enc.dbf