1.oracle表空间的加密与解密是基于wallet钱包中的密钥进行。
2.wallet是Open状态,可以使用其中的密钥进行加密与解密处理。
3.wallet是close状态时,加密表空间不可用,查询修改和创建都不允许。
4.唯一删除表是不需要密钥的,wallet是open还是close状态都可以进行删除。
1.保护敏感数据,禁止未授权的访问,只有打开钱包才能查看数据。
2.防止数据丢失,当加密表空间的数据文件被恶意拷贝走后,如果没有密钥是无法还原数据的。
3.防止数据被截获,当在网络传输时加密后的信息更安全,即使截获了也无法得知其中内容。
TDE所支持的加密算法种类AES(advanced encryption standard高级加密标准)是DESC的升级版。
AES标准是美国联邦政府采用的一套加密标准,用来替代原来的DES标准。
AES属于对称性加密算法(加密和解密使用同一密钥进行),反之称非对称性加密算法,如RSA标准公钥和私钥。
1.先创建一个wallet钱包,这个钱包里面保存着密钥,oracle即是使用这个密钥对列进行加密和解密。
2.设置wallet钱包的保存位置
a.创建wallet目录
mkdir/u01/app/oracle/admin/orcl/wallet
b.修改配置文件 vi sqlnet.ora
ENCRYPTION_WALLET_LOCATION=(SOURCE=
(METHOD=file)
(METHOD_DATA=
(DIRECTORY=/u01/app/oracle/admin/orcl/wallet)))
3.使用sys用户登录,创建mster key文件,指定wallet密码,创建后自动打开wallet
SYS@orcl> alter system set encryptionkey identified by "oracle";
System altered.
4.验证wallet钱包是否在指定的目录下生成了文件
[oracle@wl wallet]$ ls
ewallet.p12
5.创建一个加密表空间SYS@orcl> create tablespace test datafile '/u01/app/oracle/oradata/orcl/test.dbf' size 10m encryption default storage(encrypt);
Tablespace created.
SYS@orcl> select tablespace_name,encrypted from dba_tablespaces where tablespace_name='TEST';
TABLESPACE_NAME ENC
------------------------------ ---
TEST YES
这里如果不指定加密算法,默认使用AES128的加密算法。esle如果报错
ERROR at line 1:
ORA-28365: wallet is not open
此时是因为没有打开钱包,因为表空间的加密是使用钱包中的密钥进行加密的。
打开钱包
SQL> alter system set wallet open identified by "abc";
关闭钱包
SQL> alter system set wallet close identified by "abc";
SYS@orcl> create table encrypted_t(idnumber) tablespace test;
Table created.
SYS@orcl> insert into encrypted_tvalues(1);
1 row created.
SYS@orcl> commit;
Commit complete.
SYS@orcl> select * from encrypted_t;
ID
----------
1
.关闭wallet后进行测试
SYS@orcl> alter system set wallet closeidentified by "oracle";
System altered.
--查询操作失败
SYS@orcl> select * from encrypted_t;
select * from encrypted_t
ERROR at line 1:
ORA-28365: wallet is not open
--在加密表空间上新建表,失败
SYS@orcl> create table encrypted_t1 (idnumber) tablespace test;
create table encrypted_t1 (id number)tablespace test
*
ERROR at line 1:
ORA-28365: wallet is not open
--唯一例外的操作是删除表,因为删除的过程不需要密钥参与,所以wallet打开或关闭都无所谓
SYS@orcl> drop table encrypted_t;
Table dropped.
SYS@orcl> drop tablespace test includingcontents and datafiles;
Tablespace dropped.
保证wallet是打开的情况下,直接将需要加密的表移动到加密表空间中,
系统自动完成加密。
SYS@orcl> alter table t move tablespacetest;
Table altered.
需要注意的是alter table move会使索引失效,所以移动完成后需要重建索引。
alter table t t_index1 rebuild tablespace test;