oracle表空间加密

一.wallet

1.oracle表空间的加密与解密是基于wallet钱包中的密钥进行。

2.wallet是Open状态,可以使用其中的密钥进行加密与解密处理。

3.wallet是close状态时,加密表空间不可用,查询修改和创建都不允许。

4.唯一删除表是不需要密钥的,wallet是open还是close状态都可以进行删除。

二.TDE(transparent data encryption透明数据加密)使用场景

1.保护敏感数据,禁止未授权的访问,只有打开钱包才能查看数据。

2.防止数据丢失,当加密表空间的数据文件被恶意拷贝走后,如果没有密钥是无法还原数据的。

3.防止数据被截获,当在网络传输时加密后的信息更安全,即使截获了也无法得知其中内容。

TDE所支持的加密算法种类AES(advanced encryption standard高级加密标准)是DESC的升级版。

AES标准是美国联邦政府采用的一套加密标准,用来替代原来的DES标准。

AES属于对称性加密算法(加密和解密使用同一密钥进行),反之称非对称性加密算法,如RSA标准公钥和私钥。

三.TDE环境配置

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";

案例1:在加密表空间上创建表encrypted_t

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.

案例2:加密数据

保证wallet是打开的情况下,直接将需要加密的表移动到加密表空间中,

系统自动完成加密。

SYS@orcl> alter table t move tablespacetest;

Table altered.

需要注意的是alter table move会使索引失效,所以移动完成后需要重建索引。

alter table t t_index1 rebuild tablespace test;





你可能感兴趣的:(oracle表空间加密)