LLL的数据库培训-102-第五部分—Oracle安全管理—第2讲—钱包/表空间加密/列加密案例
一、案例1—钱包的创建
1、查看当前钱包是否打开
SYS@mesorcl>col wrl_parameter for a40 SYS@mesorcl>SELECT * FROM v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS -------------------- -------------------------------------------- ------------------ file /oracle/app/oracle/admin/mesorcl/wallet CLOSED
即使没有使用过,默认位置在/oracle/app/oracle/admin/mesorcl/wallet。
2、配置加密钱包
(1)增加sqlnet.ora,更改默认位置
vi $ORACLE_HOME/network/admin/sqlnet.ora
ENCRYPTION_WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /oracle/app/oracle/admin/mesorcl/wallet2)
)
)
(2)重新登录sqlplus查看,默认位置已更改
设置好了sqlnet.ora,重新进入才生效。
sqlplus / as sysdba SYS@mesorcl>col wrl_parameter for a40 SYS@mesorcl>SELECT * FROM v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS
-------------------- -------------------------------------------- ------------------
file /oracle/app/oracle/admin/mesorcl/wallet2 CLOSED
mkdir -p /oracle/app/oracle/admin/mesorcl/wallet2
(3)设置密码,打开钱包
SYS@mesorcl> alter system set encryption key authenticated by "Htsxw123321";
(4)查看钱包,已经打开
SYS@mesorcl>select * from v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS -------------------- ---------------------------------------- ------------------ file /oracle/app/oracle/admin/mesorcl/wallet2 OPEN
3、配置完成后,重启数据库
(1)查看钱包已关闭
SYS@mesorcl>select * from v$encryption_wallet;
WRL_TYPE WRL_PARAMETER STATUS -------------------- ---------------------------------------- ------------------ file /oracle/app/oracle/admin/mesorcl/wallet2 close
(2)重新打开钱包
alter system set encryption wallet open identified by "Htsxw123321";
或使用创建命令也可以:
alter system set encryption key authenticated by "Htsxw123321";
(3)关闭钱包
alter system set encryption wallet close identified by "Htsxw123321";
二、案例2—表空间加密
1、查看加密的表空间
select * from V$ENCRYPTED_TABLESPACES;
2、给表空间加密
注意:如果给创建表空间时,给其做了加密,那么重启数据库时,必须在mount状态打开钱包后,才能正常打开数据库。
(1)打开钱包才可以创建加密表空间
alter system set encryption wallet open identified by "Htsxw123321";
(2)创建加密表空间
drop tablespace test_tbsp including contents and datafiles; drop user test cascade; create tablespace test_tbsp datafile '/oracle/oradata/test01.dbf' size 10m ENCRYPTION DEFAULT STORAGE(ENCRYPT); create user test identified by 123 default tablespace test_tbsp; --必须要将用户设置到默认表空间到加密的,也就是说加密表空间需要有数据。 grant dba to test; conn test/123; create table test(id number primary key,name varchar2(10)); insert into test values(1,'LLL01'); insert into test values(2,'LLL02'); insert into test values(3,'LLL03'); insert into test values(4,'LLL04'); commit; select * from test.test;
(3)查看加密的表空间
select * from v$encrypted_tablespaces;
(4)重启数据库,提示:ORA-28365: wallet is not open(如果没有此提示则可以跳过4,5,6)
出现这个问题的原因是:
The security administrator also needs to open the wallet before performing database recovery operations. This is because background processes may require access to encrypted redo and undo logs. When performing database recovery, the wallet must be opened before opening the database. This is illustrated in the following statements:
(安全管理员还需要在执行数据库恢复操作之前打开钱包。
这是因为后台进程可能需要访问加密的重做和撤消日志。
执行数据库恢复时,必须先打开钱包,然后才能打开数据库。)
SYS@mesorcl>shutdown immediate; SYS@mesorcl>startup ORACLE instance started. Total System Global Area 4943876096 bytes Fixed Size 2261688 bytes Variable Size 989859144 bytes Database Buffers 3942645760 bytes Redo Buffers 9109504 bytes Database mounted. ORA-28365: wallet is not open
(5)在mount状态打开钱包才可以继续下一步
ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "Htsxw123321";
(6)可以正常打开数据库
SYS@mesorcl>alter database open;
注:如果此时没有钱包的密码(也就是master key),是无法打开数据库的。因为其中要给表空间加了密码。
三、案例3—列加密
1、给列加密
(1)钱包需要先打开
alter system set encryption wallet open identified by "Htsxw123321";
(2)创建表空间和用户,表
drop tablespace test_tbsp including contents and datafiles; drop user test cascade; create tablespace test_tbsp datafile '/oracle/oradata/test01.dbf' size 10m ENCRYPTION DEFAULT STORAGE(ENCRYPT); create user test identified by 123 default tablespace test_tbsp; grant dba to test; conn test/123;
(3)创建加密列的表
CREATE TABLE employee (
first_name VARCHAR2(128),
last_name VARCHAR2(128),
empID NUMBER,
salary NUMBER(6) ENCRYPT
);
insert into EMPLOYEE values('L','LL',1,200);
commit;
select * from employee;
(4)查看加密列
select * from USER_ENCRYPTED_COLUMNS;
四、一个问题:是否可以在忘记wallet密码的情况下重建钱包:
官方文档如下解释:
1、是否可以重建钱包(就是把原来的移走,并用新的钱包打开数据库)--这个操作本来就比较操蛋,建议没事不要折腾。
危险!!!
注意:oracle对钱包的加密只限于非系统表空间。所以我们可以通过重建钱包进行重启数据库。但如果有些表空间被加了密,即使重建钱包,也无法读取原加密的表空间(因为原来得表空间数据是通过原钱包加密的)。
注:这种操作可能会导致原表空间数据收到破坏。如下图
这是因为在更换钱包后,有些redo或undo在启动数据库时需要读取,更换后,可能导致有些加密的redo和undo无法读取,进而导致数据库无法open。
如果环境不需要需要显式打开的钱包提供的额外安全性,还可以选择使用自动登录钱包。(意思是,如果不想上面那么麻烦,可以使用自动登录钱包的方式,不用手动登录钱包,和平时操作一样)
(1)启动数据库
把wallet2的钱包移走,重启数据库,可以正常起来。但是是无法访问加密的tablespace的
(2)移走wallet2的钱包
mv /oracle/app/oracle/admin/mesorcl/wallet2/ewallet.p12 /tmp
(3)重启数据库
startup
可以正常打开。
(4)重建加密钱包
--第一次会报错:ORA-28362: master key not found;但可以在wallet2中创建文件