oracle数据怎么加密,oracle数据加密入库

您所在的位置:网站首页 caffeine源码分析 oracle数据怎么加密,oracle数据加密入库

oracle数据怎么加密,oracle数据加密入库

2023-03-26 17:36| 来源: 网络整理| 查看: 265

oracle 字段加密

这个主要看软件开发人员的加密方式

一般流程是,

1.新建用户,或者修改密码时候,将用户输入的密码按照一定的加密方式加密后储存在数据库

2.在用户登录的时候,将用户所输入的密码再次进行加密后与数据库内的加密密码对比

这样做的好处是,防止密码在网络传输过程中被截取,比如黑客可以对网络传输的数据进行抓包分析,对于加密的密码在传输过程中不是以明文进行传输,如果被窃取到数据,不能得到有效破解,也是没有用的,这就增加了可靠性。

如何在Oracle SecureFiles中加密数据

用于加密非LOB字段的透明数据加密语法与在Oracle SecureFiles中启用加密的语法完全相同。它们有一个重要的区别,非LOB字段可以使用NO SALT参数阻止TDE在加密数据之前先给数据添加一个随机字符串。Oracle SecureFile LOB字段不支持NO SALT选项。我们可以使用数据字典视图USER_ENCRYPTED_COLUMNS确定应该加密哪一些字段,以及这些字段的状态。下面是一些ENCRYPT子句的例子:

CREATE TABLE tab_3DES (col1 CLOB ENCRYPT USING '3DES168')

LOB(col1) STORE AS SECUREFILE(

CACHE

NOLOGGING

);

使用默认加密算法(AES192)和一个密码创建一个Oracle SecureFile LOB字段:

CREATE TABLE tab_enc_pw (col1 CLOB ENCRYPT IDENTIFIED BY badpassword)

LOB(col1) STORE AS SECUREFILE(

CACHE

);

使用AES256启用LOB加密:

ALTER TABLE tab_nocrypt MODIFY

( col1 CLOB ENCRYPT USING 'AES256');

通过重新生成加密密钥修改一个Oracle SecureFiles字段:

ALTER TABLE tab_3DES REKEY USING 'AES256';

Disable LOB encryption:

禁用LOB加密:

ALTER TABLE tab_enc_pw MODIFY

( col1 CLOB DECRYPT);

Oracle数据库中存储的大对象数据容量会继续增长,但是存储费用在不断下降。其中有许多的敏感数据,如医疗记录、员工数据和知识产权。能够对这些信息进行加密,这是非常宝贵的,也可以避免在将来投入大量金钱和精力去实现安全性。

如何在oracle 10g r2中实现透明数据加密

设置加密密钥:

Oracle 透明数据加密提供了实施加密所必需的关键管理基础架构。 加密的工作原理是将明文数据以及秘密(称作密钥)传递到加密程序中。 加密程序使用提供的密钥对明文数据进行加密,然后返回加密数据。 以往,创建和维护密钥的任务由应用程序完成。 Oracle 透明数据加密通过为整个数据库自动生成一个万能密钥解决了此问题。 在启动 Oracle 数据库时,管理员必须使用不同于系统口令或 DBA 口令的口令打开一个 Oracle Wallet 对象。 然后,管理员对数据库万能密钥进行初始化。 万能密钥是自动生成的。

性能:

由于索引数据未被加密,因此加密通常会影响现有的应用程序索引。 Oracle 透明数据加密对与给定应用程序表关联的索引值进行加密。 这意味着应用程序中的相等搜索对性能的影响很小,甚至没有任何影响。 例如,假设应用程序 card_id存在一个索引,并且此应用程序执行以下语句:

SQL Select cash from credit_card where card_id = '1025023590';

Oracle 数据库将使用现有的应用程序索引,尽管 card_id信息已经在数据库中加密。

准备用于加密的数据库:

在本部分内容中,您将更新 sqlnet.ora、创建一个加密钱夹 (ewallet.p12)、打开此钱夹并为 TDE创建万能密钥。执行以下操作:

1. 您需要更新 sqlnet.ora 文件以包含一个 ENCRYPTED_WALLET_LOCATION 条目。打开一个终端窗口,然后输入以下命令:

cd $ORACLE_HOME/network/admin

gedit sqlnet.ora

将以下条目添加到文件末尾:

ENCRYPTION_WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=/opt/oracle/admin/test97/wallet/)))

如果不加这一项的话,则会提示下面错误:

SQL alter system set key identified by "hurray"

2 ;

alter system set key identified by "hurray"

*

ERROR at line 1:

ORA-28368: cannot auto-create wallet

/opt/oracle/admin/test97/wallet/ 目录是用来存放生成的钱夹的。

可以为加密钱夹选择任何目录,但路径不应指向在数据库安装过程中创建的标准模糊钱夹(cwallet.sso)。

2. 接下来,您需要打开钱夹并创建万能加密密钥。从终端窗口中,输入以下命令:

connect / as sysdbaalter system set key identified by "welcome1";

此命令的作用为:

l 如果指定的目录中不存在加密钱夹,则将创建加密钱夹 (ewallet.p12)、打开此钱夹并创建/重新创建 TDE 的万能密钥。

l 如果指定目录中存在加密钱夹,则将打开此钱夹并创建/重新创建 TDE 的万能密钥。

之后,就可以测试数据了。

下面是实验记录:

alter system set key identified by "welcome1";

SQL conn dodd/dodd123

create table test (id number,credit_card_number varchar2(16) ENCRYPT NO SALT);

SQL insert into test values(1,'1231243242');

1 row created.

SQL insert into test values(2,'33245235');

SQL commit;

Commit complete.

SQL select * from test;

ID CREDIT_CARD_NUMB

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

1 1231243242

2 33245235

可见,数据查看是明文,因为这个时候,加密钱夹已经打开,数据可以解密。

这时,停止数据库,再打开:

SQL shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL SQL startup

ORACLE instance started.

Total System Global Area 524288000 bytes

Fixed Size 1979968 bytes

Variable Size 138414528 bytes

Database Buffers 377487360 bytes

Redo Buffers 6406144 bytes

Database mounted.

Database opened.

SQL select * from dodd.test;

select * from dodd.test

*

ERROR at line 1:

ORA-28365: wallet is not open

SQL select id from dodd.test;

ID

----------

1

2

可以看到,因为数据库重启后,加密钱夹处于关闭状态,这时只要查询到加密的列,会提示加密钱夹没有打开。

如果用户想打开钱夹,必须具有alter system权限。

下面打开wallet:

SQL conn / as sysdba

Connected.

SQL alter system set wallet open identified by "welcome1";

System altered.

SQL conn dodd/dodd123

Connected.

SQL select * from test;

ID CREDIT_CARD_NUMB

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

1 1231243242

2 33245235

可以看到,加密钱夹打开后,数据可以被解密。

还有一条:sys用户的表不能被加密。

可见:Oracle TDE是在数据层面上对表里的数据加密,而且不会影响数据库现有的权限控制策略。

salt实际上就是在加密过程中引入一个随机性。简单的说,就是一般来说,同样的明文产生同样的密文,这样就导致容易被解密者通过分析词频之类的方式(加解密我不太懂)来通过密文破解明文,如果指定salt,那么即使同样的明文加密后的密文也是不一样的。

no salt的话,自然就是相同的明文会产生相同的密文了。对于索引来说,要求no salt也就可以理解了

丢失ewallet加密钱夹的话,是不能再解密数据的。

Oracle 10gR2的 TDE 特性,对于防止机密信息的泄漏能起到事半功倍的作用!

如何利用Oracle自带的MD5对数据进行加密

1、DBMS_OBFUSCATION_TOOLKIT.MD5是MD5编码的数据包函数

CREATE OR REPLACE FUNCTION MD5(passwd IN VARCHAR2)

RETURN VARCHAR2

IS

retval varchar2(32);

BEGIN

retval := utl_raw.cast_to_raw(DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING = passwd)) ;

RETURN retval;

END;

select md5('123456') from dual;

MD5('123456')

e10adc3949ba59abbe56e057f20f883e

2、DES加密

create or replace function

encrypt_des(p_text varchar2, p_key varchar2) return varchar2 is

v_text varchar2(4000);

v_enc varchar2(4000);

raw_input RAW(128) ;

key_input RAW(128) ;

decrypted_raw RAW(2048);

begin

v_text := rpad( p_text, (trunc(length(p_text)/8)+1)*8, chr(0));

raw_input := UTL_RAW.CAST_TO_RAW(v_text);

key_input := UTL_RAW.CAST_TO_RAW(p_key);

dbms_obfuscation_toolkit.DESEncrypt(input = raw_input,key = key_input,encrypted_data =decrypted_raw);

v_enc := rawtohex(decrypted_raw);

dbms_output.put_line(v_enc);

return v_enc;

end;

DES加密:

update tb_salarysign_staff s set s.staffpwd =encrypt_des(s.staffpwd, 'test#5124*!de');

3、DES解密函数

create or replace function decrypt_des(p_text varchar2,p_key varchar2) return varchar2 is

v_text varchar2(2000);

begin

dbms_obfuscation_toolkit.DESDECRYPT(input_string = UTL_RAW.CAST_TO_varchar2(p_text),key_string =p_key, decrypted_string= v_text);

v_text := rtrim(v_text,chr(0));

dbms_output.put_line(v_text);

return v_text;

end;

DES解密:select decrypt_des(s.staffpwd, 'test#5124*!de') from tb_salarysign_staff s;



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3