安全的ACCESS加密方法,第1张

安全的ACCESS加密方法,第2张

微软的ACCESS数据库是我们常用的桌面数据之一。大多数中小企业的数据库管理系统都可以使用,但其安全性一直令人担忧。设想一套财务管理系统,用户直接打开数据库修改数据,会发生什么情况?有些系统可能只是更改扩展名或向ACCESS数据库添加密码。众所周知,网上有很多破解访问密码的方法和工具!所以这样的加密同样令人担忧。这里有一个简单的加密ACCESS数据的方法,供你参考。

用UltraEdit打开可以看到MDB文件前16个字节的内容:
00 01 00 53 74 61 64 61 72 64 20 4a 65 74
现在只需更改其中的几个,然后用ACCESS打开,就发现有不同的识别文件格式错误。因为ACCESS前面存储的信息都是MDB文件的定义和密码,如果这些内容被更改,别人就很难看到这个数据库的格式而无法打开,而且这样也不会改变数据库的内容,破坏原有的数据。

我们用Delphi做一个简单的加密解决方案程序:

使用的加密解决方案函数如下:

const
titlestr:array[0..15] of byte=
([5],,[5],,,,E,,,,,,A,,$ 74);//对应MDB文件的前16个字节
titlestr2: array [0..15] of byte =
(,$ 4a,[5],,,,,,$ 4e,$//自己写更改后的MDB文件的前16个字节,比如自己公司的简称或者自己的名字
ProduceEncryptMDB(文件名:字符串);//用titlestr2内容替换MDB的前16个字节,从而实现加密的功能
var F:TFileStream;
begin
如果不存在文件(文件名),则退出;
F:=TFileStream.create(文件名,fmopenwrite);
试试
F.seek([5],sofrombinging);
F.Write(titlestr2,16);
最终
f . free;
end;
end;
产生uncrypMDB(文件名:字符串);//恢复MDB
var F:TFileStream的前16个字节;
begin
如果不存在文件(文件名),则退出;
F:=TFileStream.create(文件名,fmopenwrite);
试试
F.seek([5],sofrombinging);
F.Write(titlestr,16);
最终
f . free;
end;
end;

我们知道一个锁定的文件(。ldb文件)将在打开ACCESS数据库后出现。因为我们自己要用数据库,所以用的时候一定要还原数据库。
如果恢复后没有加密,用户还可以复制MDB文件,然后用ACCESS或其他工具打开,所以打开前后都要加密数据,保证数据的安全性。
使用Delphi和ADO连接数据库可以通过以下方法实现:

//还原数据以便可以使用数据库
copy file(pchar(app _ path+' \ data \ account . db ')、pchar (app _ path+'data \ temp.db ')、false);//app_path表示程序的当前目录,account.db是一个MDB文件,改变了扩展名
un crypmdb(app _ path+' data \ temp . db ');
copy file(pchar(App _ path+' data \ temp . db ')、pchar(App _ path+' \ data \ account . db ')、false);
adoconn . connectionstring:= ' provider = Microsoft。Jet . OLEDB.4.0数据源= '+App _ path+' data \ account . db;持久安全信息= false ';//adocon是TADOConnection组件
try
adoconn . connected:= true;
except
messagebox(handle,'打开数据库时出现致命错误!!!',' error ',MB _ OK+MB _ icon error);
end;
//打开后立即加密
copy file(pchar(app _ path+' \ data \ account . db ')、pchar (app _ path+'data \ temp.db ')、false);//app_path表示程序的当前目录,account.db是一个MDB文件,改变了扩展名
encrypmdb(app _ path+' data \ temp . db ');
copy file(pchar(App _ path+' data \ temp . db ')、pchar(App _ path+' \ data \ account . db ')、false);
delete file(App _ path+' data \ temp . db ');
上面的临时文件用了两次是因为数据库打开后直接写到MDB会有问题,而且你无法确定有多少用户打开了程序。
整个程序共享一个TADOConnection,只在数据库连接打开时恢复MDB文件,其他时间MDB文件始终加密!用户复制的时候很难知道MDB文件是什么!

打开数据库后,会出现一个。ldb文件,在类型中将出现ACCESS字样。如果不想让人看到是什么,就修改注册表,比如:
reg:=TRegistry。创建;请尝试注册。ROOT key:= HKEY _类_根;
reg。OpenKey('。ldb’);
reg。WriteString(' ',' tempfile ');
finally
reg . close key;
reg . free;
end;
用户看到的文件类型是tempfile。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 安全的ACCESS加密方法

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情