1.1 加密方案
1.1.1 开发UDF加解密函数库
用c\vc\delphi等语言开发用户自定义函数库。
调研基于win32平台,采用vc++2005开发加解密动态库。
函数申明示例:
extern "C" __declspec(dllexport) char * __cdecl reversestring(char *pSrc);
注:
(1). 1.1.2和1.1.3节均针对某个firebird数据库所做的操作,必须先要connect已存在的数据库成功。
(2). 1.1.2和1.1.3节中的示例通过FirebirdISQL Tool工具编写。
1.1.2 声明UDF函数
要想在数据库中使用UDF函数库中的函数,必须在数据库中进行函数的声明。
声明命令:
declare external function
语法如下:
declare external function '名称'
传入的变量型态列表
returns 回传变量型态 FREE_IT(释放函数实现中分配的内存)
entry_point '函式名称' '模块名称';
示例:
注:
free_it不是必须,只有在函数的实现中分配了内存时,才需添加到语句中。
1.1.3 创建触发器
在Firebird数据库端利用触发器机制来实现数据添加、修改后的自动加密,可以避免系统在开发过程中对数据加密操作的附加编码工作,降低系统开发的复杂性。
创建触发器语法:
CREATE TRIGGER name
{<relation_trigger_legacy>
| <relation_trigger_sql2003>
| <database_trigger> }
AS
[<declarations>]
BEGIN
[<statements>]
END
参考网址:
示例:
注:
(1). 语句set term ^;的作用;
(2). 触发器若生效,需断开数据库连接。
1.1.4 数据加密测试
在数据库中,由于已创建了数据加密的触发器,所以测试数据的添加修改非常简单,与正常的数据添加修改完全一样,可以通过sql语句进行操作。
创建触发器之前执行insert操作后查询的数据截图:
创建触发器之后执行insert操作后查询的数据截图:
1.1.5 数据解密
查询数据时,只需使用UDF解密函数对查询的加密字段进行解密操作即可。
本测试用例中使用同一个函数reversestr将字符串逆序,查询结果截图如下:
1.2 方案说明
1.2.1 不足之处
本文中加密方案是针对某数据库中某表的具体字段进行处理,这样会存在如下问题:
(1). 若对其他表字段加密,需重新创建触发器;
(2). 若对表中所有字段加密,则会存在效率问题。
1.2.2 应对之策
(1). 只对数据库表中的核心字段加密
可选择通过本方案,或者对需要加密的字段在程序中先行加密,再存库(设计思路上,本方案较优,但需比较批量操作时两种实现方案的存取效率)。