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

摘要:
本文演示了Oracle12c中的透明数据加密。1.演示环境SQL˃select*fromv$version;BANNERCON_ ID---------------------------------------------------------------------------------------OracleDatabase12cEnterpriseEditionRelease12.1.0.2.0-64bitProduction0PL/SQLRelease12.1.0.21.0-Production0CORE 12.1.0.2.0Production0TNS for Linux:版本12.1.0.2.0-Production 0NLSTRTLVersion 12.1.0.2.0-Production02配置透明数据加密1)如果需要,请查看数据库兼容性配置完整的表空间加密数据库的兼容初始化参数必须设置为11.2.0.0或更高。默认情况下,主加密密钥是通过透明数据加密生成的随机密钥。SQL˃createtablestudent;表已创建。本示例使用默认算法AES192加密电话,SALT和MAC是默认值。SALT是一个长度为16的随机字符串,在加密之前添加到给定字段,用于防破解,而MAC是TDE添加的消息认证码,用于完整性检查。

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

本篇就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透明数据加密第1张

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透明数据加密第2张

对于表空间的加密,加密算法默认时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透明数据加密第3张2)输入口令,点击登录

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

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

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

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

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

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

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

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

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

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

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

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

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

【12c】Oracle 12c Transparent Data Encryption透明数据加密第16张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

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

免责声明:文章转载自《【12c】Oracle 12c Transparent Data Encryption透明数据加密》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇神经网络实现Java操作XML文件 dom4j 篇下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

OGG-Oracle同步Sequence

一、需求,使用OGG同步软件,将Oracle 11g Sequence实时同步到19c新库中 参考文档 Implementing replication of cyclic sequences in GoldenGate (Doc ID 1321558.1) 二、测试同步 本次测试环境进行介绍: DB,Source 11.2.0.4  Target 19....

PHP PDO 基础(常用)

连接数据库: #建立链接 define('DSN','mysql:dbname=C2C;host=localhost;port=3306'); define('MYSQL_USERNAME','root'); define('MYSQL_PWD','root'); try { $DB=new PDO(DSN,MYSQL_USERNAME,M...

linux系统下oracle表空间占用情况

1、我们先查询表空间的占用情况,使用sql如下: select upper(f.tablespace_name) "表空间名", d.tot_grootte_mb "表空间大小(M)", d.tot_grootte_mb - f.total_bytes "已使用空间(M)", to_char(round((d.to...

数据加密之SymmetricAlgorithm加密

1 #region SymmetricAlgorithm加密 2 /// <summary> 3 /// 按指定对称算法、键和向量加密字符串 4 /// </summary> 5 public static byte[] Encrypt(...

Oracle小技巧_不同表空间不同用户导入导出数据dmp

【博主注:数据库方面 ITPUB网站及博客内容非常丰富】   转载来源 ITPUB 博客经常有人会问:原来的数据在USERS表空间里面,我想把它IMP进APP表空间,我已经修改了目的用户的默认表空间,为什么结果还是IMP到USERS表空间中了呢。关于此问题,作如下解释:Oracle并没有提供什么参数来指定要导入哪个表空间,数据默认将导入到原本导出时数据...

SQL SERVER 内存学习系列(二)-DMV查看内存信息

    内存管理在SQL Server中有一个三级结构。底部是内存节点,这是最低级的分配器,用于SQL Server的内存。第二个层次是由内存Clerk组成,这是用来访问内存节点和缓存存储,缓存存储则用于缓存。最上层包含内存对象,它提供了一个比内存Clerk更小程度的粒度,内存对象允许直接。只有Clerk可以访问存储节点,来分配内存,所以每一个需要分配大量...