oracle数据库加密里面是否有加密函数

基于Oracle数据库加密设计探讨_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
基于Oracle数据库加密设计探讨
上传于||文档简介
&&基于Oracle数据库加密设计探讨
阅读已结束,如果下载本文需要使用3下载券
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢oracle字段的加密
使用 MD5 编码实现数据库用户密码字段的加密 1 前言 众所周知,MD5
是目前应用最多的密码保护方法,该编码传说为不可逆加密编码<也 就是说,永运无法倒算原码>。
加密用户的操作密码,可以有效防止系统维护人员直接进入数据库时出现系统安全漏洞<直接使用 SELECT
语句查询,将用户密码字段只能看到乱码,或者"****">
本文针对密码字段加密,作一实例,希望能给大家系统建设过程带来帮助。
2.1 DBMS_OBFUSCATION_TOOLKIT.MD5 DBMS_OBFUSCATION_TOOLKIT.MD5 是
MD5 编码的数据包函数,但偶在使用 select DBMS_OBFUSCATION_TOOLKIT.MD5(input_string
=&'abc') a from Dual
时,却有错误提示,看来该函数只能直接在程序包中调用,不能直接应用于 SELECT 语句。
&2.2 Utl_Raw.Cast_To_Raw
DBMS_OBFUSCATION_TOOLKIT.MD5 返回的字串,是 RAW 类型,要正确显示,需 要经过
Utl_Raw.Cast_To_Raw 转换<该知识点则之前论坛中 NICK511 贴子中获得>
3 实例演练
3.1 测试环境 使用
--3.2.1 创建数据表
Drop Table Test_U CREATE TABLE Test_User ( UserName
VARCHAR2(30) NOT NULL, PassWord VARCHAR2(2000) NOT NULL ) /
--3.2.2 创建程序包
CREATE OR REPLACE PACKAGE TEST_MD5 IS
& FUNCTION FN_GETMD5(P_STR IN VARCHAR2) RETURN
& FUNCTION FN_CHECKUSER(P_USERNAME IN VARCHAR2,
P_PASSWORD IN VARCHAR2)
&& RETURN NUMBER;
END TEST_MD5;
/ CREATE OR REPLACE PACKAGE BODY TEST_MD5 IS
& -- Function and procedure
implementations&&
& FUNCTION FN_GETMD5(P_STR IN VARCHAR2) RETURN
VARCHAR2 AS
&&& RETURN
DBMS_OBFUSCATION_TOOLKIT.MD5(INPUT_STRING =&
UPPER(P_STR));
& FUNCTION FN_CHECKUSER(P_USERNAME IN VARCHAR2,
P_PASSWORD IN VARCHAR2)
&&& RETURN
&&& L_PASSWORD
VARCHAR2(2000);
&&& SELECT
UTL_RAW.CAST_TO_RAW(PASSWORD)
INTO L_PASSWORD
FROM TEST_USER
WHERE UPPER(USERNAME) = UPPER(P_USERNAME);
UTL_RAW.CAST_TO_RAW(FN_GETMD5(P_PASSWORD)) = L_PASSWORD THEN
& EXCEPTION
NO_DATA_FOUND THEN
END TEST_MD5;
--3.3 测试
Delete Test_U
Insert Into Test_User Values('A',Test_MD5.FN_GetMD5('aa'));
Insert Into Test_User Values('B',Test_MD5.FN_GetMD5('bb'));
Select Test_MD5.FN_CheckUser('a','aa') From D
Select Test_MD5.FN_CheckUser('a','bb') From D
注:对 MD5 编码的比较,可以不需要经过 Utl_Raw.Cast_To_Raw 转换。此处使用
Utl_Raw.Cast_To_Raw
的目的,是为了调试方便,同时多提供一个知识点。有一点要注意,MD5加密,是把hex(十六进制)到raw
也就是说要转换的字符只能是0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,A,B,C,D,E,F组成的,否则会报错。
对于汉字等不能直接用MD5加密,可以把其转为对应的ASCII码再进行加密。
select ascii('一')
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。您所在的位置: &
MySQL数据库中的哈希加密
MySQL数据库中的哈希加密
数据库安全是数据库中最为重要的环节,只有确保了数据库中数据的安全,才能够更好的发挥数据库的功能,本文将为大家介绍一种很好的数据库加密方法,即哈希加密。
导读:MySQL数据库加密的方法有很多种,不同的加密方法对应着不同的情况,本文介绍的数据库加密方法----哈希加密,对数据库保存的敏感数据有较好的数据库保护性。
如果数据库保存了敏感的数据,如银行卡密码,客户信息等,你可能想将这些数据以加密的形式保存在数据库中。这样即使有人进入了你的数据库,并看到了这些数据,也很难获得其中的真实信息。
在应用程序的大量信息中,也许你只想交很小的一部分进行加密,如用户的密码等。这些密码不应该以明文的形式保存,它们应该以加密的形式保存在数据库中。一般情况下,大多数系统,这其中包括MySQL本身都是使用哈希算法对敏感数据进行加密的。
哈希加密是单向加密,也就是说,被加密的字符串是无法得到原字符串的。这种方法使用很有限,一般只使用在密码验证或其它需要验证的地方。在比较时并不是将加密字符串进行解密,而是将输入的字符串也使用同样的方法进行加密,再和数据库中的加密字符串进行比较。这样即使知道了算法并得到了加密字符串,也无法还原最初的字符串。银行卡密码就是采用的这种方式进行加密。
MySQL提供了4个函数用于哈希加密:PASSWORD, ENCRYPT, SHA1和MD5。下面让我们试一试这4个函数,看看会得到什么结果。我们以加密字符串&pa55word&为例进行说明:
让我们先来看看MD5函数
SELECT MD5('pa55word');
+----------------------------------+
| MD5('pa55word') |
+----------------------------------+
| a17a2fd005e18b43afd4 |
+----------------------------------+
1 row in set (0.13 sec)
下面是PASSWORD函数
SELECT PASSWORD('pa55word');
+----------------------+
| PASSWORD('pa55word') |
+----------------------+
| 1d35c6556b8cab45 |
+----------------------+
1 row in set (0.00 sec)
下面是ENCRYPT函数
SELECT ENCRYPT('pa55word');
+---------------------+
| ENCRYPT('pa55word') |
+---------------------+
| up2Ecb0Hdj25A |
+---------------------+
1 row in set (0.17 sec)
上面的每个函数都返回了一个加密后的字符串。为了区分加密字符串的大小写,最好在使用ENCRYPT生成加密字符串时,将这个字段定义成CHAR BINARY类型。
下面我为大家介绍使用MD5加密,本人是很喜欢这种加密方法,这样做可以将明文密码显示在处理列表中或是查询日志中,这样便于跟踪。如下面的INSERT语句使用插入了一条记录,其中的密码使用了MD5进行加密:
INSERT INTO table1 (user, pw) VALUE ('user1', MD5('password1') )
可以通过如下的语句进行密码验证:
SELECT * FROM table1 WHERE user = 'user1' AND pw = MD5('password1')
对数据库加密的方法有很多种,这里就简单为大家介绍这一种,我还会继续为大家介绍更多的数据库加密技术,如果大家也有好的数据库加密方法,欢迎与我们分享。
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&的更多文章
MySQL数据库的配置工作,一般都是利用相关工具来进行。本专题将
数据库产品
数据库综合
数据库新闻
维基百科将切换到另外一款开源数据库MariaDB
在编程领域有一句人尽皆知的法则“程序 = 数据结构 +
不管你有没有准备好,新版SQL Server来了!代号为Dena
也许你不需要了解SQL Server的内部机制,你照样能完成
本书是为那些对Web开发感兴趣的读者而编写的。ASP(Active Server Pages)是微软公司在Web领域的又一次突破,它打破了以往只能由
51CTO旗下网站博客访问: 167068
博文数量: 49
博客积分: 1410
博客等级: 上尉
技术积分: 502
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: Oracle
dbms_crypto
Oracle10gdbms_cryptodbms_obfuscation_toolkitDBMS_CRYPTODBMS_CRYPTOpublicDBMS_CRYPTODavid knoxData_CryptoDBMS_CRYPTODBMS_CRYPTO
&&&&& DBMS_CRYPTODES3DES3DESAESRC4DBMS_CRYPTODBMS_CRYPTO.encrypt_aes.javastatic finalc++static constantCBCCFBECBOFBPKCS5,ZerosORCLNONEOracleCBCPKCS5
DBMS_CRYPTOencyptPL/SQLRAWRAWIV initialization vectorRAWLOBBLOBCLOBRAWIVBLOBin out
UTL_RAW..CAST_TO_RAWDATA_CRYPTOOracleRAWBLOB.
ldd600DATA_CRYPTOenamesalary
SQL> @cry_install.sql
500)this.width=500;" border=0>
SQL> update people
set salary=data_crypto.encrypt(salary,'sal key');
whodata_cryptoencrypt_charRAWsalaryraw
SQL> select ename,data_crypto.decrypt(salary,'sal key') salary
500)this.width=500;" border=0>
&& OracleDBA_USERSPASSWORDOracleHMAC
&& DBMS_CRYPTOMD4MD5SHA1RAWCLOBBLOBRAWRAWMD4MD5128SHA160DATA_CRYPTOSHA
euserenamepasswordpasswordinitcapinitcapcry_install.sql
500)this.width=500;" border=0>
&&& SQL> update euser
set password = data_crypto.hash (password);
&&&&& euser
&&&&& SQL> select ename , utl_raw.cast_to_raw (password) password
500)this.width=500;" border=0>
& &&&&&&SQL> @user_auth.sql
&&&&&&& SQL> BEGIN
& 2&&& IF (is_user_auth ('scott', 'scott'))
& 3&&& THEN
& 4&&&&& DBMS_OUTPUT.put_line ('Scott authenticated with "scott"');
& 5&&& ELSE
& 6&&&&& DBMS_OUTPUT.put_line ('Scott could not authenticate with "scott"');
& 7&&& END IF;
& 9&&& IF (is_user_auth ('scott', 'Scott'))
&10&&& THEN
&11&&&&& DBMS_OUTPUT.put_line ('Scott authenticated with "Scott"');
&12&&& ELSE
&13&&&&& DBMS_OUTPUT.put_line ('Scott could not authenticate with "Scott"');
&14&&& END IF;
500)this.width=500;" border=0>
KMcry_install.sql
DBMS_OBFUCATION_TOOLKIT create_key
SQL> @get_random.
&&&&& SQL>@create_key.
&& ldd60032km48
&&&&& SQL>exec create_key('ldd600');
500)this.width=500;" border=0>
&& SQL>@de_key.sql
& SQL>exec de_key(‘ldd600’);
500)this.width=500;" border=0>
5.5create_keyde_key
SQL> COL TEXT FORMAT A80
SQL> select text from dba_source where name='CREATE_KEY';
CREATE_KEY5.1
windowsfindunixgrep,cmd
C:\Documents and Settings\ldd600>sqlplus ldd600/seclab@secora @pass.sql
C:\Documents and Settings\ldd600>find /i "password" c:\find.txt
500)this.width=500;" border=0>
500)this.width=500;" border=0>
&&C:\Documents and Settings\ldd600>wrap& iname=d:\sql\create_key_01.sql& oname=d:\
sql\create_key_01.plb
& C:\Documents and Settings\ldd600>sqlplus ldd600/seclab@secora @create_key_01.plb
& SQL> col text format a80
SQL> select text
& 2& from dba_source
& 3&& where name='CREATE_KEY'
500)this.width=500;" border=0>
exec create_key(‘’);:
SQL> exec create_key('scott');
PL/SQL procedure successfully completed
阅读(16558) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。2010年7月 Oracle大版内专家分月排行榜第二2010年3月 Oracle大版内专家分月排行榜第二
2010年6月 Oracle大版内专家分月排行榜第三
2010年7月 Oracle大版内专家分月排行榜第二2010年3月 Oracle大版内专家分月排行榜第二
2010年6月 Oracle大版内专家分月排行榜第三
2013年4月 Oracle大版内专家分月排行榜第二2013年3月 Oracle大版内专家分月排行榜第二2010年5月 Oracle大版内专家分月排行榜第二
2013年1月 Oracle大版内专家分月排行榜第三2011年12月 Oracle大版内专家分月排行榜第三2010年8月 Oracle大版内专家分月排行榜第三2010年4月 Oracle大版内专家分月排行榜第三2010年3月 Oracle大版内专家分月排行榜第三
2011年3月 Java大版内专家分月排行榜第三
2013年4月 Oracle大版内专家分月排行榜第二2013年3月 Oracle大版内专家分月排行榜第二2010年5月 Oracle大版内专家分月排行榜第二
2013年1月 Oracle大版内专家分月排行榜第三2011年12月 Oracle大版内专家分月排行榜第三2010年8月 Oracle大版内专家分月排行榜第三2010年4月 Oracle大版内专家分月排行榜第三2010年3月 Oracle大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。}

我要回帖

更多关于 oracle数据库加密 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信