需要 Data Reviewer 许可。
可采取多种预防措施来协助保护数据库安全,例如设计安全系统、加密机密资产以及在数据库服务器周围建立防火墙。但如果物理介质(如驱动器或备份磁带)被盗,则恶意方可以恢复或附加数据库并浏览数据。一种解决方案是对数据库中的敏感数据进行加密,并通过一个证书来保护用于加密数据的密钥。这样便可防止任何没有密钥的用户使用该数据,但此种保护必须提前计划。
透明数据加密 (TDE) 可用于加密敏感数据,例如存储在表和表空间中的信用卡号。加密数据将为能够访问数据的数据库用户或应用程序进行透明解密。TED 有助于在存储介质或数据文件被盗的情况下保护介质中存储的数据。Oracle 使用验证、授权和审计机制来保护数据库中数据的安全,但不能保护用于存储数据的操作系统数据文件中数据的安全。为保护这些数据文件,Oracle 提供了 TDE。TDE 可加密数据文件中存储的敏感数据。为防止发生未经授权的解密,TDE 将加密密钥存储在数据库以外的安全模块中。
通过 Oracle,可将新的表空间定义为已加密。将表空间定义为已加密意味着将对在操作系统中创建的物理数据文件进行加密。任何表、索引以及新表空间中定义的其他对象都将默认加密,而无需额外的存储空间要求。数据写入磁盘时会自动进行加密,并在应用程序访问数据时自动解密。
TDE 的优势包括以下内容:
- 安全管理员可在存储介质或数据文件被盗的情况下确保敏感数据的安全。
- 实施 TDE 有助于解决安全相关法规遵从问题。
- 无需创建用于为授权用户或应用程序解密数据的触发器或视图。表中的数据会为数据库用户和应用程序透明解密。
- 数据库用户和应用程序无需了解他们正在访问的数据是以加密形式存储的。数据会为数据库用户和应用程序透明解密。
- 无需为处理加密数据而对应用程序进行修改。数据的加密和解密由数据库管理。
- 密钥管理操作是自动进行的。用户或应用程序无需管理加密密钥。
Oracle 12x
有关配置 TDE 表空间加密的更多信息,请参阅 Oracle 文档。
手动配置 TDE
以下步骤显示了如何手动配置 TDE。
- 创建 keystore 目录。
mkdir $ORACLE_HOME/admin/$ORACLE_SID/wallet
- 如果希望管理加密 wallet,请修改 SQLNET.ORA 文件。
默认的加密 wallet 位置为 $ORACLE_BASE/admin/<global_db_name>/wallet。如果希望 Oracle 在默认位置下管理 wallet,则无需在 sqlnet.ora 中设置 ENCRYPTION_WALLET_LOCATION 参数。
对于 Windows
ENCRYPTION_WALLET_LOCATION= (SOURCE= (METHOD=FILE) (METHOD_DATA= (DIRECTORY=C:/oracle/admin/%ORACLE_SID%/wallet/)))
对于 Linux
ENCRYPTION_WALLET_LOCATION= (SOURCE= (METHOD=FILE) (METHOD_DATA= (DIRECTORY=/app/oracle/admin/$ORACLE_SID/wallet/)))
- 检查正确版本号的 COMPATIBLE 初始化参数。该参数应为 12.x。
ORA> sqlplus /nolog SQL> connect /as sysdba Connected. SQL> select instance_name,status,database_status from v$instance; INSTANCE_NAME STATUS DATABASE_STATUS ---------------- ------------ ----------------- mcs1 OPEN ACTIVE SQL> show parameter compatible NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ compatible string 12.1.0.0.0
- 创建 keystore。
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE 'C:\oracle\admin\mcs1\wallet' IDENTIFIED BY "mcs1$admin"; --the ewallet.p12 file, which contains the keystore, appears in the keystore location.
- 打开基于密码的 keystore。
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "mcs1$admin" CONTAINER=ALL; -- check the status SELECT WRL_PARAMETER,STATUS,WALLET_TYPE FROM V$ENCRYPTION_WALLET;
- 备份基于密码的软件 keystore。
ADMINISTER KEY MANAGEMENT BACKUP KEYSTORE USING 'keystore_bkp' IDENTIFIED BY "mcs1$admin"; SELECT WRL_PARAMETER,STATUS,WALLET_TYPE FROM V$ENCRYPTION_WALLET;
- 创建主加密密钥。
为 CDB 和所有 PDB 创建主密钥。
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "mcs1$admin" WITH BACKUP USING 'masterkey_all_bkp' CONTAINER=ALL; SELECT KEY_ID,KEYSTORE_TYPE,CREATOR,CREATOR_INSTANCE_NAME,CREATOR_PDBNAME FROM V$ENCRYPTION_KEYS;
导出主密钥。
ADMINISTER KEY MANAGEMENT EXPORT ENCRYPTION KEYS WITH SECRET "mcs1.exp$admin" TO 'C:\oracle\admin\mcs1\wallet\masterkey_cdb_exp.bkp' IDENTIFIED BY "mcs1$admin";
- 可选择创建当前容器的主密钥。如果已完成步骤 7,则可跳过此步骤。
容器数据库 (CDB):
ALTER SESSION SET CONTAINER = CDB$ROOT; SHOW CON_NAME SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM dual; ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "mcs1$admin" WITH BACKUP USING 'masterkey_cdb_backup' CONTAINER=CURRENT; SELECT KEY_ID,KEYSTORE_TYPE,CREATOR,CREATOR_INSTANCE_NAME,CREATOR_PDBNAME FROM V$ENCRYPTION_KEYS; --export master key ADMINISTER KEY MANAGEMENT EXPORT ENCRYPTION KEYS WITH SECRET "mcs1.exp$admin" TO 'C:\oracle\admin\mcs1\wallet\masterkey_cdb_exp.bkp' IDENTIFIED BY "mcs1$admin";
可插拔数据库 (PDB):revpdb
ALTER SESSION SET CONTAINER = revpdb; SHOW CON_NAME SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM dual; ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "mcs1$admin" WITH BACKUP USING 'masterkey_revpdb_backup' CONTAINER=CURRENT; SELECT KEY_ID,KEYSTORE_TYPE,CREATOR,CREATOR_INSTANCE_NAME,CREATOR_PDBNAME FROM V$ENCRYPTION_KEYS; --export master key ADMINISTER KEY MANAGEMENT EXPORT ENCRYPTION KEYS WITH SECRET "mcs1.exp$admin" TO 'C:\oracle\admin\mcs1\wallet\masterkey_revpdb_exp.bkp' IDENTIFIED BY "mcs1$admin";
检查状态
SELECT * FROM V$ENCRYPTION_WALLET; SELECT * FROM V$ENCRYPTION_KEYS; SELECT WRL_PARAMETER,STATUS,WALLET_TYPE FROM V$ENCRYPTION_WALLET; SELECT KEY_ID,KEYSTORE_TYPE,CREATOR,CREATOR_INSTANCE_NAME,CREATOR_PDBNAME FROM V$ENCRYPTION_KEYS;
- 设置本地自动登录 keystore。
ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE 'C:\oracle\admin\mcs1\wallet' IDENTIFIED BY "mcs1$admin"; SELECT WRL_PARAMETER,STATUS,WALLET_TYPE FROM V$ENCRYPTION_WALLET; --the cwallet.sso file appears in the keystore location. The ewallet.p12 file is the password-based wallet. --Note: --Do not remove the PKCS#12 wallet (ewallet.p12 file) after you create the auto login keystore (.sso file). --You must have the PKCS#12 wallet to regenerate or rekey the TDE master encryption key in the future. --By default, this file is located in the $ORACLE_HOME/admin/ORACLE_SID/wallet directory.
- 打开自动登录 keystore。
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN CONTAINER=ALL; -- check the status SELECT WRL_PARAMETER,STATUS,WALLET_TYPE FROM V$ENCRYPTION_WALLET;
- 建议您使用以下 SQL 语句验证 TDE 配置的状态。
SELECT * FROM V$ENCRYPTION_WALLET; SELECT * FROM V$ENCRYPTION_KEYS; SELECT WRL_PARAMETER,STATUS,WALLET_TYPE FROM V$ENCRYPTION_WALLET; SELECT KEY_ID,KEYSTORE_TYPE FROM V$ENCRYPTION_KEYS; SELECT KEY_ID FROM V$ENCRYPTION_KEYS; SELECT KEYSTORE_TYPE FROM V$ENCRYPTION_KEYS; SELECT WRL_PARAMETER FROM V$ENCRYPTION_WALLET; SELECT STATUS FROM V$ENCRYPTION_WALLET; SELECT * FROM V$ENCRYPTED_TABLESPACES; SELECT TABLESPACE_NAME, ENCRYPTED FROM DBA_TABLESPACES; SELECT * FROM DBA_ENCRYPTED_COLUMNS;
Oracle 11.2
有关配置 TDE 表空间加密的更多信息,请参阅 Oracle 文档。
要使用 TDE,请执行以下其中一种方法。
配置 TDE Oracle Enterprise Manager
以下步骤显示了如何使用 Oracle Enterprise Manager (OEM) 来配置 TDE。
要使用 TDE,请执行以下其中一种方法。
- 创建 wallet 文件夹。
mkdir C:\oracle\admin\wallets OEM > login as sys / sysdba OEM > Server > Transparent Data Encryption Advanced Options > Change Location Host Credentials Username: <DOMAIN>\dbs_ora Password: xxxxxxx Configuration Method: File System Encryption Wallet Directory: C:\oracle\admin\wallets OK Create Wallet > Local Auto-Open Wallet > Create Host Credentials Username: <DOMAIN>\dbs_ora Password: xxxxxxx Wallet Password: walletadmin Continue
- 备份 wallet 文件夹。
cd C:\oracle\admin zip -r wallets wallets
手动配置 TDE
以下步骤显示了如何手动配置 TDE。
- 从命令窗口创建 wallet 文件夹。
mkdir C:\oracle\admin\wallets
- 将 wallet 位置添加到 sqlnet.ora 文件。
ENCRYPTION_WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = C:\oracle\admin\wallets\$ORACLE_SID)
- 使用 Oracle SQL*Plus 或 Oracle SQL Developer 生成主密钥。
alter system set encryption key identified by "walletadmin";
- 使用 Oracle SQL*Plus 或 Oracle SQL Developer 验证 wallet 状态。
select * from "v$encryption_wallet";
- 将 wallet 设置为自动登录。
set ORACLE_SID=revdb orapki wallet create -wallet C:\oracle\admin\wallets -auto_login -pwd walletadmin
- 在命令窗口中备份 wallet 文件夹。
cd C:\oracle\admin zip -r wallets wallets