【11g新特性】Oracle加密表空间


前言:数据治理领域里面经常会遇到敏感数据,例如我们征信中心的征信数据就是涉密数据,并不是所有的人都可以看到,就算有授权也只能看到指定对象的数据,那么想一想假设这些数据被流失出来会是一个怎样的场景,就像皇帝新装这个故事一个,全部搬上银幕被展现出来,还记得前几天12306网站信息被泄露了吗!下面来介绍一个Oracle 11g新特性给大家,此特性可以完全避免上述事件的发生,这就是Oracle11g加密表空间特性。 

理论

创建一个加密表空间,作用是只要放在加密表空间中的表,没有wallet钱包中的密钥用户是打不开的,这就可以形成一个保护罩,就算你有权限查询数据也不能看到明文,这就起到了风险保障的作用,只有知道秘钥的管理员才能查看,下面我们来详细讲解。 

加密表空间与wallet的关系

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

2.如果walletopen状态,那么我们可以使用其中的密钥,进行加密与解密处理。

3.如果walletclose状态,那么我们就拿不到密钥,此时加密表空间是不可用的,例如 查询 修改 创建都不允许

4.唯一删除表是不需要密钥的,walletopen or close状态都无所谓,直接删除即可 

TDE(Transparent Data Encryption透明数据加密)使用场景

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

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

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

TDE可支持的加密算法种类AES(Advanced Encryption Standard高级加密标准) DES的升级版

  AES192          192位密钥加密

  AES128(default)  128位密钥加密

  AES256          256位密钥加密

  3DES168          168位密钥加密 DES(Data Encryption Standard数据加密标准)

AES标准是美国联邦政府采用的一套加密标准,用来替代原先的DES标准。AES属于对称性加密算法(加密与解密使用同一密钥进行),反之非对称性加密算法(加密与解密使用不同密钥进行)例如 RSA标准有公钥与私钥。

 

TDE(Transparent Data Encryption透明数据加密)加密原理

  先要创建一个“wallet钱包”,这个钱包里面保存着密钥,Oracle就是通过这个密钥对列进行加密和解密的。

  生成wallet钱包之前先要设定wallet钱包的保存位置

设置wallet钱包位置的文件$ORACLE_HOME/network/admin/sqlnet.ora

[oracle@cafeadmin]$ vim sqlnet.ora          在这个文件中添加如下脚本

encryption_wallet_location=(source=

                                  (method=file)

                                  (method_data=

                                 (directory=/u01/app/oracle/product/11.1.0/db_1/network/admin)))

  wallet里面创建密钥key,创建后自动打开wallet,密码"oracle"不加引号时,后面使用时也不需要加引号

SYS@COFFEE>alter system set encryption key authenticated by"oracle";

或【alter system set encryption key identified by oracle;

Systemaltered.

说明:authenticated by "oracle" :打开/关闭wallet的认证密码是oracle

如果报错

SYS@COFFEE>alter system set encryption key authenticated by "oracle";

altersystem set encryption key authenticated by "oracle"

*

ERRORat line 1:

ORA-28368: cannot auto-create wallet不能自动创建钱包

/u01/app/oracle/product/11.1.0/db_1目录下运行sqlplus 登录数据库就可以成功执行

  查看一下wallet钱包是否在$ORACLE_HOME/network/admin/目录下生成

[oracle@cafeadmin]$ ll

-rw-r--r--1 oracle dba  1573 Nov  7 03:21 ewallet.p12    这个就是我们刚才生成的wallet钱包,里面有我们创建的密钥(密文形式),打开wallet钱包的认证密码是“oracle”,创建wallet钱包之后密钥就自动在里面了。

创建一个加密表空间

SYS@COFFEE>create tablespace encrypted_tbs datafile '/u01/app/oracle/oradata/COFFEE/datafile/test_encrypted01.dbf'size 10m encryption default storage(encrypt);

CREATE TABLESPACE stablespace DATAFILE '/u01/app/oracle/oradata/COFFEE/datafile/stablespace.dbf'SIZE 10M ENCRYPTION DEFAULT STORAGE(ENCRYPT);

Tablespacecreated.

创建加密表空间encrypted_tbs,大小10MB,如果不指定加密算法默认使用AES128加密算法密钥长度128位,需open wallet

如果报错

ERRORat line 1:

ORA-28365: wallet is not open  此时报错是没有打开钱包,因为表空间的加密是使用钱包中的密钥进行加密的,如果钱包没打开便无法使用密钥,当然也就创建不了加密表空间。

Open&Closethe Oracle Wallet mothed

alter systemset wallet open identified by"oracle";                打开钱包

alter system set wallet close identified by "oracle";            关闭钱包11gR2 

alter system set wallet close;                             关闭钱包11gR1

查看表空间属性

SYS@COFFEE>select tablespace_name,encrypted from dba_tablespaces;

TABLESPACE_NAME                ENC

---------------------------------

SYSTEM                        NO

SYSAUX                        NO

UNDOTBS1                      NO

TEMP                          NO

USERS                         NO

EXAMPLE                        NO

TBS1                          NO

TBS2                          NO

TBS3                          NO

TBS4                          NO

ENCRYPTED_TBS                 YES            加密状态

 

实验

在加密表空间上创建一张表encryption_t,这张表上数据全部为加密状态

SYS@COFFEE>create table encrypted_t (x int) tablespace encrypted_tbs;

Tablecreated.

插入一条数据

SYS@COFFEE>insert into encrypted_t values (100);

1 rowcreated.

SYS@COFFEE>commit;

Commitcomplete.

SYS@COFFEE>select * from encrypted_t;

        X

--------------------

      100

我们关闭wallet看效果

SYS@COFFEE>altersystem set wallet close;

Systemaltered.

当没有打开wallet时不允许开打表

SYS@COFFEE>select * from encrypted_t;

select* from encrypted_t

              *

ERRORat line 1:

ORA-28365: wallet is not open         

创建一个新表encryption_t1时,也需要使用wallet钱包中的密钥进行加密

SYS@COFFEE>create table encrypted_t1 (x int) tablespace encrypted_tbs;

createtable encrypted_t1 (x int) tablespace encrypted_tbs

*

ERRORat line 1:

ORA-28365: wallet is not open

唯一例外->删除表,因为删除的过程是不需要密钥key参与,所以walletopen or close状态都无所谓,直接执行就好

SYS@COFFEE>droptable encryption_t;

Tabledropped.

小结:我们介绍了Oracle加密表空间的原理、场景、实践操作,从理论到实践给朋友们展示了Oralce加密表空间的使用效果,这里切记一定不要忘记wallet的认证密码,否则你将不能查询到表空间内的数据,最好的办法就是把密码记录到一个密码生成器中,定期更新,这样既保证安全性又保证不会忘记。

Linux-6-64下安装Oracle 12C笔记

RHEL6.4_64安装单实例Oracle 12cR1

Oracle 11g表空间dbf文件迁移

移动Oracle表空间数据文件方案

删除临时表空间ORA-25152错误

Oracle表空间增长异常解决又一例

Oracle表空间Offline的三种参数详述

Oracle 11g下加密表空间的使用

相关内容