各位大虾,想请教一下,我有一个MDB的数据库,其内容用了加密编码,并非数据库的打开密码设置,是对每一项数据进行了单独加密编码,现在要对数据库进行查询,并体现在DATAGRID表里,怎样才能用SQL语句按查询要求显示符合的数据,而且需要显示出解密后的内容,同时怎样能最高效率?
我自己能想到的过程是,先对条件项目解密,然后SQL 查询显示符合条件的,然后再对每一项数据解密后再显示到DATAGRID中,但这样感觉开销很大,很复杂,不适合大型数据。所以想请教各位。谢谢。

解决方案 »

  1.   

    先对查询条件同样加密,然后用SQL语句按加密后的查询条件查询,出库后,对字段内容解密并写回对应字段(但注意不要用update更新数据库),然后绑定datagrid.个人建议,仅供参考......
      

  2.   

    没什么很好的解决办法。 首先要看你的查询条件是怎么确定的,如果SQL使用了like 等模糊查询的关键字是没有什么很好办法的。  如果是这样的话,你可以针对数据库文件整体加密,在程序启动时先解密数据库,然后已独占方式打开数据库,关闭时加密数据库,最好还启动一个监控进程保证启动进程非正常状态退出后能正常加密数据库文件。如果没有这些模糊查询的情况下,可以在表中添加一个CRC的HASH字段, 在向数据库Insert数据时,先将原始数据进行HASH,并将HASH也写入该HASH字段,那么在客户端查询的时候,先将查询条件HASH,然后直接检索HASH字段即可,这样能够以最快的速度检索到数据记录。还有一种方法是使用文件驱动的方式对数据库文件进行透明加密, 原理应该没有问题,不过想实现应该难度很大。
      

  3.   

    第一步查询条件我也是这样做的,但出库后有大量字段,内容很多。难道一定需要一个个字段的去单独解密后再列表出来?有不有比较高效的方法一次解密出库?还有一点我想问一下,用一个隐藏得DATAGRID和一个显得,一个用来隐藏操作解密,完毕后再传给显的?这样的开销大还是通过DAO对象,用代码对其解密后再帮定显示控件大?谢谢!
      

  4.   

    用SQLLITE, sqllite支持内存数据库。 
      

  5.   

    做一个文本框,编辑某行时把这个文本框显示出来,显示前把数据解密,编辑完后按回车或者确定按钮完成加密写会DATAGRID并隐藏文本框
      

  6.   

    这么做意义不大,特别是数据量大时,查询过程很慢的。
    如果是mdb文件,建议可以修改mdb结构,让access打不开,只有用你的程序才能打开。
    我以前一直这么做的,关键的就是错误处理上得多花点时间了...........
      

  7.   

    在SQL Server中可以用自定义加解密函数嵌入到SQL中解决,如果是Access不支持自定义函数,但是支持VBA函数,如果算法比较简单用VBA函数可以实现的话那可以用VBA函数完成
      

  8.   

    SQL可以嵌入解密函数?怎样做?能给个事例吗?谢谢
      

  9.   

    SQL Server例子
    CREATE FUNCTION fn_Decode(@Source varchar(250))
    returns varchar(250)
    as
    begin
    Declare @Dest varchar(250)
    -- 算法对@Source解密输出到@Dest
    return @Dest
    end
    GO
    调用
    SELECT dbo.fn_Decode(UserPass) FROM UserInfo
      

  10.   

    用ultraEdit打开mdb文件(二进制),你会发现mdb的文件头有一部分内容修改了对数据本身没有影响。用程序先把这段内容修改了,再用access打开试试,只要打不开,说明你成功一半了,当然了你还在测试如果可修复还是不行的,一直到无法修复为止。进入系统时,程序先把原有的内容写回mdb文件中,这样mdb文件就可用了。退出系统时,再修改mdb文件,mdb文件又不能用了思路是这样,因为是很多年没做开发了,原来的代码一时也找不到了,所以只能给个思路..........