[返回]
计算机世界2000年第27期

加密管理程序

高品均 陈荣良

  数据库加密管理程序是数据库管理员定义加密数据项的工具,提供了创建加密字典、删除加密字典、表加密、表脱密、表修复、加密字典权限管理等功能,它利用数据库加脱密引擎完成对已有数据的加密或脱密处理。

  加密字典管理程序由系统管理员使用,普通用户不必关心。

  加密字典管理程序由下述各子模块组成:

用户注册模块

  “用户注册模块”是数据库管理员启动加密字典管理程序后必须通过的身份验证模块,该模块防止未授权人员使用加密字典管理程序,确保加密字典的安全。

  身份验证的方式采用DBMS通常使用的用户名和口令机制。为了进一步增强安全性,可以利用IC卡读写器或指纹识别器进行用户身份认证。

  通过“用户注册模块”的身份核对后, 操作人员才能访问其他各功能模块。如果注册成功,则获得一个SQLCA,供后续使用;如果失败,则被拒绝进入加密字典管理程序。

  该模块是进入整个系统的先决条件,其输出的SQLCA是用于所有数据库操作的全局变量。

加密字典配置模块

  该模块提供用户在当前数据库创建及删除加密字典的功能,包括在数据库加密系统安装后完成加密字典的初始化工作,以及在不需要对任何信息进行加密时删除加密字典。

  用户选择创建或删除加密字典的操作后,程序即调用该模块中相应的功能函数,调用参数是用户注册后所获取的SQLCA。

  创建加密字典的过程如下:

  删除加密字典的过程如下:

加密定义修改模块

  “加密定义修改模块”给数据库管理员提供了一个窗口界面,在此界面中,用户可以指定需加密或脱密的表、字段,程序根据实际的加脱密要求,完成数据库结构及加密字典的调整和数据的加脱密转换工作。

  该模块是加密字典管理程序的主要功能模块,它通过 s_tab参数调用“表信息检索模块”、“密文表配置模块”以及“数据转换模块”,完成一个表的加密定义修改任务。

  该模块的处理过程如下:

  在以上操作中,如果成功则继续进行下一步,否则显示错误信息,终止退出。

表信息检索模块

  该模块从数据字典中检索出与某个表有关的各种信息,放入s_tab结构变量中,这些信息包括表名、表标识、主键定义、外键定义、索引定义、字段定义等,供其他模块使用。

  “表信息检索模块”以函数的形式提供服务,输入参数是 SQLCA和表的名称,输出数据存放在s_tab的数据结构中,成功返回1,失败返回0。

  该模块被“加密定义修改模块”、“密文表配置模块”调用,其处理过程如下:

  在以上的操作中,如果成功则继续下一步,否则显示错误信息,并终止退出。

密文表配置模块

  “密文表配置模块”的功能是根据用户确定的加密定义创建或删除密文表,同时将加密定义写入加密字典或从加密字典中删去有关内容。

  “密文表配置模块”为“加密定义修改模块”提供下列服务:

  用户的加密定义存放在s_tab数据结构中,作为输入参数, “密文表配置模块”根据s_tab中的加密定义进行处理,最后将操作成功或失败的结果返回给“加密定义修改模块”。构建密文表及加密字典信息的步骤如下:

  删除、更改密文表及加密字典信息的步骤如下:

  在以上的操作中,如果成功则继续进行下一步,否则显示错误信息,终止退出。

数据转换模块

  “数据转换模块”是专门为“加密定义修改模块”服务的,能完成一个表的加密、脱密以及加密列变更三种需求下的数据转换工作。

  “数据转换模块”的程序形式是一个独立的动态连接库,它输出三个函数供“加密定义修改模块”调用,这些函数的定义如下:

  上述各函数出错时返回“-1”,成功则返回实际被转换的记录个数。

  其中的GetSQLLink与PutSQLLink由DBHandle(SQLCA)函数转换得到,分别代表转换数据时Get操作(SELECT)与Put操作(INSERT & DELETE)所使用的不同的数据库接口参数。如果一次仅仅转换一条记录,GetSQLLink与PutSQLLink 可以相同,否则GetSQLLink与PutSQLLink必须不相等。

  表名参数只需明文表的名称,对应密文表的名称可从加密字典获取。

  转换条件参数是一个字符串形式的符合SQL语法的查询条件表达式,用于限定待转换的记录集,也可以不带转换条件,此时系统将一次完成对整个表的数据转换。由于一次转换多条记录时,不能利用ReadText/WriteText的数据直接存取功能,因此,对于带Text/Image字段的表,输入的转换条件参数最好能限定为一条记录。

  如果能保证只有一条记录满足转换条件,可以将附加参数置为1,以省略某些判断操作,加快转换速度,否则将附加参数置为0。

  “数据转换模块”自身并不对数据进行加密或脱密,实际的加脱密工作由数据库加脱密引擎完成,但事先必须将加密定义写入加密字典,供数据库加脱密引擎使用。

  “数据转换模块”内部没有任何commit或rollback命令发往数据库服务器,它不考虑数据库事务的开始、提交、回退,而是留给调用者处理。当然,也只有PutSQLLink这个参数牵涉到事务处理问题,GetSQLLink并不改变数据库,不存在事务处理问题。