[返回]
加密管理程序
高品均 陈荣良
数据库加密管理程序是数据库管理员定义加密数据项的工具,提供了创建加密字典、删除加密字典、表加密、表脱密、表修复、加密字典权限管理等功能,它利用数据库加脱密引擎完成对已有数据的加密或脱密处理。
加密字典管理程序由系统管理员使用,普通用户不必关心。
加密字典管理程序由下述各子模块组成:
用户注册模块;
加密字典配置模块;
加密定义修改模块;
表信息检索模块;
密文表配置模块;
数据转换模块。
“用户注册模块”是数据库管理员启动加密字典管理程序后必须通过的身份验证模块,该模块防止未授权人员使用加密字典管理程序,确保加密字典的安全。
身份验证的方式采用DBMS通常使用的用户名和口令机制。为了进一步增强安全性,可以利用IC卡读写器或指纹识别器进行用户身份认证。
通过“用户注册模块”的身份核对后, 操作人员才能访问其他各功能模块。如果注册成功,则获得一个SQLCA,供后续使用;如果失败,则被拒绝进入加密字典管理程序。
该模块是进入整个系统的先决条件,其输出的SQLCA是用于所有数据库操作的全局变量。
该模块提供用户在当前数据库创建及删除加密字典的功能,包括在数据库加密系统安装后完成加密字典的初始化工作,以及在不需要对任何信息进行加密时删除加密字典。
用户选择创建或删除加密字典的操作后,程序即调用该模块中相应的功能函数,调用参数是用户注册后所获取的SQLCA。
创建加密字典的过程如下:
当前数据库是否已存在加密字典,若是,则报错结束;
生成加密字典表;
如果创建成功,则操作成功;否则,显示错误信息,操作失败;
记载该加密字典的标识等信息。
删除加密字典的过程如下:
加密字典是否已存在且不为空,若是,则报错结束;
删除加密字典表;
如果删除成功,则操作成功;否则,显示错误信息,操作失败。
“加密定义修改模块”给数据库管理员提供了一个窗口界面,在此界面中,用户可以指定需加密或脱密的表、字段,程序根据实际的加脱密要求,完成数据库结构及加密字典的调整和数据的加脱密转换工作。
该模块是加密字典管理程序的主要功能模块,它通过 s_tab参数调用“表信息检索模块”、“密文表配置模块”以及“数据转换模块”,完成一个表的加密定义修改任务。
该模块的处理过程如下:
用户选择一个表;
调用“表信息检索模块”,得到表的所有字典信息;
列出表的字段信息,供用户修改加密定义;
根据用户的修改要求,将加脱密操作确定为加密、脱密、更改三种类型;
删除那些引用到原数据表的所有其他表的外键;
若操作是加密、更改,则构建密文表及加密字典;
调用“数据转换模块”的相应函数,完成表数据的明密转换;
若操作是脱密、更改,则删除、更新密文表及加密字典;
重建第5步中被删除的其他表的外键,使其能引用新的数据表。
在以上操作中,如果成功则继续进行下一步,否则显示错误信息,终止退出。
该模块从数据字典中检索出与某个表有关的各种信息,放入s_tab结构变量中,这些信息包括表名、表标识、主键定义、外键定义、索引定义、字段定义等,供其他模块使用。
“表信息检索模块”以函数的形式提供服务,输入参数是 SQLCA和表的名称,输出数据存放在s_tab的数据结构中,成功返回1,失败返回0。
该模块被“加密定义修改模块”、“密文表配置模块”调用,其处理过程如下:
根据输入的表名,获得该表的表一级信息;
获得该表的主键信息;
获得该表的外键信息;
获得该表的索引信息;
获得该表的所有列信息;
获得该表已有的加密定义。
在以上的操作中,如果成功则继续下一步,否则显示错误信息,并终止退出。
“密文表配置模块”的功能是根据用户确定的加密定义创建或删除密文表,同时将加密定义写入加密字典或从加密字典中删去有关内容。
“密文表配置模块”为“加密定义修改模块”提供下列服务:
构建密文表及加密字典信息;
删除、更改密文表及加密字典信息。
用户的加密定义存放在s_tab数据结构中,作为输入参数, “密文表配置模块”根据s_tab中的加密定义进行处理,最后将操作成功或失败的结果返回给“加密定义修改模块”。构建密文表及加密字典信息的步骤如下:
根据加密定义,构造出建密文表的SQL命令,创建密文表;
根据加密定义,构造出建密文表主键的SQL命令,建主键;
根据加密定义,构造出建密文表外键的SQL命令,建外键;
根据加密定义,构造出建密文表索引的SQL命令,建索引;
将加密定义信息存入加密字典表。
删除、更改密文表及加密字典信息的步骤如下:
删除与原密文表有关的加密字典内容;
若加脱密操作是更改,则将新的加密定义表名换成原来应当使用的名称;
删除原密文表,保证原密文表已为空;
若加脱密操作是更改,则将新的密文表换成原密文表的名称。
在以上的操作中,如果成功则继续进行下一步,否则显示错误信息,终止退出。
“数据转换模块”是专门为“加密定义修改模块”服务的,能完成一个表的加密、脱密以及加密列变更三种需求下的数据转换工作。
“数据转换模块”的程序形式是一个独立的动态连接库,它输出三个函数供“加密定义修改模块”调用,这些函数的定义如下:
EncodeRows(GetSQLLink,PutSQLLink,明文表名,转换条件,附加参数)
DecodeRows(GetSQLLink,PutSQLLink,明文表名,转换条件,附加参数)
CopyRows(GetSQLLink,PutSQLLink,原表名,新表名,转换条件,附加参数)
上述各函数出错时返回“-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并不改变数据库,不存在事务处理问题。