zoukankan      html  css  js  c++  java
  • orcl透明数据库加密(TDE)加密表空间

    TDE加密介绍

    透明数据加密包括列加密和表空间加密,它是oracle高级安全组件的一部分;
    oracle11g企业版默认安装时会安装上oracle高级安全组件,oracle声称这是一个单独另外收费的组件,作为商业用途使用如果没有付费意味着侵权。

    oracle增强表空间加密特性,数据库的兼容性参数必须被设置为11.2或更高。

    oracle的列加密是从10gR2开始可以使用,表空间加密是从11gR1开始使用。

    表空间加密算法3DES168,AES128,AES192,AES256,默认是AES128

    TDE从11g开始支持加密整个表空间,表空间的对象都自动加密,不需要对表再进行加密。

    表空间加密中,支持内部对象blod,clob等加密,不支持外部对象BFILE。

    TDE的主密钥存储在外部安全模块(Oracle Wallet中或HSM)。这TDE主密钥用于加密TDE表空间加密密钥,而这又是用来加密和解密数据表空间。

    已经加密的数据对数据库使用者或是应用程序都是透明的,自动解密。
    如果存储介质或是数据文件被偷,TDE可以保护数据不被还原。
    加密密钥自动产生,不需要用户管理。只需要及时做好备份,不要丢失即可。

    注意:加密的秘钥即使是同一密码,生成的秘钥也会不同,不要试图重新加载秘钥,这样容易导致数据库不可用。

    操作环境

    系统:window7
    数据库:oracle12C
    (这里需注意,windows7系统不支持oracle19C原因:)
    Navicat:12破解版

    表空间加密实现过程

    启用TDE

    创建和管理Oracle钱夹

    1. 如果是linux系统,输入如下命令创建目录$ mkdir -p /u01/app/oracle/admin/orcl/wallet

    2. 如果是windows系统,直接在想存储秘钥的位置新建文件夹即可,我的存储位置是D:AAAoxoracle12WINDOWS.X64_193000_db_home(随意命名的oracle安装路径)wallet

    指定 wallet 路径

    在oracle安装路径下的NETWORKADMIN下的 sqlnet.ora 中设置 ENCRYPTION_WALLET_LOCATION 参数,指定软件 wallet 路径。其中,在 sqlnet.ora 文件中添加的条目如下。

     ENCRYPTION_WALLET_LOCATION=
    	(SOURCE=
    		(METHOD = FILE)
    		(METHOD_DATA =
    			(DIRECTORY = D:AAAoxoracle12WINDOWS.X64_193000_db_homewallet)
    		)
    	)
    

    ENCRYPTION_WALLET_LOCATION参数的作用就是告知Wallet的实现方式和物理位置。DIRECTORY 的具体路径作为主加密Key的存放位置.

    检查 sqlnet.ora 信息读取状态(任一节点)

     select * from v$encryption_wallet;
     select * from gv$encryption_wallet;
    

    注意:确保 vencryption_wallet 与 gvencryptionwalletgvencryption_wallet 的 wallet location 是 一致的。
    注意:对于 wallet 分别在不同节点的情况以及 sqlnet.ora 在加入 ENCRYPTION_WALLET_LOCATION 参数前已经被数据库各实例读取的情况,需要 重启各个实例以初始化 wallet 的状态,从而更新 gv$encryption_wallet 的 wallet location。

    创建master key主密钥文件,指定wallet密码

    创建该文件只有系统用户system可以,自己单独建立的用户无此权限


    win+R后输入命令sqlplus打开窗口,输入用户名及密码,确定oracle正常运行

    确认登录

    通过以下命令建立加密文件:

    alter system set encryption key identified by “123456”;
    

    其中,123456为wallet密码。Oracle Wallet是一个可以打开关闭的功能组件,设置密码之后,只有通过密码口令可以启用wallet功能。

    此时,在设置的目录下会多出一个ewallet.p12文件。这就是生成的master key文件。

    启动和关闭Wallet

    1. 启动Wallet:
    SQL> alter system set encryption wallet open identified by "123456";
    
    1. 关闭Wallet:(注意密码一定是双引号)
    SQL> alter system set encryption wallet close identified by "123456";
    
    1. 可以通过以下语句查询Wallet是否在打开状态:
     select * from v$encryption_wallet;
    

    查询是否是打开状态
    说明:wallet只有在open的情况下才能进行数据库的透明加密,如果处于关闭状态,则会报错wallet,加密表空间需确认wallet是否真正开启。

     

    表空间加密

    在创建加密表空间之前,包含有表空间主密钥的 Oracle wallet 必须处于打开状态。

    1. 表空间限制
      1.1 不能加密临时和撤销表空间

      1.2 不能更改加密表空间的安全密匙

      1.3 不能加密外部表

    2. 加密表空间示例:

    SQL> create tablespace DB_TEST
    datafile 'D:AAAoxoracle	est.dbf' 
    size 500m
    encryption
    default storage(encrypt);
    

    其中encryption表时数据库使用默认的加密算法DES128,可以在encryption后面使用using子句来指定另外的算法,如:

    SQL> create tablespace DB_TEST
    datafile 'D:AAAoxoracle	est.dbf' 
    size 500m
    encryption
    using '3DES168'
    default storage(encrypt);
    
    1. 检查一个表空间是否加密:
      查看个表空间的加密属性,确定新建表空间为 TDE 加密表空间。
    SQL> select encrypted from dba_tablespaces where tablespace_name='DB_TEST';
    

    表空间是否加密

    1. 删除加密表空间
    SQL>drop tablespace encts including contents and datafiles;
    
    Tablespace dropped.
    

    未找到相关修改现有表空间间加密解密语句。。。
    如果在Navicat直接挪动表空间,可能会丢失数据。

    验证加密表空间

    可通过此步骤验证加密表空间是否真正有效。

    1. 测试表:创建加密表空间 ENCTS以及非加密表空间 DB_TEST。随后分别在两个表空间内创建表 JM_TABLE 以及非加密表 BJM_DATA,语句类似如下。
    create table jm_table(col1 number, col2 varchar2(30)) tablespace ENCTS;
    create table bjm_table(col1 number, col2 varchar2(30)) tablespace DB_TEST;
    

    创建新表测试
    创建成功后如图

    1. 创建后分别插入测试数据。
    insert into jm_table values (1,'secret data');
    insert into bjm_table values (1,'no secret data');
    

    Oracle wallet 不打开,则无法对加密表空间中的表进行插入数据,类似如下结果。
    其中红色框内的SQL因为wallet未打开,所以无法执行插入操作,反之,不加密的表空间则可以正常插入数据(增删改查全部同理)。
    执行结果如图

    尝试打开wallet之后,插入成功。如图:

    插入成功

    本文来自博客园,作者:zwbsoft,转载请注明原文链接:https://www.cnblogs.com/zwbsoft/p/15194739.html

    电话微信:13514280351
  • 相关阅读:
    计算机图形学之光栅图形学——反走样算法简介
    计算机图形学之光栅图形学——区域填充算法简介
    计算机图形学之光栅图形学——多边形的扫描转换算法简介
    计算机图形学——光栅图形学直线算法简介
    Kendall tau距离(即两个内容相同的数组中逆序数对的数量)(算法》P220 第2.5.3.2小节)
    自顶向下归并排序的应用——链表的随机化
    双调数组中的二分查找
    根据离散概率随机返回数组中的项
    字符串解析
    找出只出现一次的整数
  • 原文地址:https://www.cnblogs.com/zwbsoft/p/15194739.html
Copyright © 2011-2022 走看看