现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

一种基于Firebird数据库加密数据项的方法

2014-08-20 06:33 工业·编程 ⁄ 共 1403字 ⁄ 字号 暂无评论

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

参考网址:

http://www.firebirdsql.org/file/documentation/reference_manuals/reference_material/html/langrefupd25-ddl-trigger.html#langrefupd25-create-trigger

示例:

注:

(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).     只对数据库表中的核心字段加密

可选择通过本方案,或者对需要加密的字段在程序中先行加密,再存库(设计思路上,本方案较优,但需比较批量操作时两种实现方案的存取效率)。

作者:zhuxing_founder

给我留言

留言无头像?