### Code Reference
-
URL:https://docs.oracle.com/en/database/oracle/oracle-database/19/asoag/configuring-transparent-data-encryption.html#GUID-01E3A39B-87BD-4E3F-9198-6CBD896B405B
-
URL:https://docs.oracle.com/database/121/SQLRF/statements_1003.htm#BGEGDDEA
-
DESC:oracle19c pdb&cdb使用wallet实现表空间加密|oracle19c 表空间加密
-
Last Update:2020-7-15 14:45
-
Time:2020-7-19 21:01 Tittle:oracle19c pdb&cdb使用wallet实现表空间加密|oracle19c 表空间加密
-
Version:002
- 配置软件秘钥仓库
软件秘钥仓库是一个容器,在这个容器中存储着透明加密的master key.-
步骤 1:在sqlnet.ora文件中配置ENCRYPTION_WALLET_LOCATION(软件秘钥仓库路径)参数
配置ENCRYPTION_WALLET_LOCATION为指定过的路径
例如可以指定为/opt/oracle/oradata/orcdb/Keystore,路径请提前创建好.ENCRYPTION_WALLET_LOCATION= (SOURCE= (METHOD=FILE) (METHOD_DATA= (DIRECTORY=/opt/oracle/oradata/orcdb/Keystore)))
- 注意:sqlnet.ora所在路径为数据库服务器$ORACLE_HOME/network/admin,oracle用户登录,切换到该路径下就可以看到该文件.此处推荐配置为绝对路径,如果使用了环境变量请提前配置好环境变量.如果使用srvctl utility来启动数据库,需要配置环境变量。
srvctl setenv database -db database_name -env "environment_variable_name=environment_variable_value"
- 注意:sqlnet.ora所在路径为数据库服务器$ORACLE_HOME/network/admin,oracle用户登录,切换到该路径下就可以看到该文件.此处推荐配置为绝对路径,如果使用了环境变量请提前配置好环境变量.如果使用srvctl utility来启动数据库,需要配置环境变量。
-
步骤 2:创建一个软件秘钥仓库
请确认步骤1操作完成,检查路径正确无误。- 创建一个有密码的软件秘钥仓库
-
步骤 2.1:使用一个被授予ADMINISTER KEY MANAGEMENT权限或者SYSKM权限的用户登录数据库实例,登录到CDB$ROOT容器来执行登录操作.
sys用户创建c##sec_admin用户&授权create user c##sec_admin identified by 1; grant connect, SYSKM,resource to c##sec_admin;
登录用户conn c##sec_admin/password as syskm
-
步骤 2.2:执行下面命令创建有密码的软件秘钥仓库
此处使用步骤1创建的软件秘钥仓库路径密码为(oadsffLDKF^#f23),请根据具体情况修改.-
确认下软件秘钥仓库是否在设定的位置和状态是否正常(19c已经有了多条记录和12c使用一条记录)
select * from V$ENCRYPTION_WALLET;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MxEvZ11P-1595571317797)(http://redevm/uploads/big/2ca128f0868b1f562b0b6accbef5df48.png)]
刚配置ENCRYPTION_WALLET_LOCATION情况下软件秘钥仓库状态是NOT_AVAILABLE -
创建软件秘钥仓库
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jpkaX4OS-1595571317802)(http://redevm/uploads/big/96eea4f68a110369b825e79d440323bb.png)]ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/opt/oracle/oradata/orcdb/Keystore' IDENTIFIED BY oadsffLDKF#f23
-
确认状态,现在为关闭状态(默认创建完成为关闭状态)
select * from V$ENCRYPTION_WALLET;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MDfji41Z-1595571317804)(http://redevm/uploads/big/d9cf431cdec247a47cba25a691b552e0.png)]
-
-
-
- 创建一个有密码的软件秘钥仓库
-
步骤 3: 在使用软件秘钥仓库之前,必须手动打开软件秘钥仓库
使用步骤 2.1创建的用户c##sec_admin登录数据库,在多租户环境中必须先登录到CDB$ROOT容器来操作,然后进入到PDB中再次打开软件秘钥仓库.
注意:下面操作先在CDB后再PDB中操作.conn c##sec_admin/password as syskm ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY oadsffLDKF#f23
- 确认状态,现在为开启状态了,但是还没有还没有master key,处于OPEN_NO_MASTER_KEY状态.
select * from V$ENCRYPTION_WALLET;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2svQu1I6-1595571317807)(http://redevm/uploads/big/9a950b2700030aa4f76231c4657f3fa4.png)] -
步骤 4: 在软件秘钥仓库中配置表空间加密使用的master key
注意:下面操作先在CDB后再PDB中操作.conn c##sec_admin/password@pdb2.example.com as syskm ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY oadsffLDKF#f23 WITH BACKUP USING 'backup_identifier' container = CURRENT
- 确认状态,现在为开启状态了.
select * from V$ENCRYPTION_WALLET;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mNafTkH5-1595571317811)(http://redevm/uploads/big/5ce6367d07fad0e039704434cf693712.png)]- 注意:cdb|pdb的状态需要是READ WRITE
select open_mode from v$database; select * from V$PDBS;
-
步骤 5: 开始创建加密表空间&软件秘钥仓库可以正常使用&验证透明加密功能正常
完成步骤4操作后我们在PDB3中创建一个加密表空间测试下透明加密.-
步骤 5.1 为表空间加密配置初始化兼容参数
-- 登录到PDB2中 conn c##sec_admin/password@pdb2.example.com as syskm -- 查看兼容参数(保证参数是11.2.0.0 or higher,否则请修改该启动参数) SHOW PARAMETER COMPATIBLE
-
步骤 5.2 设置表空间加密主秘钥(如果步骤4已经配置相应的pdb此处忽略,否则请参照步骤4)
-
步骤 5.3 创建加密表空间和KEYSTORE闭合开启测试(在PDB中测试)
-- 查看数据文件位置 select * from dba_data_files; -- 创建表空间(注意修改数据文件路径) drop TABLESPACE securespace02 INCLUDING CONTENTS AND DATAFILES; CREATE TABLESPACE securespace02 DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/encrypt.dbf' SIZE 10M ENCRYPTION USING 'AES192' default storage(encrypt); -- 创建测试表 drop table test1; create table test1 tablespace securespace02 as select 1 as "test" from dual; select * from test1; -- 关闭|开启 pdb软件秘钥仓库 ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY oadsffLDKF#f23 ADMINISTER KEY MANAGEMENT SET KEYSTORE CLOSE IDENTIFIED BY oadsffLDKF#f23 -- 软件秘钥仓库确认状态 select * from V$ENCRYPTION_WALLET;
- 注意需要测试软件秘钥仓库开启关闭后状态正常,表在软件秘钥仓库关闭状态下报ora-28365为测试通过.
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9iADKd2t-1595571317815)(http://redevm/uploads/big/7a07dcd98fa7a320b7bfe290c9f840e8.png)]
- 注意需要测试软件秘钥仓库开启关闭后状态正常,表在软件秘钥仓库关闭状态下报ora-28365为测试通过.
-
-
- 参考
- 最后的验证工作最好测试通过再部署表空间加密.
- 打开软件秘钥仓库需要两层操作先在CDB后到PDB中打开.
- c##sec_admin用户可以使用sys账号代替,c##sec_admin容易出现权限缺失问题.
- 查询加密表空间
select * from dba_tablespaces T where T.encrypted = 'YES'
- 配置软件秘钥仓库