欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【12c】Oracle 12c Transparent Data Encryption透明数据加密

程序员文章站 2022-05-15 14:35:08
...

对于数据库的安全性而言,除了使用用户、权限和角色进行控制外,还可以通过数据加密或者数据掩码来实现,关于透明的数据加密,可以对个别表列或整个表空间进行加密。当用户向加密的列中插入数据时,透明数据加密会自动加密该数据。当用户选择该列时,数据将自动解密。选择完毕后,数据将重新加密。

本篇就Oracle 12c中的透明数据加密进行演示。

1 演示环境

SQL> select * from v$version;



BANNER CON_ID

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

Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production 0

PL/SQL Release 12.1.0.2.0 - Production 0

CORE 12.1.0.2.0 Production 0

TNS for Linux: Version 12.1.0.2.0 - Production 0

NLSRTL Version 12.1.0.2.0 - Production 0

2 配置透明的数据加密

1)查看数据库兼容性

如果希望配置完整的表空间加密特性,则必须将数据库的compatible初始化参数设置为11.2.0.0或更高。

SQL> show parameter compatible



NAME TYPE VALUE

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

compatible string 12.1.0.2.0

2)创建基于密码的软件**库

创建**库,需要使用administer key management SQL语句,对应的**库目录必须存在,否则出错。

SQL> administer key management create keystore '/u01/app/oracle/admin/ORCL/wallet' identified by system;



keystore altered.

3)打开(关闭)**库

在创建基于密码的软件**库之后,如果要使用,必须手动打开它。

SQL> administer key management set keystore open identified by system;



keystore altered.

如果不需要加密了,可以使用以下命令将**库关闭:

administer key management set keystore close identified by system;

4)创建主加***

主加***存储在**存储库中,用于保护表**和表空间加***。默认情况下,主加***是由透明数据加密生成的随机**。

SQL> administer key management set key identified by system with backup using 'passwd key backup';



keystore altered.

5)查看**状态

SQL> select * from v$encryption_wallet;



WRL_TYPE WRL_PARAMETER STATUS WALLET_TYP WALLET_OR FULLY_BAC CON_ID

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

FILE /u01/app/oracle/admin/ORCL/wallet OPEN PASSWORD SINGLE NO 0

3 加密数据(命令行方式)

配置好透明数据加密之后,就可以对表中的列或表空间进行加密了,可以使用Oracle Cloud Control进行加密,也可以使用命令行进行加密。

3.1 加密表中的列

TDE列加密概览:

【12c】Oracle 12c Transparent Data Encryption透明数据加密

3.1.1 支持的数据类型

TDE列加密支持以下数据类型:

  • BINARY_DOUBLE
  • BINARY_FLOAT
  • CHAR
  • DATE
  • INTERVAL DAY TO SECOND
  • INTERVAL YEAR TO MONTH
  • NCHAR
  • NUMBER
  • NVARCHAR2
  • RAW
  • TIMESTAMP
  • VARCHAR2

TDE是在SQL层对数据进行加密的,如果使用数据库工具绕过了SQL层,那么就不能使用TDE对数据进行加密了,同时,TDE不能对外键进行加密。

3.1.2 加密表中的列

1)创建新表时对列加密(使用默认算法)

默认情况下,TDE使用AES加密算法进行加密,**长度为192字节,即AES192。如果没指定加密列的算法,默认使用AES192。

SQL> create table student(

2 id number,

3 first_name varchar2(20),

4 last_name varchar2(20),

5 phone varchar2(15) encrypt);

Table created.

该示例对phone进行加密,使用默认算法AES192,并且SALT和MAC均是默认值。SALT是加密前在给定的字段加的长度为16的随机字符串,用于防**,而MAC是TDE加的消息认证代码,用于完整性检查。

SQL> desc student;

Name Null? Type

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

ID NUMBER

FIRST_NAME VARCHAR2(20)

LAST_NAME VARCHAR2(20)

PHONE VARCHAR2(15) ENCRYPT

2)创建新表时对列加密(不使用默认算法)

如果创建表时,指定列不使用默认算法,需通过ENCRYPT USING字句,非默认算法包括:3DES168、AES128、AES256。

SQL> create table employee(

2 id number encrypt no salt,

3 first_name varchar2(20),

4 last_name varchar2(20),

5 salary number(6) encrypt using '3DES168');



Table created.

3)在已存在的表新增加密列

SQL> alter table student add id_card varchar2(20) encrypt;



Table altered.

4)加密表中未加密的列

SQL> alter table student modify first_name encrypt;



Table altered.

5)对表中的列禁用加密

SQL> alter table student modify first_name decrypt;



Table altered.

6)测试TDE加密

--创建测试数据

SQL> insert into student values(1,'Alen','Liu','110','123454');



1 row created.



SQL> commit;



Commit complete.

--查看TDE**状态及位置,目前是打开状态

SQL> select wrl_parameter,status,wallet_type from v$encryption_wallet;



WRL_PARAMETER STATUS WALLET_TYP

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

/u01/app/oracle/admin/ORCL/wallet OPEN PASSWORD

--查看数据可以看到

SQL> select * from scott.student;



ID FIRST_NAME LAST_NAME PHONE ID_CARD

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

1 Alen Liu 110 123454

--关闭TDE**

SQL> administer key management set keystore close identified by system;



keystore altered.



SQL> select wrl_parameter,status,wallet_type from v$encryption_wallet;



WRL_PARAMETER STATUS WALLET_TYP

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

/u01/app/oracle/admin/ORCL/wallet CLOSED UNKNOWN

--执行查询,出错,提示**库未打开

SQL> select * from scott.student;

select * from scott.student

*

ERROR at line 1:

ORA-28365: wallet is not open

SQL> select id,first_name,last_name from scott.student;



ID FIRST_NAME LAST_NAME

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

1 Alen Liu

可以看到,当**存储库关闭时,加密列不可访问,但未加密的字段可以正常访问。

3.2 加密表空间

TDE表空间加密概览:

【12c】Oracle 12c Transparent Data Encryption透明数据加密

对于表空间的加密,加密算法默认时AES128。

1)加密表空间(使用默认算法)

SQL> create tablespace testdata datafile '/u01/app/oracle/oradata/ORCL/testdata01.dbf' size 100m encryption default storage(encrypt);



Tablespace created.

2)加密表空间(使用非默认算法)

SQL> create tablespace studata datafile '/u01/app/oracle/oradata/ORCL/studata01.dbf' size 100m encryption using 'AES256' default storage(encrypt);



Tablespace created.



SQL> col tablespace_name for a30

SQL> select tablespace_name,encrypted from dba_tablespaces where tablespace_name='STUDATA';



TABLESPACE_NAME ENC

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

STUDATA YES

3)移动表至加密表空间中

SQL> alter table emp_new move tablespace testdata;



Table altered.

4 加密数据(Cloud Control方式)

4.1 加密表中的列

1)打开Cloud Control,访问数据库主页

【12c】Oracle 12c Transparent Data Encryption透明数据加密2)输入口令,点击登录

【12c】Oracle 12c Transparent Data Encryption透明数据加密3)这里我使用已创建的表作为示例,如果新增表,点击创建即可

【12c】Oracle 12c Transparent Data Encryption透明数据加密4)点击编辑

【12c】Oracle 12c Transparent Data Encryption透明数据加密5)选择加密的列,如果更改加密算法,点击加密选项更改即可,点击应用

【12c】Oracle 12c Transparent Data Encryption透明数据加密6)点击链接,可以查看执行结果

【12c】Oracle 12c Transparent Data Encryption透明数据加密7)执行成功,点击确定

【12c】Oracle 12c Transparent Data Encryption透明数据加密8)查看加密的列

【12c】Oracle 12c Transparent Data Encryption透明数据加密4.2 加密表空间

1)打开Cloud Control,访问数据库主页

【12c】Oracle 12c Transparent Data Encryption透明数据加密2)点击创建

【12c】Oracle 12c Transparent Data Encryption透明数据加密3)输入表空间名称,点击添加

【12c】Oracle 12c Transparent Data Encryption透明数据加密4)输入文件名,点击继续

【12c】Oracle 12c Transparent Data Encryption透明数据加密5)勾选加密,如果更改加密算法,点击加密选项,在弹出的页面选择对应的加密算法

【12c】Oracle 12c Transparent Data Encryption透明数据加密6)创建成功

【12c】Oracle 12c Transparent Data Encryption透明数据加密5 TDE相关的数据字典视图

5.1 v$wallet

该数据字典视图显示TDE的主加***信息。

5.2 v$encryption_wallet

该视图展示了TDE的**库和**的位置信息。

5.3 v$encryption_keys

该视图展示了TDE主加***信息。

5.4 v$encrypted_tablespaces

该视图展示了加密的表空间信息。

5.5 dba_encrypted_columns / all_encrypted_columns / user_encrypted_columns

该视图展示了已加密的表中的列的信息。