--------------Access数据库的加密问题!!!------------------(200分)

  • 主题发起人 主题发起人 starsite
  • 开始时间 开始时间
S

starsite

Unregistered / Unconfirmed
GUEST, unregistred user!
问题:用二进制编辑器打开mdb可以看到一些数据明文!
目标:
1 查看二进制不能看得到数据明文。
2 能方便供数据敏感控件访问数据。
3 允许多个进程同时连接该数据库。
==============
我曾考虑的办法:
a 给整个mdb加密,比如DES,使用前先解密为临时文件,用完后加密覆盖原文件。
b 给字段内容加密。这个方式好像不便操作数据库,比如显示和查找数据。

请高手指教!!!
 
a.没有用的,在你使用时,人家可以把你的临时文件拷贝出来就破解了;
b.更加没有意义,因为对所有的字段加密将会是你和程序都花大量的时间在加/解密上面;

意见:仅仅对关键字段(如'密码'等)加密就够了,如果对方有足够的权限打开数据库,那你也没什么法子了;另外,我也不太清楚你对数据的加密要求怎么会那么高?做的什么软件?
 
数据库主要来存储私人敏感信息,如手机短信等。
实际上要求也不高,只要不能“用二进制方式打开mdb就能看到明文”就够了。

“a.没有用的,在你使用时,人家可以把你的临时文件拷贝出来就破解了;”
RE:我们认为这种“破解”有一定难度(只要临时文件做的比较隐秘),至少可以挡住不那么精通程序的用户。
 
“b.更加没有意义,因为对所有的字段加密将会是你和程序都花大量的时间在加/解密上面;”
RE:如果只做简单的算法加密(如移位加异或),效率上的影响应当可以接受。
 
自己顶!
 
用自带的压缩功能压缩一下就行了。
 
压缩功能可不能提供加密用途,access有自带的加密功能,在菜单:工具->安全->编码/解码数据库,可以解决问题1、2(当然,access有自带的加密功能有很多软件可以破解,只能对数据做简单的防护--不用明文保存数据),至于3,mdb本来就允许同时访问的,不明白你的意图。
 
to dirk:
我看到有些加密方式只能以“独占模式”打开数据库,故有此顾虑。
 
to Dirk:
“编码/解码数据库,可以解决问题1、2”
因为mdb文件是动态创建的,这个“编码/解码”可以通过Delphi程序实现吗?
 
access中所说的独占模式是指执行功能的用户对要“编码/解码”的数据库有独占权限,具体可看access安全方面的帮助,加密数据库的使用并非必须在独占模式下,具体一试便知。

你说是动态创建mdb,如果是调用dao方法去创建,那在创建时就可加上加密选项,直接创建加密数据库,前面老白说压缩,我查了下,压缩是可以同时加密的,压缩时指定Jet OLEDB:Encrypt Database=True参数,压缩后的就是加密的数据库。

找到jro压缩的代码:
var
db: OleVariant;
begin
db :=CreateOleObject('JRO.JetEngine');
db.CompactDatabase('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=源.mdb', 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=目标.mdb;Jet OLEDB:Encrypt Database=True');
db := Unassigned;
end;

创建数据库的代码想必你有,加密参数可参考access的dao帮助。
 
多人接受答案了。
 
后退
顶部