金仓数据库KingbaseES客体重用
关键字:
KingbaseES、客体重用、人大金仓
什么是客体重用
根据百度百科,客体重用(object reuse)指在对客体初始指定、分配或再分配一个主体之前,撤销对该客体的全部授权信息,当前主体获得对一个已被释放客体的访问权时,当前主体不能获得原主体活动所产生的任何信息。
KingbaseES通过在资源申请和释放的位置清除介质上残留的信息,以达到客体重用的要求。
KingbaseES的客体重用
- 加载插件
修改kingbase.conf文件中shared_preload_libraries 参数后重启数据库。
shared_preload_libraries = 'sysreuse_residual_data'
- 配置参数
ALTER SYSTEM SET sysreuse_residual_data.enable_obj_reuse = on;
SELECT sys_reload_conf();
- 卸载插件
- 修改kingbase.conf文件中shared_preload_libraries 参数后重启数据库。
shared_preload_libraries = ''
- 残留信息清理方法
共享缓冲区和磁盘文件均采用全0覆盖的方式清理残留数据。
实现方式
插件reuse_residual_data通过在事务提交阶段插入hook实现插入对缓存和磁盘进行清空的操作。
例如,在函数StmgrDoUnlinkAll()中,会对本轮事务中被删除的数据库对象进行缓存资源的释放和磁盘文件的删除,在DropRelFileNodesAllBuf()中调用InvalidateBuffer(),在InvalidateBuffer中插入hook:InvalidateBufferHook可以拿到缓存块并进行清理。回到函数StmgrDoUnlinkAll()中,在缓存得到释放后,会开始逐个删除磁盘文件(unlink),插入hook:stmgr_dounlinkall_hook在文件删除前将其中的全部内容使用0覆盖一遍。