1、思路:在需要加密字段的表中,增加对应的加密后的密文字段。
例如表users中有字段salary需要加密,则增加新字段encrypted存放加密后的内容,而原salary的内容设为0值或者删除。
2、具体来说:编写PL/SQL代码,主要是产生密钥和提供加密解密的function,其中加密解密的function调用Oracle8i提供的数据加密包:dbms_obfuscation_toolkit。
从而使数据得到加解密。
3、测试案例:
(1)、新建了一个SWING的单屏幕,在SF_POST_QUERY_OF_EACH_ROW()方法中调用Oracle已经建立好的function,对解密字段进行解密之后,再显示屏幕相应的字段上。
(2)、当进行insert或者update存盘,在SF_POST_DATABASE_COMMIT()方法中,调用加密function进行加密,然后存入数据库。
4、遇到的问题:
(1)查询的时候,由于在SF_POST_QUERY_OF_EACH_ROW()方法中解密后,又往屏幕中字段进行了set动作,导致屏幕的状态改变,最终导致屏幕存盘后会出现数据错误。
(2)这样做的效率比较低,因为每次都要在Java程序里调用解密,存盘时调用加密。
Oracle规定,不能对trigger的触发表进行 *** 作。
还有,如果用自治事务去实现,同样在update动作的时候会造成dead lock发生。
可以自己写个加解密模块,应付老师的话采用简单的加解密算法就行了,比如特定位置插入字符、移位、加减等等,也可以用别人写好的商用加解密算法,数据库里面保存加密后的内容,需要解密时调用你对应的解密算法就OK了
以下代码可以满足你的需求,已经在oracle中测试。
create table password1
(
user_id varchar2(10),
pwd varchar2(100)
)
CREATE OR REPLACE FUNCTION GET_MD5
( p_str in varchar2)
RETURN varchar2 IS
BEGIN
RETURN Utl_RawCast_To_Raw(DBMS_OBFUSCATION_TOOLKITMD5(input_string => Upper(P_Str)));
END;
insert into password1 values('wwj',GET_MD5('WWJ'));
update password1 set pwd=GET_MD5('LXY') where user_id='wwj'
通过配置本地数据库的tns配置文件实现:
去oracle安装目录下oracle\product\1020\db_2\NETWORK\ADMIN\ 找到tnsnamesora,用记事本打开,里边有远程数据库的tns连接配置串如下
ORCL23 =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192168323)(PORT = 1521))
)
(CONNECT_DATA =
(SID = ORCL)
)
)
添加好ip、端口和目标数据库的实例名(SID),然后确保tns名称(ORCL23)在整个文档中唯一,保存后打开数据库连接工具,输入远程数据库上的用户名密码,选择数据库对象为你配置的连接名就可以了
以上就是关于请问数据库要如何保密全部的内容,包括:请问数据库要如何保密、C/C++连接oracle 数据库,把数据库的用户名,密码等先加密到一个文件中,然后再解密出来供连接数据库使用、如何把oracle数据库中的密码这一项的字段都改成MD5加密的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)