暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle19C数据库TDE密钥库和主密钥创建配置

原创 Oracle官方文档 2021-05-21
4445

Oracle19C透明数据加密密钥库搜索顺序
TDE密钥库的搜索顺序取决于您如何设置实例初始化参数,sqlnet.ora参数或环境变量。

Oracle Database通过按以下顺序搜索这些位置来检索密钥库:

1、当TDE_CONFIGURATION初始化参数的KEYSTORE_CONFIGURATION属性设置为FILE时,由WALLET_ROOT实例初始化参数设置的位置。 Oracle建议您使用此参数来配置密钥库位置。

2、如果TDE_CONFIGURATION初始化参数的KEYSTORE_CONFIGURATION属性未设置为FILE或未设置WALLET_ROOT,则sqlnet.ora文件中由WALLET_LOCATION设置指定的位置。

3、如果未设置WALLET_ROOT和WALLET_LOCATION,则sqlnet.ora文件中由ENCRYPTION_WALLET_LOCATION参数指定的位置(现已弃用由WALLET_ROOT参数替代)。

4、如果没有设置这些参数,并且没有设置ORACLE_BASE环境变量,则ORACLE_BASE/admin/db_unique_name/wallet目录。 如果未设置ORACLE_BASE,则ORACLE_HOME/admin/db_unique_name/wallet

创建方法一(最简单的,很合适多数据库实例的情况配置)
1、查看默认密钥库目录位置
sqlplus / as sysdba
select * from vencryptionwallet;colWRLPARAMETERfora32colSTATUSfora10colKEYSTOREMODEfora10colWALLETTYPEfora10SELECTCONID,STATUS,KEYSTOREMODE,WRLPARAMETER,WALLETTYPEFROMvencryption_wallet; col WRL_PARAMETER for a32 col STATUS for a10 col KEYSTORE_MODE for a10 col WALLET_TYPE for a10 SELECT CON_ID,STATUS,KEYSTORE_MODE,WRL_PARAMETER,WALLET_TYPE FROM vencryption_wallet;
2、创建默认密钥库目录
SQL>!mkdir -p $ORACLE_BASE/admin/jm/wallet
3、创建密码保护的密钥库
SQL>ADMINISTER KEY MANAGEMENT CREATE KEYSTORE ‘/u01/app/oracle/admin/jm/wallet’ IDENTIFIED BY oracle1234;
4、自动登录
SQL>administer key management create auto_login keystore from keystore ‘/u01/app/oracle/admin/jm/wallet’ identified by oracle1234;
5、软件密钥库中设置CDB的TDE主加密密钥
ADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE IDENTIFIED BY oracle1234 WITH BACKUP USING ‘emp_key_backup’ CONTAINER=ALL;
或者
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY password WITH BACKUP CONTAINER=ALL;
6、软件密钥库中设置PDB的TDE主加密密钥
alter session set container=jmpdb1;
ADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE IDENTIFIED BY oracle1234 WITH BACKUP USING ‘emp_key_backup’;

create tablespace jm128 datafile ‘/u01/app/oracle/oradata/JM/jm128.dbf’ size 10m encryption using ‘aes128’ encrypt;
create tablespace jm256 datafile ‘/u01/app/oracle/oradata/JM/jmpdb1/tbsaes256.dbf’ size 10m encryption using ‘aes256’ encrypt;

方法二(Oracle12类似,通过配置sqlnet.ora文件)

1、修改sqlnet.ora文件
以下示例显示了当多个数据库共享sqlnet.ora文件时如何配置软件密钥库位置。

ENCRYPTION_WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY =/u01/app/oracle/admin/jm/sqlwallet)
)
)

2、创建密钥库目录
mkdir -p $ORACLE_BASE/admin/jm/sqlwallet
3、创建密码保护的密钥库
sqlplus / as sysdba
SQL>ADMINISTER KEY MANAGEMENT CREATE KEYSTORE ‘/u01/app/oracle/admin/jm/sqlwallet’ IDENTIFIED BY oracle1234;
4、自动登录
SQL>administer key management create auto_login keystore from keystore ‘/u01/app/oracle/admin/jm/sqlwallet’ identified by oracle1234;
5、软件密钥库中设置CDB的TDE主加密密钥
SQL>ADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE IDENTIFIED BY oracle1234 WITH BACKUP USING ‘emp_key_backup’;
或者
SQL>ADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE IDENTIFIED BY oracle1234 WITH BACKUP USING ‘emp_key_backup’ container=all;
6、软件密钥库中设置PDB的TDE主加密密钥
SQL>alter session set container=jmpdb1;
SQL>ADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE IDENTIFIED BY oracle1234 WITH BACKUP USING ‘emp_key_backup’;

创建加密表空间
create tablespace jm128 datafile ‘/u01/app/oracle/oradata/JM/jm128.dbf’ size 10m encryption using ‘aes128’ encrypt;
create tablespace jm256 datafile ‘/u01/app/oracle/oradata/JM/jmpdb1/tbsaes256.dbf’ size 10m encryption using ‘aes256’ encrypt;

方法三(官方推荐方法,配置数据库实例重启次数太多感觉不推荐客户现场使用)

默认为联合模式

查看密钥库状态
col WRL_PARAMETER for a32
col STATUS for a10
col KEYSTORE_MODE for a10
col WALLET_TYPE for a10
SELECT CON_ID,STATUS,KEYSTORE_MODE,WRL_PARAMETER,WALLET_TYPE FROM v$encryption_wallet;

1、配置软密钥库位置和类型。
(1)登录数据库所在的服务器
(2)如果必要,创建钱包目录
$ORACLE_BASE/admin/db_unique_name/wallet
例如:
创建密钥库目录
mkdir -p $ORACLE_BASE/admin/jm/wallet

使用sysdba权限的用户登录数据库
sqlplus / as sysdba
修改spfile,添加WALLET_ROOT静态参数
alter system set WALLET_ROOT= “/u01/app/oracle/admin/jm/wallet” scope=spfile;
shutdown immediate;
startup
备注:需要重启数据库
设置TDE_CONFIGURATION参数指定密钥库类型
alter system set tde_configuration=“keystore_configuration=file” scope=both;
重启数据库
shutdown immediate;
startup

2、创建密码保护的密钥库
使用 ADMINISTER KEY MANAGEMENT or SYSKM privilege登录
sqlplus / as syskm
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE IDENTIFIED BY oracle1234;

3、自动登录
administer key management create auto_login keystore from keystore identified by oracle1234;

4、软件密钥库中设置CDB的TDE主加密密钥
ADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE IDENTIFIED BY oracle1234 WITH BACKUP USING ‘emp_key_backup’;

5、软件密钥库中设置PDB的TDE主加密密钥
alter session set container=jmpdb1;
ADMINISTER KEY MANAGEMENT SET KEY FORCE KEYSTORE IDENTIFIED BY oracle1234 WITH BACKUP USING ‘emp_key_backup’;

创建加密表空间
create tablespace jm128 datafile ‘/u01/app/oracle/oradata/JM/jm128.dbf’ size 10m encryption using ‘aes128’ encrypt;
create tablespace jm256 datafile ‘/u01/app/oracle/oradata/JM/jmpdb1/tbsaes256.dbf’ size 10m encryption using ‘aes256’ encrypt;

隔离模式(了解即可)
在Oracle Cloud数据库(而非本地数据库)中,隔离模式使您能够为每个可插拔数据库(PDB)创建密钥库
隔离模式使您可以在单个PDB中创建和管理密钥库和TDE主加密密钥。不同的隔离模式PDB可以具有不同的密钥库类型。

多数据库实例场景配置密钥库和主密钥

配置透明数据加密以在多数据库环境中工作
同一服务器上的每个Oracle数据库(例如共享相同Oracle二进制文件但使用不同数据文件的数据库)必须访问其自己的TDE密钥库。
密钥库并非旨在在数据库之间共享。按照设计,每个数据库必须有一个密钥库。您不能将同一个密钥库用于多个数据库。
要为多数据库环境配置sqlnet.ora文件,请使用以下选项之一:

选项1:如果数据库共享相同的Oracle主目录,则将sqlnet.ora文件保留在默认位置,该文件位于ORACLE_HOME/network/admin目录中。
在这种情况下,最好使用默认位置。确保sqlnet.ora文件没有WALLET_LOCATION或ENCRYPTION_WALLET_LOCATION条目。如果这两个条目不在sqlnet.ora文件中,则透明数据加密将从默认sqlnet.ora位置访问密钥库。

选项2:如果选项1对您的站点不可行,则可以如下指定密钥库位置。所有PDB都共享WALLET_ROOT初始化参数,但是每个CDB(或独立数据库)必须具有自己的单独WALLET_ROOT设置。
例如:
WALLET_ROOT = $ORACLE_BASE/admin/db_unique_name/wallet
 
选项3:如果选项1和2不可行,则使用单独的sqlnet.ora文件,每个数据库一个。确保您正确设置了TNS_ADMIN环境变量,以指向正确的数据库配置。

警告:从另一个数据库使用密钥库可能会导致部分或全部数据丢失。

最后修改时间:2021-05-21 20:36:46
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论