金融系统的纵向审计在时间轴上透视数据
2020-08-13贾代平沈亚军
贾代平,夏 鑫,沈亚军
(山东工商学院 会计学院,山东 烟台264005)
一、引言
大数据的观念已深入人心,数据已经成为现代社会的一项重要生产资料。与传统的各类物化的生产资料相比,金融数据具有显著的动态特性,它随时间的变化而变化。金融系统的业务审计就是发现数据之间的联系以及各类业务数据变化之间的线索。我们认为,考察金融业务数据随时间的变化关系既有理论意义又有现实需要。事实上,如果在金融系统的数据服务端能够有效地把握和利用数据的动态特性,可以大幅度地提升数据本身的应用价值。
利用网络和数据技术提高传统审计工作的效率和能力是一种趋势[1-3]。近年来,为适应数据领域的技术发展和应用需求,突破传统数据管理研究的范围和固有框架,我们从不同的角度将数据领域的新观念与新需求引入对金融业务的审计研究,力争发展出自己的审计特色,提高审计能力和效率,其中金融系统的纵向审计就是我们取得的成果之一。
二、金融系统纵向审计的必要性
金融系统的审计是指审计专业人员依据金融业务规范和财务审计准则规定的程序和方法对被审计对象的金融资产、业务往来、收入与损益的真实性、合法性、有效性进行事后监督,并对其作出客观、公正的评价,目的是揭示金融系统内的资产、负债和盈亏等实际情况,发现和报告金融业务过程中的各种不规范问题,维护各类金融业务的正常、有序运转。
本质上,金融业务是一种建立在“数据”之上的业务活动,而针对金融业务的审计是财富管理活动中的必要环节之一。大数据时代,需要我们充分利用和挖掘有效的数据资源来提高审计活动的效率和质量。
(一)传统审计存在的困难
当前的各类金融业务已经由传统的财务电算化过渡到金融信息化、网络化阶段[4-5],金融信息系统管理着所有的金融业务及其相关数据,但业务人员和审计人员只能利用信息系统的前端开展工作,我们知道前端只是金融业务的人机接口,并不能给出业务处理过程的细节信息,审计人员只能根据前端系统输出的各类业务处理结果来梳理、判断资金的使用。比如业务记账结果和实际资金使用并不匹配,但后端却真实地记录了资金的运行状况。
另一方面,金融系统的前端缺乏对资金使用历史的把握,审计人员若要了解某项资金在过去某个时间段的动态使用情况,前端却无能为力,因为前端输出的仅仅是某个时刻的静态数据(结果),若要由某个时刻或某些时刻的静态结果去探究随时间变化的动态过程,这会给审计人员带来巨大工作量(甚至人力不可及),因此在实际的审计工作中根本不可行。事实上,几乎所有的金融系统的前端并不能根据审计人员的需要输出业务处理的历史数据,这就会给进一步的审计工作带来难以克服的障碍。
(二)纵向审计的含义及其必要性
由上可知,由于缺乏动态数据支持,审计人员只能根据金融系统前端输出的静态数据去分析问题、开展审计工作,如图1所示。审计人员能够获得的数据取决于当前时间点,如果当前时间在t1,看到的是t1时间点的静态数据,此时过去的时间点t2或t3的静态数据则无从考证。这种状况在分析某些资金的来龙去脉时就显得力不从心,因此如果仅仅在某个时间点上分析数据,依据当前数据和过去的某几个固定时间节点上的历史报表来开展审计,我们称之为“横向审计”。
图1 纵向审计的数据透视
“纵向审计”是审计人员在上述横向审计的基础上,突破时间点的限制,不仅利用过去时间切片上的任意数据,而且可以在指定范围内任意选择数据切片的时间点和数据,完全不受历史报表的限制,即能够根据资金分析的需要随时选取过去的某个时间切片的数据进行的审计。当能够连续查看不同时间切片上的业务数据时,整个金融信息系统的业务数据就会立体地呈现在审计人员面前。
金融系统的纵向审计是从数据的服务端来进行审计活动,所有金融数据的变更在服务端(后端)都有迹可寻,让立体化的“数据”说话,这将摆脱长期以来审计活动严重依赖客户端(前端)业务系统及其业务人员的局面,实践中会大幅度提高审计活动的工作效率以及审计决策的可信度和公正性。
三、金融业务处理的基本模型
为了介绍我们的纵向审计工作机制,让我们从金融信息系统的业务处理模型开始。金融系统的业务类型千变万化、纷繁复杂,但有一个普适的业务逻辑,即任何复杂的业务处理都是由最基本的业务单元构成的,这个业务单元在数据管理领域有个专门的名词叫transaction,中文翻译成“事务”(或“交易”),事务是导致金融信息系统中各类资金数据变更的基本单元,它是构成各类金融业务的元业务[6]。
为了说明事务对金融数据动态变化的影响,现举例说明。“转账”是金融信息系统的一项常见业务,在数据系统内部此项业务要执行多个相互关联的基本操作,如将一笔资金由甲账户转到乙账户,如表1所示。
表1 转账业务的事务处理
就此案例,前三项操作需要作为一个整体(unit)来执行,要么全部执行,转账被确认(提交),甲乙两个账户的余额被同时更新;要么全部不执行,如执行到步骤3)时出现失败(介质或网络故障等),此时步骤1)和2)操作结果无效,事务被撤销(回滚),数据恢复到事务前的状态。如果业务处理时破坏了这里的整体性就有可能会导致资金数据的严重不一致性(inconsistency)。就此例而言,这三项操作的先后顺序无关紧要,但需要保持整体的原子性(atomicity)。在金融信息系统中,所有的交易业务都是严格按照这样的事务模型执行的,没有事务之外的业务处理。
(一)事务的还原档案及其价值
由于事务处理存在撤销(回滚)的可能性,因此当金融系统的服务端执行数据变更操作时,数据管理平台会将修改前的数据以特定的形态(old image)保存起来,这就是事务的还原档案[7]。两个直接目的,一是防止事务撤销;二是维护并发环境下的读一致性。金融信息系统是一个多用户的并发事务环境,这里的old image和new image可能会同时存在多个不同版本,一个事务能够访问的数据到底是来源于new image还是old image,来自哪个版本的image,取决于事务的隔离级别,这就是并发环境下的读一致性和多版本并发控制(MVCC)[8]。
由于读一致性的需要,并发环境下的业务处理可能需要大量还原档案的支持。这里有必要明确一致性的含义:用户执行数据访问时,数据系统需要返回访问执行时刻系统已经确认的数据。但实际系统中的任何数据访问并不能瞬间完成,它需要消耗时间。假设一项数据访问的执行需要消耗一分钟的时间,而在这一分钟的期间内,有很多并发事务已经修改了待访问的资金数据,并且已经提交确认。很显然,此时这个数据访问需要忽略当前数据的最新版本,跨越一个或多个事务,找到数据访问执行时刻对应的有效资金数据。正因为如此,在一个高负荷的实时的并发处理系统中,如果没有足够的事务还原档案的支持,一个耗时的数据访问有可能执行失败(当然,此时需要再次重新执行)。
(二)事务的日志档案及其价值
从金融信息系统的业务处理和系统维护的角度,金融系统的运行过程就是执行各种事务(交易)的过程。为了保障后台交易的安全性,金融系统在执行一项事务时,需要将事务的完整信息记录下来,包括事务涉及的账号、交易时刻、交易涉及的资金变更、发起交易的用户身份、交易事由等作为后台的一个特殊数据项记录下来,这就是事务的日志档案(又称为事务日志transaction log)[9]。形象地说,日志档案是金融数据平台内部记录各类业务处理的“流水帐”。
日志档案的记录以事务/交易为单位,日志档案里的每一项详细记录了交易处理的足够信息,以确保金融系统在必要的时候能够重演该事务。如果说金融信息系统中的资金数据是金融管理的直接数据或“原生数据”,那么金融信息系统中的日志档案则是金融管理的间接数据或“衍生数据”,它内在地记录着资金的变更逻辑。从另外一个角度看,资金数据反映的是各类业务处理的结果,而日志档案记录的则是各类业务处理的内在过程,有了这样的历史变更过程,在一定条件下金融信息系统就可以依次“重演”这个过程,这个内部可以重演的过程可以看作是资金数据的一种过程化的“保险”。
四、基于还原档案的审计
前面介绍了还原档案用于交易的撤销和并发环境下的读一致性,这样的作用可以看作是金融交易处理的联机保障,也为金融系统的纵向审计提供了数据变更的痕迹。原理上,一项交易一旦结束(确认或撤销),交易产生的还原档案即可丢弃。但由于还原档案里包含了当前资金数据的“怀旧”信息,出于业务审计的需要,我们可以人为地将其保留更长的时间,在此基础上发展出更有价值的系列金融业务,如为审计服务、提供对资金的跟踪能力等。
通常我们对某项资金的查询总是指查看当前时刻的有效资金数据,但资金数据总是随着时间的变化而实时变化的,这导致金融系统的业务审计变得复杂化。如果我们利用人为延期保存的还原档案可以实现非常有意义的向后数据透视,即将时间暂时回退到过去某个时间点,去观察“旧时”的资金状态,如图2所示。显然,有据可循的后向数据透视会降低金融系统业务审计的复杂度。
图2 还原档案用于资金数据后向透视
这里后向透视资金数据的依据是利用还原档案推演出资金在过去的某个时间点的状态,并不影响当前资金的状态,因此后向透视不会局限于特定时间点,一项交易撤销只能回到交易开始的时间点,而后向透视操作可以跨越事务,将时间点向更远的方向推演。图2中设当前时刻为t1,还原档案中保存了t5至t1时段的还原信息,当前交易持续时间为t2至t1。交易撤销,资金数据回退到t2时刻;交易确认,“旧资金数据”被“新资金数据”永久覆盖。能否看到覆盖前的资金数据呢?我们利用存在的还原档案即可做到,如查看t3或t4时刻的资金数据,且t3或t4可以是t1至t5期间的任意时间点。从这个意义上说,后向透视的操作是金融系统中交易撤销操作的拓展,但这种拓展并没有破坏交易的完整性,其结果仅仅是在当前资金状况的基础上结合连续存在的还原档案“计算”出来的资金数据。
显然后向透视操作受到系统客观条件限制,后向透视的时间点不能无限制向后推演,因为要实现某个时间点的资金数据透视,其内在要求是从该时间点至当前时刻期间的所有还原档案都必须存在。从上面的图示可知,图示中的金融系统最远可以透视到t5时刻,若要透视到t6时刻(图示中的后向透视3),由于没有t6至t5期间的还原档案,数据透视失败。由此可见,还原档案保留的时限决定了后向透视的时间窗。
金融数据的后向透视极大地方便了对金融业务的审计操作,为了能够后向透视更远的资金数据,在金融工程的实践中我们需要将还原档案作为一类元数据(metadata)来保存。有了这类元数据的支持,系统中的资金数据可以透视到更远的过去,让金融系统的纵向审计向纵深发展。
五、基于日志档案的审计
在现代金融系统的数据平台中,交易的日志档案也是作为另一类重要的元数据来保存的,它反映的资金交易的内在过程。让我们从资金数据和日志档案两者关系的角度来理解日志档案在纵向审计上的应用。
为保障资金数据的安全,数据平台总是应用“先写日志档案的原则”(write-ahead log rule)[10]来执行各种交易处理,当一项交易被确认时,日志档案被优先记录,即只有日志档案记录完成,交易才被确认成功。金融数据平台之所以这样处理,是为了系统在各种异常/故障情形下资金数据能够得到最大限度的恢复。
就资金数据和日志档案两者的关系而言,存在如表2所示的三种可能:(1)交易正常完成并确认,日志档案和资金数据被依次写入后端数据系统;(2)如果由于某种原因,交易未能正常完成(未被确认),但交易持续期间部分资金数据已经被写入后端系统,这样的资金数据被称为inconsistent/dirty data,这样的资金数据无效,这就是交易撤销的情形;(3)如果一项交易被正常确认,即日志档案已经写入系统后端,但由于系统异常或故障,对应的资金数据并没有被及时记录,这就是第三种情形。当资金数据和日志档案出现不一致时,现代数据平台总是以日志档案中的信息为准。既然日志档案得到记录,交易就是有效的。此种情形我们可以利用日志档案来补写资金数据,这个过程就是一种特殊的资金数据在时间轴上向前演进的过程。为满足审计工作的需要,某些情形下我们可以人为地利用这个演进过程提供前向透视资金数据的能力,如图3所示。
表2 资金数据和日志档案的关系
更进一步地,上面这个资金数据的演进过程还可以实时地进行。典型的金融数据系统的高可用方案,如主备用(primary-standby)系统或主从(master-slave)复制系统,其中的standby/slave端就是通过网络实时地接收并应用从primary/master端传输过来的日志档案实现两端的资金数据同步。
显然,这里的日志档案实现金融系统的纵向审计操作的重要支撑信息。如果当前资金数据处于过去的某个时间点,利用日志档案,我们可以将资金数据向更新的时间方向推演,这就是前向资金数据的透视。
六、联合两类档案的双向数据透视
前面分别介绍了数据系统的日志档案和还原档案的价值及其在金融业务审计中的用途。从应用的机制上分析,两者在资金数据透视的方向上是相反的。还原档案的基本功能是撤销交易,它通常是在交易内起作用,我们在金融系统的实践中扩展还原档案的保留时限创造出后向透视资金数据的功能;而日志档案的基本功能是补写交易的资金变更,进一步地利用日志档案我们实现了资金数据的前向透视。两类档案对资金数据都有演进的作用,只是一个向后(backward),一个向前(forward)。充分利用这两类档案资料,就可以为金融系统的审计作业提供一种基于前向和后向时间点的数据透视能力,从而实现全功能的纵向审计。
图3 日志档案用于资金数据的前向透视
如图4所示,当前时间为t1,出于金融审计操作的需要,如果要让数据回到过去的某个时间点(如时间点t4),有两种基本的途径:一是通过传统的金融数据的备份(backup)将资金还原(restore)到备份时刻的状态;另一种是通过后向透视手段让资金数据回到过去。不过,两者在易用性上存在显著的差别,备份只是在某些固定的时间点完成,资金数据还原时我们只能被动地选择这些时间点,而后向透视手段则不受此限制,后向透视的时间点可以在一个区间内任意选择,如后向透视到t4,如果发现t4时间点的资金数据不是审计作业需要的,在此基础上可进一步地向后推演,如由t4后退到t5,只要时间点在还原档案允许的时限范围内,这样的后向透视操作可以一直进行下去。
需要注意的是,如果资金数据在某个时间点要向前推演(更新的方向),此时就需要依靠日志档案,如前所述该过程被叫做前向透视。图示中,在t4基础上可以将资金数据向前推演到t3时刻,如果需要,还可进一步推演到t2,类似的过程可以一直向前,直到将资金数据推演到最新时刻t1。
图4 基于时间轴的双向数据透视
由上面的过程可知,综合利用金融系统中的还原档案和日志档案,可以方便地实现数据在时间轴上灵活地推演,实现双向数据透视,这是一个完美的展现资金数据动态变化的过程,为金融业务的纵向审计提供了一种全新的、强有力的分析手段。
七、实现纵向审计的保障措施
在金融信息系统的资金管理实践中,上述的两类档案信息(还原档案、日志档案)并不是天然存在的。默认情况下,两类档案信息只是局限在交易(事务)范围内,前者是撤销交易的需要,后者是重演交易的需要。要实现对金融业务的纵向审计功能,我们需要事先有所准备,在保障资金数据安全存储的基础上,扩展两类档案的保存时限。同时我们也需要有这样的安全意识,绝对安全的系统是不存在的,事实上,这两类档案不仅可以用于金融业务的纵向审计,也是保障资金数据安全的一种手段。
显然,在没有足够还原档案和日志档案的情境下,纵向审计就会出现“巧妇难为无米之炊”的局面。我们在大量金融系统数据管理的实践中总结出实现双向数据透视的一般保障措施,由于篇幅关系,简述如下:
(1)根据后向透视需求的时间窗确定还原档案保留的时限;
(2)资金数据的备份需要包含还原档案,保障备份点的后向透视功能;
(3)建议日志档案独立存储,以提高资金数据的可恢复性;
(4)保持日志档案的适当冗余(redundancy),如联机镜像、冗余校验存储等;
(5)监控还原档案和日志档案的连续性和完整性,确保资金数据的可透视性。
八、结束语
金融系统的纵向审计是我们近年来开辟的一个新的研究领域,它是一种以金融系统后端数据为中心的审计方式,这种新型审计方式为审计人员提供前所未有的数据透视能力。(1)通过对动态资金数据的透视,实现对资金流的梳理,从而可以精准把握各类资金的使用动向及其过程监控,这极大地拓展了传统的基于前端业务分析的审计效率和审计能力;(2)将这里的数据透视能力作为金融数据管理的背景策略,有助于提高我们在金融系统中的风险控制、系统维护与数据保障能力。
最后需要说明的是,这里讨论的还原档案和日志档案并不属于金融信息系统中的常规数据,它们也并不存在于特定的关系模式中,两者都是在金融系统的正常运行过程中的衍生数据,需要我们像对待原生的资金数据一样去管理和维护它们。我们的金融系统的数据管理实践已经证明,充分利用这样的衍生数据不仅能够深化和扩展金融系统的业务审计能力,也会开辟新型的金融业务,进而启发以“数据”驱动的创新。