oracle加密--wallet

TDE(Transparent Data Encryption ),通过使用wallet 对数据加密,物理上对数据文件中的数据进行加密。


工作过程


当用户插入数据到需要加密的列中的时候,Oracle 10g从钱夹中获取master密钥,用master密钥解密数据字典中的表密钥,然后用解密后的表密钥加密输入数据,再将加密后的数据保存在数据库中。

当用户查询一个加密列的时候,Oracle 将加密的表密钥从数据字典中取出,再取出master密钥,然后解密表密钥,再用解密后的表密钥来解密磁盘上加密的数据,最后返回明文给用户。


所有操作对用户而言是透明的。





1.  创建钱包

sqlplus中查看,文件路径和查询中的一致

  1. SQL> SELECT * FROM V$ENCRYPTION_WALLET;
  2. WRL_TYPE WRL_PARAMETER STATUS
  3. -------------------- ------------------------------------------------------------ ------------------
  4. file /oracle/app/oracle/admin/PROD/wallet CLOSED

默认是关闭的,修改sqlnet.ora文件,wallet不存在,创建一下

  1. mkdir -p /oracle/app/oracle/admin/PROD/wallet
  1. ENCRYPTION_WALLET_LOCATION=
  2. (SOURCE=
  3. (METHOD=FILE)
  4. (METHOD_DATA=
  5. (DIRECTORY=/oracle/app/oracle/admin/wallet)))

创建wallet

  1. SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "oracle";
  2. System altered.
  3. SQL> col WRL_PARAMETER for a60
  4. SQL> set line 200
  5. SQL> SELECT * FROM V$ENCRYPTION_WALLET;
  6. WRL_TYPE WRL_PARAMETER STATUS
  7. -------------------- ------------------------------------------------------------ ------------------
  8. file /oracle/app/oracle/admin/PROD/wallet OPEN
  1. [email protected].localdomain /oracle/app/oracle/admin/PROD/wallet$ ll
  2. total 4
  3. -rw-r--r-- 1 oracle oinstall 2845 Jul 9 06:43 ewallet.p12
  4. [email protected].localdomain /oracle/app/oracle/admin/PROD/wallet$

2.透明列级加密

  1. -- 不能对 sys用户的表加密
  2. SQL> conn hxy/hxy Connected.
  3. CREATE TABLE cust_payment_info
  4. (first_name VARCHAR2(11),
  5. last_name VARCHAR2(10),
  6. order_number NUMBER(5),
  7. credit_card_number VARCHAR2(16) ENCRYPT NO SALT,
  8. active_card VARCHAR2(3));
  1. INSERT INTO cust_payment_info VALUES
  2. (‘Jon‘, ‘Oldfield‘, 10001, ‘5446959708812985‘,‘YES‘);
  3. INSERT INTO cust_payment_info VALUES
  4. (‘Chris‘, ‘White‘, 10002, ‘5122358046082560‘,‘YES‘);
  5. INSERT INTO cust_payment_info VALUES
  6. (‘Alan‘, ‘Squire‘, 10003, ‘5595968943757920‘,‘YES‘);
  7. INSERT INTO cust_payment_info VALUES
  8. (‘Mike‘, ‘Anderson‘, 10004, ‘4929889576357400‘,‘YES‘);
  9. INSERT INTO cust_payment_info VALUES
  10. (‘Annie‘, ‘Schmidt‘, 10005, ‘4556988708236902‘,‘YES‘);
  11. INSERT INTO cust_payment_info VALUES
  12. (‘Elliott‘, ‘Meyer‘, 10006, ‘374366599711820‘,‘YES‘);
  13. INSERT INTO cust_payment_info VALUES
  14. (‘Celine‘, ‘Smith‘, 10007, ‘4716898533036‘,‘YES‘);
  15. INSERT INTO cust_payment_info VALUES
  16. (‘Steve‘, ‘Haslam‘, 10008, ‘340975900376858‘,‘YES‘);
  17. INSERT INTO cust_payment_info VALUES
  18. (‘Albert‘, ‘Einstein‘, 10009, ‘310654305412389‘,‘YES‘);
  1. SQL> select * from cust_payment_info
  2. 2 ;
  3. FIRST_NAME LAST_NAME ORDER_NUMBER CREDIT_CARD_NUMB ACT
  4. ----------- ---------- ------------ ---------------- ---
  5. Chris White 10002 5122358046082560 YES
  6. Alan Squire 10003 5595968943757920 YES
  7. Mike Anderson 10004 4929889576357400 YES
  8. Annie Schmidt 10005 4556988708236902 YES
  9. Elliott Meyer 10006 374366599711820 YES
  10. Celine Smith 10007 4716898533036 YES
  11. Steve Haslam 10008 340975900376858 YES
  12. Albert Einstein 10009 310654305412389 YES
  13. 8 rows selected.

关闭钱包,则无法访问

  1. SQL> ALTER SYSTEM SET ENCRYPTION WALLET close identified by oracle;
  2. System altered.
  3. SQL> conn hxy/hxy
  4. Connected.
  5. SQL> select * from cust_payment_info;
  6. select * from cust_payment_info
  7. *
  8. ERROR at line 1:
  9. ORA-28365: wallet is not open

3. 透明表空间加密 (表空间上所有的数据都加密)

  1. SQL> CREATE TABLESPACE securespace
  2. 2 DATAFILE ‘/home/oracle/oracle3/product/11.1.0/db_1/secure01.dbf‘
  3. 3 SIZE 150M
  4. 4 ENCRYPTION
  5. 5 DEFAULT STORAGE(ENCRYPT);
  6. Tablespace created.
  1. SQL> CREATE TABLE customer_payment_info
  2. 2 (first_name VARCHAR2(11),
  3. 3 last_name VARCHAR2(10),
  4. 4 order_number NUMBER(5),
  5. 5 credit_card_number VARCHAR2(16),
  6. 6 active_card VARCHAR2(3))TABLESPACE securespace;
  7. Table created.

4. 删除了操作系统的加密文件

执行下面的命令,输入原来的密码会生成一个.p12文件

  1. [email protected].localdomain /oracle/app/oracle/product/11.2.0/network/admin$ mkstore -wrl /oracle/app/oracle/product/11.2.0/network/admin/wallet/ -list
  2. Oracle Secret Store Tool : Version 11.2.0.4.0 - Production
  3. Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
  4. Enter wallet password:
  5. Oracle Secret Store entries:
  6. ORACLE.SECURITY.DB.ENCRYPTION.ARMxdklw5k9zv9UpvDKPCDMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  7. ORACLE.SECURITY.DB.ENCRYPTION.MASTERKEY
  8. [email protected].localdomain /oracle/app/oracle/product/11.2.0/network/admin/wallet$ ll
  9. total 4
  10. -rw-r--r-- 1 oracle oinstall 2581 Jul 9 08:35 ewallet.p12

参考:

文档 ID 1206180.1   
文档 ID 1228046.1   Master Note For Transparent Data Encryption ( TDE )
文档 ID 394539.1    ORA-28353 - Cannot Set The Encryption Key Password for TDE (文档 ID 394539.1)

来自为知笔记(Wiz)

时间: 2025-01-07 09:48:01

oracle加密--wallet的相关文章

oracle加密和解密函数

在数据存入一些敏感信息(姓名,身份证,电话等)时,一般要求都是要进行加密保存的,下面是一组oracle加密和解密函数 1. 加密函数 CREATE OR REPLACE function ds_func_encrypt_des(p_text varchar2, p_key varchar2) return varchar2 isv_text varchar2(4000);v_enc varchar2(4000);raw_input RAW(20000) ;key_input RAW(1000)

oracle加密代码解开

oracle里的PL/SQL代码,经过wrap程序后,就会变成不可阅读的密文,以前一直没找到办法解开, 在oracle黑客手册里有简要描述,后来在google里找到, How to unwrap PL/SQL ( https://www.blackhat.com/presentations/bh-usa-06/BH-US-06-Finnigan.pdf) 另外还找到了一个恢复加密代码软件,SoftDream Oracle UnWrapper

[课]13.3 Oracle加密表空间进行数据加密的示例

接上篇:http://www.cnblogs.com/myrunning/p/4292049.html 1查看数据库版本 2查看当前数据库表空间 从这里看到我们此时数据库里没有加密表空间. 3创建加密表空间 4演示表空间数据加密

oracle加密传输

参考文章: http://blog.itpub.net/24052272/viewspace-2129175/ oracle在传输过程中,正常是明文传输的,例如SQL以及执行的结果. 看看做的测试: 客户端IP:192.168.0.104,Oracle服务器IP:192.168.0.110. 1.在客户端执行一条SQL 2.在服务器上面用wireshark抓包 看到了刚才执行的SQL内容. 3.修改oracle配置 修改D:\app\HP\product\11.2.0\dbhome_2\NETW

[转]Oracle DB 移动数据

? 描述移动数据的方式 ? 创建和使用目录对象 ? 使用SQL*Loader 加载非Oracle DB(或用户文件)中的数据 ? 使用外部表并通过与平台无关的文件移动数据 ? 说明Oracle 数据泵的一般体系结构 ? 使用数据泵的导出和导入实用程序在Oracle DB 之间移动数据 移动数据:一般体系结构 移动数据:一般体系结构 主要功能组件: ? DBMS_DATAPUMP:包括高速导出与导入实用程序的API,可用于成批地移动数据和元数据. ? 直接路径API (DPAPI):Oracle

Oracle DB 移动数据

描述移动数据的方式 ? 创建和使用目录对象 ? 使用SQL*Loader 加载非Oracle DB(或用户文件)中的数据 ? 使用外部表并通过与平台无关的文件移动数据 ? 说明Oracle 数据泵的一般体系结构 ? 使用数据泵的导出和导入实用程序在Oracle DB 之间移动数据 移动数据:一般体系结构 移动数据:一般体系结构 主要功能组件: ? DBMS_DATAPUMP:包括高速导出与导入实用程序的API,可用于成批地移动数据和元数据. ? 直接路径API (DPAPI):Oracle Da

Oracle数据库监听器引起的安全威胁和防护技术

1.引言 在今年的两会上,<政府采购法实施条例>正式实施.虽然安全行业迎来了数据库国产化的春天,但现今Oracle依旧是中国政府机关,使用最广泛的数据库.其安全性受到广泛关注. Oracle数据库必须使用TNS Listener(数据库监听器)来完成数据库和客户端之间的通讯.因此TNS Listener的漏洞成了很多黑客的主要目标.这些TNS Listener的漏洞如果不及时处理,将对用户的信息资产造成重大损失,同时也使许多敏感信息处于危险境地.本文主要对TNS Listener的漏洞带来的安

OCP

关于平衡树索引 http://bbs.cqsztech.com/forum.php?mod=viewthread&tid=610 要执行RMAN备份,数据库必须处于归档模式下:因为此时数据库是开启状态,所以是不一致备份,而备份主要用于恢复. V $ SPPARAMETER:显示有关服务器参数文件内容的信息. 如果服务器参数文件未用于启动实例,则视图的每一行将在ISSPECIFIED列中包含FALSE. 监听: status 为unknown,所以为静态注册:而established为2,refu

PL/SQL调用BIEE WebServices清理BI Server缓存

BIEE自身提供了几种缓存管理的方法,事件表或者是在物理层设置缓存的失效时间,又或者是调用SAPurgeAllCache()过程. 前两种方法都是被动的管理策略(事件表是定时轮询,失效时间是指定有效时长),比较低效:个人更中意主动的缓存管理策略.即一旦数据发生变化就主动清理缓存. 最佳的作法就是在etl结束的时候通过调用API完成缓存的清理,要实现这种方式就需要调用BI Server提供的缓存管理存储过程,BI Server提供如下缓存管理过程: SAPurgeCacheByQuery SAPu