PS输出设置:168×202;上:16;外:27;分左右 审计数据采集与分析 第1章审计数据采集与分析概述 [MZ(1]第一篇基础篇[MZ)] 本篇共包含3章,主要介绍审计数据采集与分析概述、被审计单位的电子数据、电子数据采集与分析技术原理。本篇给出了实施审计数据采集与分析所必需的知识储备。 [MZ(1]第1章审计数据采集与分析概述[MZ)] 本章要点 ◆七步流程法 & 调查阶段 & 数据采集 & 数据清理、转换、验证 & 建立审计中间表 & 把握总体,选择重点 & 建模分析 & 疑点延伸、落实、取证 ◆拓展阅读 & 信息系统审计的安全性、有效性、经济性 & 信息系统审计和数据审计辨析 [MZ(2]1.1引言[MZ)] 审计实务和计算机技术的结合,在中国是随着20世纪80年代末90年代初开始的会计信息化而逐步加深的。20世纪90年代信息技术突飞猛进,金融、财政、海关、税务等部门,民航、铁道、电力、石化等关系国计民生的重要行业开始广泛运用计算机、数据库、网络等信息技术进行管理,国家机关、企事业单位会计电算化趋向普及。被审计单位管理存储财政、财务信息的手段发生了质的变化,报表、账簿、凭证等审计人员熟悉的纸质资料以电子数据的形式重新组织管理,审计人员面临“进不了门、打不开账”的尴尬局面。 审计对象的信息化,客观上要求审计机关具备运用计算机技术,全面检查被审计单位经济活动的能力,发挥审计监督的应有作用。20世纪末,时任审计署审计长的李金华同志指出“审计人员如果不掌握计算机将失去审计的资格”,首次将计算机审计上升到审计人员必备的专业技能的高度。 为了应对信息化对于传统审计的挑战,计算机审计应运而生。在世纪之交那个风云际会的年代,计算机审计要解决的最急迫的问题是实现协助审计人员审查被审计单位的电子账这个技术问题。 1999年,审计署组织开发了“审计数据采集分析”“审计数据采集分析”历经1.0、2.0、3.0三个版本的升级,目前最新版是“审计数据采集分析2012”。软件。该软件吸取了加拿大审计软件ACL和IDEA系统化的优点,是一个基于Microsoft SQL Server数据库管理系统的通用审计软件。“审计数据采集分析”软件成功实现了对电子账簿数据的获取,并支持对电子数据的查询、分析、统计和计算。运用该软件,审计人员在对被审计单位财务和业务等电子数据的审计过程中逐渐掌握了主动。 在实现财务电子数据审查的同时,新的问题也随之出现: 仅审查被审计单位的财务数据是否足够,业务电子数据怎么办?需不需要审查?如何审查?举个例子,当审计人员对中国铁路总公司(即原铁道部)进行审计时,当需要反映货运系统中罐车、敞车等车皮调度的真实性、合理性时,仅审查财务数据是不够的,对于货运系统中的业务电子数据的审查是必不可少的。因此,计算机审计的范畴从财务数据的审查拓宽到对财务数据和业务数据都要进行审查。这也就是计算机审计的第一层含义,对电子数据的审计,或者也可以称为计算机数据审计。 目前,计算机审计实务主要包括计算机数据审计和信息系统审计。 计算机数据审计是指运用计算机审计技术对信息系统中所存储和处理的电子数据进行的审计,这些信息系统不但包括被审计单位与财政收支、财务收支有关的计算机信息系统,还包括来自被审计单位之外的,与被审计单位有关的,从不同的角度体现被审计单位实际经营情况的方方面面的信息,如来自工商系统、国税系统、地税系统、电力系统、社保系统等信息系统记录的被审计单位的工商注册情况、纳税申报情况、生产用电情况、为职工缴纳社保情况等。计算机数据审计从技术上讲主要包括通过对来自被审计单位内部和外部相关的电子数据进行采集、转换、清理、验证和分析,帮助审计人员掌握总体情况,发现审计线索,收集审计证据,形成审计结论,实现审计目标。 信息系统审计是通过对被审计单位信息系统的调查和了解,对系统控制及系统功能的分析和测评,综合评价信息系统能否满足安全性、有效性和经济性的目标,促进被审计单位完善信息系统控制,防范业务风险;加强信息系统运行管理,规范业务行为;促进提高信息系统运行效率和投资效益。信息系统审计的更多知识请参看本章的拓展阅读部分1.3.1节的相关内容。 本书的重点在于阐述计算机数据审计的两个重要组成部分: 审计数据采集和审计数据分析。 审计数据采集,指的是宏观意义上的采集,它既包括将来自外部的电子数据采集到审计人员的计算机系统中,也包括电子数据获取之前对于需要获取的存储电子数据的信息系统及使用信息系统的单位的调查研究,还包括电子数据获取之后对于获取到的电子数据进行数据清理、数据转换、数据验证,以提高数据质量,并生成适合审计数据分析的审计中间表。 审计数据分析,指的也是宏观意义上的分析,它从已建立的审计中间表入手,根据审计中间表的内容,对审计目标进行总体分析,把握被审计单位的总体情况,找准薄弱环节,确定审计重点;对各审计重点建立分析模型,撰写分析语句,发现审计疑点;最后将发现的疑点交给审计核实组去审计现场完成对疑点的延伸、落实和取证工作。 从计算机数据审计的流程实现的角度上讲,审计数据采集和审计数据分析的具体内容可以概括为七个阶段的工作,简称“七步流程法”。这七个阶段的工作如下。 第一阶段: 调查阶段; 第二阶段: 数据采集; 第三阶段: 数据清理、转换、验证; 第四阶段: 建立审计中间表; 第五阶段: 把握总体,选择重点; 第六阶段: 建模分析; 第七阶段: 疑点延伸、落实、取证。 [MZ(2]1.2七步流程法[MZ)] “七步流程法”是计算机数据审计的一套完整的程序和流程。 [MZ(3]1.2.1调查阶段[MZ)] 调查阶段,审计人员应根据审计工作方案中审计目标的要求收集被审计单位相关业务系统的技术文档,以详细了解系统的数据库和数据情况,并在此基础上提出审计数据需求说明书交由被审计单位提供数据。 在调查阶段,应当了解被审计单位的组织结构,掌握计算机系统在组织内部的总体应用情况。根据审计目标,选择那些对实现审计目标有重要影响的计算机信息系统(即信息系统对被审计单位业务支持程度高,被审计单位业务对信息系统的依赖程度高)作为深入调查的子系统或功能,进行全面、详细的调查了解。调查了解的内容应包括软硬件情况、系统的开发情况和有关技术文档,系统的运行、维护、配置、管理情况,系统的功能、数据情况等。还可以包括业务系统的名称、版本、开发商、功能等内容,特别是业务系统自身是否有将业务数据导出的功能,如果可以导出,应了解导出文件的数据格式。 对计算机数据审计而言,数据情况调查是重点。 数据情况调查的主要任务是搞清楚被审计单位各业务系统存储和处理电子数据的基本情况。调查工作的一般思路是: 审计目标→审计内容与重点→审计内容所涉及的信息系统→与信息系统相关的电子数据。 数据情况调查是对信息系统产生的电子数据进行全面、深入认识和了解的过程,因此必须首先调查了解信息系统的业务流程。要详细了解被审计单位业务环节的具体操作方式和目的,必要时可以根据了解的情况绘制业务流程图,目的是使审计人员有一个初步的审计思路,更好地设计切实可行的审计方案,同时初步确定数据采集的范围。 在理解业务流程的基础上,还应进一步理解数据流程,从而了解系统应该生成哪些数据以及数据的生成过程、来源、去向等情况,为提出数据需求和下一步的数据分析工作打下基础。 在数据情况调查过程中,审计人员应将相关的技术文档尽量收集齐全,以便详细了解系统的数据库和数据情况。数据库及数据的说明信息都包含在这些技术文档中。审计人员应当首先阅读各种设计说明书,了解数据库总体结构,包括数据库总体布局、各级服务器上的数据库系统的名称、版本、内容、各数据库之间的关系等总体情况。在此基础上进一步了解数据库中数据表的具体情况等内容,以便根据审计需求确定从哪一层次采集数据、采集哪些数据库的数据,甚至可确定采集哪个数据库中的哪些表。通过对表间关系和表结构描述的了解,可以为后续的数据转换和创建审计中间表工作打好基础。 在上述工作的基础上,应提出审计数据需求说明书交由被审计单位提供数据。审计数据需求说明书中应指定数据采集的系统名称、数据库名称(必要时可以精确到需要采集的数据表的名称)、数据采集的具体方式、数据传输的格式、所需数据的时间段、数据交付的方式、数据交付的期限和其他注意事项等内容。 [MZ(3]1.2.2数据采集[MZ)] 数据采集,在调查阶段提出数据需求的基础上,按照审计目标,采用一定的工具和方法对被审计单位信息系统中的电子数据以及来自被审计单位之外的,与被审计单位有关的,从不同的角度体现被审计单位实际经营情况的电子数据进行采集。 数据采集可分两步实现: 第一步是通过调查阶段掌握的信息来选择需要采集的电子数据;第二步是通过一定的技术和手段实现对目标数据的采集,及时获取全面、完整的电子数据。常用的数据采集策略有三种: 一是通过数据接口采集;二是直接复制;三是通过备份文件恢复。 对被审计单位信息系统中的电子数据的采集一般需要在被审计单位技术人员的配合支持下完成。对来自被审计单位之外的,与被审计单位有关的,从不同的角度体现被审计单位实际经营情况的电子数据,如果审计单位的审计数据分中心已经积累了这部分的电子数据,可以由审计组向本单位提出申请,调出这部分电子数据;如果尚未掌握这部分电子数据,应通过正规途径尽可能协调相关单位,获取这部分电子数据。 [MZ(3]1.2.3数据清理、转换、验证[MZ)] 在实际工作中,经常需要将来源众多的被审计单位电子数据集成到一起进行分析和处理。由于被审计单位数据来源繁杂,数据格式不统一,信息表示代码化,数据在采集和处理过程中可能失真,被审计单位可能有意更改、隐瞒数据真实情况等诸多影响因素,对采集到的电子数据必须进行清理、转换、验证,使得数据能为审计所用。 数据清理是指为提高数据质量而对缺失的、不准确的、不一致的有质量问题的电子数据进行处理。通常,通过重复记录的识别与清理、缺失数据的补充、空值处理等操作可以提高数据质量。 数据转换包括数据库格式的转换以及数据内容的转换。数据库格式的转换要求将采集到的来源于被审计单位不同类型数据库格式的电子数据统一存储为一种数据库格式。数据内容转换要求对采集到的原始数据的含义进行识别,明确地标识出每张表、每个字段的经济含义及其相互之间的关系。通常,通过数据类型转换、日期/时间格式的转换、代码转换、值域转换可以实现数据内容的转换。 数据验证贯穿数据采集、数据清理、数据转换的全过程。 在数据采集阶段,数据验证要检查被审计单位提供资料的完整性,保证数据采集工作准确有效地进行,同时对采集到的数据进行确认,排除遗漏和失误。 在数据清理阶段,数据验证要确认数据清理工作没有损害数据整体的完整性和正确性。 在数据转换阶段,审计人员会将原始电子数据中表名、字段名、记录值代码以及表表关联的经济含义明确标识出来,这需要进行大量的查询、替换修改、插入数据、更新数据、删除数据等操作,每一步转换工作都有可能影响数据的完整性和正确性,因此应在这一阶段进行数据验证,以确保数据转换工作未对电子数据引入新的错误。 [MZ(3]1.2.4建立审计中间表[MZ)] 建立审计中间表,对获得的电子数据按审计需求进行投影、连接等“再加工”,从电子数据中选择满足审计需要的精简的数据集合,生成审计中间表,为建立审计分析模型形成数据基础。 审计中间表是利用被审计单位数据库中的基础电子数据,按照审计人员的审计要求,由审计人员构建,可供审计人员进行数据分析的新型审计工具。 通常在设计数据库的时候要对数据进行范式分解。范式分解这种规范化过程会将描述一个业务对象的数据分解成关系数据库中的多个逻辑表,这些表之间存在一定的关联关系。要利用被审计单位数据库中的数据来实现审计分析,必须对清理、转换、验证后的电子数据按审计需求进行投影、连接等“再加工”,从电子数据中选择出满足审计需要的较为精简的数据集合,生成一系列中间数据表——审计中间表。审计中间表是审计人员建立审计分析模型的基础。 建立审计数据中间表是一个循序渐进的过程。在对数据进行清理、转换、验证后,就应考虑设计出初步的审计中间表,此时的主要工作是帮助审计人员选定审计所需的基础性数据,如去掉与审计无关的字段、建立表与表之间的基本连接等。这一阶段创立的中间表称为基础性中间表。在建立分析模型进行具体的数据分析时,还要建立分析性中间表,即按照审计分析模型,对基础性中间表再进行字段选择、连接等处理,以帮助审计人员实现对数据的建模分析。 [MZ(3]1.2.5把握总体,选择重点[MZ)] 把握总体,选择重点是指根据审计目标进行总体分析,把握被审计单位的总体情况,找准薄弱环节,确定审计重点,建立审计分析模型以形成较具体的理论指导。 在总体分析时,可以从不同层次、不同角度对被审计单位的电子数据进行汇总、核对与分析,如进行账表核对、表表核对,也可以建立指标或指标体系进行分析,还可以使用多维分析工具从不同的层次和角度来观察被审计单位的电子数据。这些总体分析的技术和方法可以帮助审计人员把握被审计单位有关经济业务的总体情况,寻找薄弱环节,确定审计重点,避免审计工作的片面性和盲目性。 [MZ(3]1.2.6建模分析[MZ)] 建模分析,在总体分析的基础上,审计人员需要根据确定的审计重点,利用审计分析模型进行具体的数据分析。审计分析模型是审计人员用于数据分析的技术工具,它是按照审计事项应该具有的时间或空间状态(如趋势、结构、关系等),由审计人员通过设定判断和限制条件建立起来的一系列数学的或逻辑的表达式,并用于验证审计事项实际的时间或空间状态的技术方法。在实际工作中,要根据不同层次的审计需求建立不同层次的审计分析模型。一般而言,有总体分析模型、类别分析模型和个体分析模型。 目前常见的审计分析模型包括根据法律、法规和制度规定的状态和关系来建立;根据业务的逻辑关系来建立;根据不同类型数据之间的对应关系来建立;根据审计人员的符合客观实际的经验来建立;根据审计人员的合理的预测来建立等。 [MZ(3]1.2.7疑点延伸、落实、取证[MZ)] 根据审计分析模型的分析结果,派出重要问题核实组、重大违法违纪违规问题突破组等到被审计单位对疑点进行延伸,对发现的问题线索进一步核查、落实并取证。 如果数据分析的结果能直接发现与核实问题,审计人员可以利用有关电子数据直接取证。这时审计人员应将被审计单位提供的原始数据、分析处理产生的中间表数据以及数据分析和处理的过程的语句代码妥善保存,以便作为审计证据。如果数据分析的结果仅能揭示问题的线索,不能直接发现与核实问题,则应根据线索进行延伸审计,获取审计证据。在编制审计工作底稿时,应对数据分析的过程、方法、使用的数据等情况进行详细记录,同时还应记录审计人员对数据分析结果的判断。 [MZ(2]1.3拓展阅读[MZ)] 本章的拓展阅读包括两个部分: 一是对信息系统审计的介绍;二是应用“七步流程法”开展计算机数据审计的示例。 [MZ(3]1.3.1信息系统审计[MZ)] 信息系统审计是通过对被审计单位信息系统的调查和了解,对系统控制及系统功能的分析和测评,综合评价信息系统能否满足安全性、有效性和经济性的目标,促进被审计单位完善信息系统控制,防范业务风险;加强信息系统运行管理,规范业务行为;促进提高信息系统运行效率和投资效益。 以下介绍对信息系统安全性、有效性、经济性检查的建议和常用方法。 1. 检查信息系统的安全性 检查的对象包括: 局域网、广域网、因特网接入网等网络;服务器、存储、网络及安全、计算机终端等设备;操作系统、中间件、数据库、应用等软件;机房、电源、空调、安防等条件环境。针对这些系统要素,检查被审计单位是否制定了安全管理制度并得到贯彻执行;信息系统设计是否符合国家等级保护、分级保护要求;对关键的数据信息资源是否采取了适当的保护措施;数据信息物理访问、逻辑访问安全措施是否适当有效;系统安全员、安全审计员履行职责是否到位;防病毒木马、防网络攻击等安全措施是否落实;防火、防雷、防盗等安全设施是否有效。 检查信息系统的安全性要突出重点,讲求实效,根据系统的规模大小、被审计单位业务对信息系统的依赖程度,评估其采取的安全措施,评价安全缺陷可能造成的损害,实事求是地提出审计整改意见。 2. 检查信息系统的有效性 检查的对象包括: 业务流程还原或者再造、关键节点控制等规范管理的功能;避免重复操作、自动批量处理等提高效率的功能;数据同源,消除空间局限、实现远程处理等共享信息的功能;接口及逻辑处理正确、真实记录经济活动等数据准确的功能。针对这些功能要素,检查被审计单位系统软件、关键业务应用软件功能是否能够满足业务开展的需要;信息系统日常操作管理、配置管理、问题管理等是否有效;数据、参数的生成、存储、传输、处理等是否进行适当有效的控制;不同系统之间是否建立有效控制的数据接口;检查是否存在基础信息混乱、信息无法共享等问题;检查信息系统灾难恢复计划是否能够保证关键业务的持续运行,电子数据备份是否符合相关规定,是否能够保证数据及时、准确地恢复。 检查信息系统的有效性要紧密结合审计目标,突出重点,注意对业务流程和关键控制节点进行分析,从中查找信息系统有效性可能存在的缺陷,防患于未然,发挥“免疫系统”功能。在数据审计中发现异常时,要注意从信息系统功能中排查原因,揭示信息系统舞弊,打击利用信息系统漏洞的违法犯罪活动。对于信息系统功能存在缺陷,有碍被审计单位管理制度落实,甚至危及信息安全、经济安全的,要提出整改要求。 3. 检查信息系统的经济性 检查的对象包括: 项目建议书、可行性研究报告、初步设计等项目建设文档;实施、验收过程;建设投入;使用状况;满意度等。针对这些项目要素,检查项目建设文档确定的建设目标与被审计单位业务的符合程度,建设目标能否带来合理的回报或推动业务发展;检查立项、审批、招标、实施、验收等项目建设环节过程是否存在浪费、损失、舞弊现象;交付成果与建设目标的符合程度,如有调整则检查是否有利于建设目标优化;投资是否超预算;交付成果与投资的性价比;投资结构调整是否有利于优化性价比;交付成果的利用率;交付成果对核心业务流程的覆盖率;被审计单位工作人员使用交付成果的比例。 检查信息系统的经济性要以评价性价比为核心,关注项目对提高被审计单位工作效率、加强内部管理控制的作用,相对于投入资金是否物有所值。 在检查信息系统相关审计事项时,面谈询问法、调查问卷法、文件审阅法、实地观察法等通常使用的审计方法仍可使用,此外还要结合检查工作的需要,有所选择地学习、采用检查信息系统相关审计事项所特有的审计方法,主要有下面几种。 1. 流程图检查法 通过绘制或者检查被审计单位提供的流程图,加深对信息系统结构的理解,分析信息系统的运行过程,关注信息系统控制节点和控制条件,追踪业务样本,从而评估信息系统控制是否存在明显错误或者缺陷。 2. 测试数据法 根据审计人员对被审计单位信息系统业务或者管理流程的理解,设计专门的测试数据,在系统中模拟业务的处理全过程,并将测试数据的模拟处理结果与预期处理结果进行比较核对,从而判断信息系统的功能与控制是否存在明显错误或者缺陷。 3. 平行模拟法 分别用被审计单位在用程序、审计人员另行准备的程序对被审计单位的真实业务数据进行处理,将二者运行的结果进行比对,从而判断逻辑处理功能是否存在明显错误或者缺陷。 4. 源代码检查法 有重点地抽查若干程序源代码的片段,从而判断金额计算、业务授权等关键数据处理是否存在明显错误或者缺陷。 5. 日志分析法 运用数据审计技术和软件,对信息系统自动记录的日志进行筛选分析,检查有无未经授权的进入、非法修改删除数据等异常操作,从而判断信息系统的运行管理是否存在明显错误或者缺陷。 在确保安全的条件下,审计人员可以有选择地使用比较成熟而且被业界认为安全的系统漏洞扫描、信息捕获工具和软件。审计人员在检查网络、服务器、防火墙等设备和操作系统、数据库等软件的安全性和可靠性时,也可以直接使用其自带的命令、检测诊断工具进行审计测试。 此外,在审计实践中应注意区分计算机数据审计与计算机信息系统审计之间的区别和联系。 先说区别。 首先是审计对象不同。计算机数据审计的对象是信息系统存储和处理的电子数据,计算机信息系统审计的对象是存储和处理电子数据的计算机信息系统。 其次是工作的侧重点不同。计算机数据审计是通过对电子数据的采集、转换、整理、验证和分析,帮助审计人员掌握总体情况,发现审计线索,收集审计证据,从而形成审计结论,实现审计目标。计算机数据审计的前提是被审计单位提供的电子数据是真实、完整的。计算机信息系统审计是通过对信息系统的调查与了解,对系统控制及其功能的分析与测评,综合评价一个计算机信息系统是否能够满足安全性、可靠性与经济性目标,是否能够提供真实、完整的业务数据。 最后是使用的技术方法不同。计算机数据审计主要使用与数据采集、转换、验证和分析相关的技术和方法,包括审计数据采集转换技术、审计中间表技术、审计模型构建技术以及能够对数据进行有效分析的各种数据分析方法。计算机信息系统审计主要采用系统分析和系统评价的技术和方法。为了了解系统情况,需要采用调查了解的方法;为了获取审计证据,需要采用测试的方法。在调查、了解、分析和测试的基础上,综合运用系统评价的方法得出信息系统审计的结论。 再说联系。 虽然计算机数据审计和计算机信息系统审计存在以上差别,但是它们是同一事物的两个方面,不能将它们人为割裂开来。首先,信息系统是电子数据存储和处理的环境,电子数据不能独立于信息系统存在,信息系统中存在的问题必然会反映到电子数据中,有什么样的信息系统,就有什么样的电子数据。因此,计算机数据审计发现的问题可以作为计算机信息系统审计的参考和线索。其次,电子数据是信息系统功能的重要体现。信息系统的功能众多,但是实现这些功能的载体都是电子数据,离开了电子数据,信息系统的功能便无从谈起。从这个角度看,不同的电子数据在信息系统中具有不同的地位和作用,有的是完成业务运行的,一般称为业务数据,有的是完成系统控制的,一般称为控制数据,有的是描述系统本身的,一般称为元数据。因此在信息系统审计中要特别注意对不同类型电子数据的分析和处理,由此来获取审计证据。在信息系统审计中用到测试方法时,经常要构造一些虚拟的业务数据。 [MZ(3]1.3.2“七步流程法”应用案例[MZ)] 就业再就业培训是国家为了提高劳动者素质、促进就业采取的一项惠民措施。对新就业人员、失业人员、进城务工人员进行就业再就业培训,可以提高其劳动技能、拓宽其就业渠道,有效促进就业再就业,缓解就业压力,维护社会稳定。国家历来重视对劳动者的职业培训,尤其是2008年世界金融危机对我国经济的影响逐渐显现,大批进城务工人员提前返乡,这部分富余劳动力给我国的就业形势带来了巨大压力,国家出台多种措施帮助返乡人员尽早实现再就业,其中对其进行培训,提高其技能水平是一项重要举措。 审计人员根据审计工作方案中的审计事项——再就业培训机构培训的合法性、合规性、真实性,特别是虚报、冒领、套取就业培训补贴的情况,应用“七步流程法”,实现计算机审计。 1. 调查阶段 通过对江州省劳动和社会保障厅、江城市劳动保障局及所属单位相关人员座谈、发调查表、收集与审计调查相关的会计资料、其他证明材料等,审计人员对江州省近年来开展职业培训和职业介绍的情况有了较全面的了解。 江州省再就业培训没有全省统一的信息管理系统,各级劳动保障部门负责各自范围内的再就业培训管理。各培训机构以培训学员名单为依据向劳动保障部门申报就业培训补贴。劳动保障部门仅以电子文档的形式保存培训学员数据,没有形成统一格式的数据库。职业介绍也存在类似的情况。 各培训机构通常以学员登记表的形式管理培训学员名单。由于市劳动保障局没有统一规定学员登记表的文件格式及内容要素,因此各培训机构提供的学员登记表电子文档包含的要素并不完全相同,例如, 学员年龄、出生年月、家庭住址、联系电话、学历、培训后是否就业等,只在部分学员登记表中统计。学员登记表的电子文档格式也不统一,主要有Excel电子表格和Word文档两种,其中Excel电子表格文件有700多个,Word文档有近100个。 审计人员认为电子数据反映了培训的细节,对于判断培训的真实性、合规性是很有帮助的,因此向江城市劳动保障局提交了审计需求单,以获取电子数据。 审计需求单 江城市劳动保障局: 为审计需要,请提供以下电子资料: 2006年第四季度至2007年第三季度,各培训机构开展培训工作的学员报名登记表的电子数据。 请于2008年11月3日下班前提供以上电子数据。 联系人: 赵某王某 联系电话: 130×××××××× 2008年10月31日 2. 数据采集 根据审计需求单,审计人员在11月3日下午从江城市劳动保障局汇总获取了江城市2006年第四季度至2007年第三季度各培训机构开展培训工作的学员报名登记表,其中Excel电子表格文件有758个、Word文档有89个。文档结构示意图如图11所示。 图11文档结构示意图 3. 数据清理、转换、验证 审计人员将培训登记表电子数据清理、转换、验证后合并放入Microsoft SQL Server数据库中。在着手实现时,审计人员面临的第一个问题是目标表(审计中间表)应设计成什么样的?哪些字段是必需的?字段的类型如何设定? 在分析了待采集的培训登记表首行的名称,选择了审计中间表包括的字段及类型后,审计人员明确目标表应至少包括姓名,个人身份证号,就业证、优惠证或失业证号码,培训专业,考试成绩,培训起止时间,联系电话等字段。 部分培训登记表首行的名称如表11所示。 4. 建立审计中间表 审计人员将收到的847个文件整理后,将之全部导入Microsoft SQL Server数据库,生成审计中间表“培训人员情况表”,并增加培训学校名称、培训文号等字段。 5. 把握总体,选择重点 审计人员根据审计工作方案要求,决定选择部分再就业培训单位和项目进行专题分析,筛选可疑培训单位和培训人员,查清江城市虚报的培训人数和套取的补贴金额。经过组内讨论决定实施合规性分析,确认是否存在已退休人员参加职业培训的情况;确认是否存在一人多次参加职业培训的情况。 6. 建模分析 合规性审计模型1——确认是否存在已退休人员参加职业培训的情况。 按照规定,退休人员不再参加就业再就业培训。一般劳动者的法定退休年龄为60周岁。对于2006年参加培训的人员而言,1946年年底之前出生的都可以认定为退休人员;对于2007年参加培训的人员而言,1947年年底之前出生的都可以认定为退休人员。 计算机分析要点如下。 在“中间表_江州省再就业培训信息表”中,对于15位身份证号码,使用“isdate”函数验证其第7位到第12位是否为可识别的有效日期;对于18位身份证号码,使用“isdate”函数验证其第7位到第14位是否为可识别的有效日期。对通过验证的培训人员,分别筛选出1946年或1947年之前出生的人员名单。 计算机分析得到疑点: 经过分析,共有81名已到退休年龄的人员参加了就业再就业培训。 合规性审计模型2——确认是否存在一人多次参加职业培训的情况。 就业再就业培训的目的是通过对未就业人员进行技能培训,使他们提高劳动技能,获得就业机会,每位未就业人员只能参加一次技能培训。每个被培训人员的身份证号码是唯一的。因此,同一身份证号码在培训记录中出现2次以上可以确定存在重复培训的问题。 计算机分析要点如下。 在“中间表_江州省再就业培训信息表”中,对于15位身份证号码,验证其第7位到第12位是否为可识别的有效日期;对于18位身份证号码,验证其第7位到第14位是否为可识别的有效日期。对通过验证的培训人员,筛选出身份证号码在培训中出现2次以上的人员名单。 计算机分析得到疑点: 经过分析,共有259名人员重复参加了培训。 7. 疑点延伸、落实、取证 经过核实原始纸质登记表格,发现有部分人员的身份证号码在电子化的时候录入有误,在剔除这部分情况之后,审计人员就存在培训退休人员和重复培训的情况为江城市劳动局做了审计取证单。江城市劳动局在意见栏签署“数据准确,情况属实”。 [MZ(2]思考题[MZ)] 1. 名词解释: 计算机审计、计算机数据审计、信息系统审计、审计数据采集、审计数据分析。 2. 简述“七步流程法”中各步骤的主要工作。 3. 如何检查信息系统的安全性、有效性和经济性? 4. 信息系统审计的方法有哪些? 5. 试述信息系统审计和计算机数据审计的区别和联系。 第2章被审计单位的电子数据 [MZ(1]第2章被审计单位的电子数据[MZ)] 本章要点 ◆被审计单位电子数据存储的数据库 & Oracle & Microsoft SQL Server & Microsoft Access ◆信息系统的技术架构 & 非集中式架构 & 集中式架构 & 分布式架构 & C/S架构 & B/S架构 ◆信息系统的开发方法 & 生命周期法 & 原型法 & 面向对象的方法 & 计算机辅助软件工程 ◆信息系统的开发流程 & 信息系统规划 & 信息系统分析 & 信息系统设计 & 信息系统实施 & 信息系统运行与维护 ◆信息系统的技术文档 & 业务流程图 & 数据流程图 & 数据字典 & 数据库表结构 ◆拓展阅读 & 全球数据库排名 在迈入21世纪的十几年间,信息化不断向纵深发展,各行各业的信息化进程不断加速,使用计算机技术优化企业的经营管理日趋深入人心。企业的领导班子、中层管理干部、基层操作骨干都已习惯了信息化的企业管理。许多企业积累了10多年甚至20多年企业信息化的实践经验,企业的管理软件也随着企业发展的需要升级换代。 在21世纪前10年,审计人员去被审计单位采集电子数据时遇到的数据库的种类还是非常繁多的。Oracle、Microsoft SQL Server、Microsoft Access、MySQL、Sybase、DB2、 Informix、Paradox、dBase、FoxPro、Visual FoxPro等数据库在审计实践中都有遇到的机会。时至今日,数据库在中国的应用已经不再处于群雄割据、百花争鸣的春秋时代,而是正式进入优胜劣汰之后强者恒强的战国时期。目前审计过程中最常见的关系型数据库是Oracle、Microsoft SQL Server、Microsoft Access。 [MZ(2]2.1被审计单位电子数据存储的数据库[MZ)][*3/4] [MZ(3]2.1.1Oracle[MZ)] Oracle(中文译名甲骨文)公司出品的Oracle数据库是目前世界上使用最广泛的数据库产品,2015年Oracle在中国数据库市场份额达到了56%。Oracle的前身叫作SDL。1977年6月,Larry Ellison与Bob Miner和Ed Oates在硅谷共同创办了一家名为软件开发实验室(Software Development Laboratories,SDL)的计算机公司。1979年,Oracle公司最早引入了商用SQL关系数据库管理系统,也就是Oracle V2。Oracle从1983年开始先后推出了3、4、5、6四个大版本。PL/SQL最早在第6版中得以应用。在1992年发布的Oracle 7中使用的PL/SQL开始支持存储过程和触发器。1997年发布的是Oracle 8。1999年发布的Oracle 8i支持基于Internet的计算和JAVA技术。2001年Oracle 9i诞生。2003年Oracle Database 10g出现,并支持网格计算。2007年Oracle Database 11g发布,进一步提升了数据库的可管理性、可诊断性和可用性。目前最新版的Oracle Database 12c是2013年发布的,支持云计算。 Oracle支持多种不同的硬件和操作系统平台,从台式机到大型和超级计算机,为各种硬件结构提供高度的可伸缩性,支持对称多处理器、群集多处理器、大规模处理器等,并提供广泛的国际语言支持。 Oracle属于大型数据库管理系统,能在所有主流平台上运行,完全支持所有的工业标准,采用完全开放策略,可以使客户选择最适合的解决方案,对开发商全力支持。Oracle具有很好的可移植性,通过它的通信功能,微型计算机上的程序可以同小型乃至大型计算机上的Oracle进行通信并相互传递数据。 目前被审计单位使用的Oracle的版本主要是10g和11g。 在被审计单位的数据库管理系统是Oracle的情况下,通常可以应用以下3种方式采集数据。 (1) 在审计人员的计算机系统中安装Oracle客户端软件,利用OLE DB连接到Oracle数据库,这时可以通过PL/SQL Developer等软件将数据库中的表导出为数据交换文件,通过Microsoft SQL Server 2008(2012)的导入和导出向导将数据导出到Microsoft SQL Server 2008(2012)数据库中。 (2) 在被审计单位的Oracle中利用EXP(或者EXPDP)命令将全部数据库或部分数据库表导出为备份文件(DMP)格式,将这些备份文件复制到审计人员的Oracle环境中利用IMP(或者IMPDP)命令进行恢复。在数据恢复之前要注意创建相应数据库实例和表空间。 (3) 在Visual Basic等编程工具中使用DAO、ADO对象库以及Oracle Objects for OLE,然后通过Oracle提供的数据库编程接口Oracle Call Interface(OCI)访问Oracle数据库中的数据。 [MZ(3]2.1.2Microsoft SQL Server[MZ)] Microsoft SQL Server是微软公司开发的大型关系型数据库系统。SQL Server的功能比较全面,效率高,可以作为大中型企业或单位的数据库平台。SQL Server与Windows操作系统紧密集成,使应用程序的开发速度和系统事务处理的运行速得到有效提升。对于在Windows平台上开发的各种企业级信息管理系统,不论系统采用C/S(客户机/服务器)还是B/S(浏览器/服务器)架构,SQL Server都是一个很好的选择。美中不足的是SQL Server只能在Windows操作系统环境下运行。 1987年,微软和IBM合作开发完成OS/2,IBM 在其销售的OS/2 Extended Edition系统中绑定了OS/2 Database Manager,而微软产品线中尚缺少数据库产品。为此,微软向Sybase公司寻求帮助,与Sybase公司签订了合作协议,使用它们的技术开发基于OS/2平台的关系型数据库。1989年,微软发布了SQL Server 1.0 版。 1993年,SQL Server 4.2诞生,它是一个桌面数据库系统,包含较少的功能,与Windows集成并提供易于使用的用户界面。 1994年,微软与Sybase在数据库开发方面的合作中止。 1995年,SQL Server 6.05诞生,微软重写了核心的数据库系统,提供一个低价的小型商业应用数据库方案。 1996年,SQL Server 6.5诞生。 1998年,SQL Server 7.0重写了核心数据库系统,提供中小型商业应用数据库方案,包含了初始的Web支持。微软将SQL Server移植到Windows NT系统上,专注于开发推广SQL Server 的Windows NT 版本。数据库引擎是SQL Server系统的核心服务,负责数据的存储、处理和安全管理。 2000年,SQL Server 2000诞生,它是企业级数据库系统,包含了三个组件(DB、OLAP、English Query),拥有丰富的前端工具和完善的开发工具,具有使用方便、可伸缩性好、与相关软件集成程度高等优点,可跨越从运行Microsoft Windows 98 的笔记本电脑到运行Microsoft Windows 2000 的大型多处理器的服务器等多种平台使用。 2004年,SQL Server 2005诞生,它是一个全面的数据库平台,使用集成的商业智能 (BI)工具提供企业级的数据管理。SQL Server 2005不仅可以有效地执行大规模联机事务处理,而且可以完成数据仓库和电子商务应用等许多具有挑战性的工作。 2008年后至今,微软以平均两年推出一个新版本的速度,先后发布了SQL Server 2008、SQL Server 2008 R2、SQL Server 2012、SQL Server 2014和SQL Server 2016。 Microsoft SQL Server是一个分布式的关系型数据库管理系统,具有C/S体系架构,采用TSQL语法的SQL语言在客户机与服务器间传递客户机的请求及服务器的处理结果。它的主要特点包括: (1) 高性能设计,真正的C/S体系架构,强壮的事务处理功能,采用各种方法保证数据的完整性。 (2) 系统管理先进,支持Windows图形化管理工具,使系统管理更加直观、简单,同时支持本地和远程的系统管理和配置。 (3) 实现了与Windows操作系统的有机结合,充分利用操作系统的功能,如发送和接受消息,管理登录安全性等。SQL Server与Access等Microsoft产品的兼容性较好。 (4) 支持对称多处理器结构、存储过程、ODBC,并具有自主的TSQL语言。Microsoft SQL Server以其内置的数据复制功能、强大的管理工具、与Internet的紧密集成和开放的系统结构为广大的用户尤其是计算机审计人员提供了一个较好的数据库平台。 (5) 提供数据仓库功能。 (6) 丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地。 目前被审计单位使用的SQL Server的版本主要是2008、2008 R2和2012。 当被审计单位采用Microsoft SQL Server 2008及以上版本作为数据库管理系统时,可以采用以下4种方式采集数据: (1) 直接复制被审计单位的数据库文件(MDF、NDF)和日志文件(LDF),在审计人员的相应版本的SQL Server数据库中通过附加数据库的方式附加到新系统中。注意复制文件前数据库实例可能需要从DBMS中分离出来。 (2) 将被审计单位的数据库备份为备份文件后,复制到审计人员的计算机系统中,使用相应版本的SQL Server数据库管理系统实施数据库恢复操作。 (3) 在审计人员的SQL Server数据库管理系统或者被审计单位的SQL Server数据库管理系统中利用导入和导出向导,导入/导出所需的审计数据。 (4) 在Visual Basic等高级语言程序开发软件中使用DAO或ADO对象库,然后通过SQL Server数据库管理系统的应用编程接口访问数据库。 [MZ(3]2.1.3Microsoft Access[MZ)] Access是微软公司于1992年推出的微机数据库管理系统。它具有界面友好、易学易用、开发简单、接口灵活等特点,是典型的新一代桌面关系型数据库管理系统。它结合了Microsoft Jet Database Engine和图形用户界面两项特点,是Microsoft Office的成员之一。Access能够存取Access/Jet、Microsoft SQL Server、Oracle,或者任何ODBC兼容数据库的资料。Access界面友好而且易学易用,作为Office套件的一部分,可以与Office集成,实现无缝连接。Access提供了表(Table)、查询(Query)、窗体(Form)、报表(Report)、宏(Macro)、模块(Module)等用来建立数据库系统的对象,提供了多种向导、生成器、模板,把数据存储、数据查询、界面设计、报表生成等操作规范化。 Access是入门级桌面数据库,它支持的数据库文件的上限是2G字节。 1992年,Microsoft Access 1.0诞生。Access的最初名称是Cirrus,它开发于Visual Basic之前。 1993年,Microsoft Access 1.1诞生。它在1.0的基础上进一步提高了与微软发布的其他软件的兼容性。 1994年,Microsoft Access 2.0诞生。它工作在Windows 3.1平台上。 1995年,Microsoft Access 95(7.0版)诞生,它是世界上第一个32位关系型数据库管理系统。 1997年,Microsoft Access 97(8.0版)诞生。它的最大特点是在Access数据库中开始支持Web技术,这一技术上的发展,开拓了Access数据库从桌面向网络的发展。 1999年,Microsoft Access 2000(9.0版)诞生,随后是2001年的Microsoft Access 2002(10.0版)和2003年的Microsoft Access 2003(11.5版)。至此Access数据库的后缀名都是mdb。 2007年开始微软大约每3年推出一个新版本的Access,Microsoft Access 2007(120版)、Microsoft Access 2010(140版)、Microsoft Access 2013(150版)和Microsoft Access 2016(160版)先后诞生。数据库文件的后缀名统一为accdb,所支持的数据库文件的上限依然没有突破2G字节的瓶颈。由此可见,微软公司对Access数据库管理系统一直是定位在桌面数据库的层面上。它希望数据量略大一些的应用可以转向SQL Server,而不是Access。 Access的主要特点如下: (1) 完善地管理各种数据库对象,具有强大的数据组织、用户管理、安全检查等功能。 (2) 强大的数据处理功能,在一个工作组级别的网络环境中,使用Access开发的多用户数据库管理系统具有传统的XBASE(dBase、FoxBASE的统称)数据库系统所无法实现的C/S架构和相应的数据库安全机制。Access具备了许多先进的大型数据库管理系统所具备的特征,如事务处理/出错回滚能力等。 (3) 可以方便地生成各种数据对象,利用存储的数据建立窗体和报表,可视性好。 (4) 作为Office套件的一部分,可以与Office集成,实现无缝连接。 (5) 能够利用Web检索和发布数据,实现与Internet的连接。Access主要适用于中小型应用系统,或作为C/S系统中的客户端数据库。 目前被审计单位使用的Access的版本主要是2003、2010和2013。 当被审计单位的数据库是Access格式时,只需将数据库文件(后缀名为mdb或accdb)复制出来后在审计人员的Access环境中打开即可。从Access中访问数据库文件是最直接、最便捷的一种方法,因为数据库文件是由Access创建的,二者是紧密结合的。利用Access的导入/导出数据功能以及链接表功能,可以方便地将Access数据库中的表转换成其他类型的数据库表,也可以从其他类型的数据库中获取数据。此外,在Visual Basic等编程工具中使用DAO或ADO对象库,然后通过它们提供的接口来访问Access的数据库文件也是一种可行的方法。 审计实践表明Access的数据类型具有兼容性好的特点。在审计数据采集和转换的过程中,当两个数据库管理系统中某些数据表的数据类型存在兼容性问题时,可以采用Access数据库文件作为中转。例如,将某些数据表从Oracle 11g导入Microsoft SQL Server 2008时出现了数据类型的兼容性问题,这时候可以先将这些表从Oracle 11g导入Access,然后再由Access导入Microsoft SQL Server 2008。需要注意的是这些表的大小不能超过2G字节。 [MZ(3]2.1.4其他数据库[MZ)] 本节介绍的DB2、Sybase、dBase、FoxBASE、FoxPro、Visual FoxPro等数据库都很有名,曾经的市场占有率也非常高。但是由于种种原因,目前它们的发展不像原来那么快了。审计人员在审计实践中遇到这些数据库的概率也在下降。因此本书对这些数据库仅做简单介绍。 IBM是数据库行业的巨人。1968年IBM在IBM 360计算机上研制成功了IMS这个业界第一个层次型数据库管理系统,也是层次型数据库中最为著名和最为典型的。1970年,E. F. Codd发表了业界第一篇关于关系数据库理论的论文“A Relational Model of Data for Large Shared DataBanks”,首次提出了关系模型的概念。1974年,IBM的Don Chamberlin和Ray Boyce通过System R项目的实践,发表了论文“SEQUEL: A Structured English Query Language”,我们现在熟知的SQL就是基于它发展起来的。IBM 在1983年发布了DATABASE 2(DB2)for MVS(内部代号为“Eagle”),这就是著名的DB2数据库。2001年IBM用10亿美元收购了Informix的数据库业务,这次收购扩大了IBM分布式数据库业务。2006年DB2 V9作为第三代数据库的革命性产品正式在全球发布。2012年DB2 V10发布。目前DB2的最新版本是10.5。 DB2是目前世界上唯一能与Oracle抗衡的优秀数据库,它在海量数据处理机制方面,相对于Oracle而言有其自身的独特优势。但是,实际应用中很少会用到这么大的数据库。DB2数据库使用中占用内存很大,如果实际用不到那么大的数据库却还要去用DB2,那么程序执行效率就会很低,系统资源占用也会很多。 Sybase是美国Sybase公司研制的一种关系型数据库管理系统。Sybase公司成立于1984年11月,是数据库软件厂商的后起之秀,较早采用了C/S技术。Sybase通常与Sybase SQL Anywhere用于C/S环境,前者作为服务器数据库,后者用作客户机数据库。Sybase System 12.x和15.x曾经是许多单位在运行的Sybase版本,2010年3月发布Sybase数据库管理系统Adaptive Server Enterprise 15.5(简称ASE15.5),支持联机事务处理(Online Transaction Process,OLTP)、数据仓库(Data Warehouse,DW)、决策支持系统(Decision Support System,DSS)等各种数据库应用需求。除此之外ASE15.5还提供两项选用功能: ASE内存式数据库(Inmemory Databases,IMDB)和进阶备份服务。这些强化设计使它能继续为数据密集环境提供出众的效能和管理力,以满足最少响应时间和高度运算能力的需求。2010年5月13日,Sybase公司被SAP公司以58亿美元收购。目前Sybase的数据库管理系统最新版本是SAP Adaptive Server Enterprise 16.0。 dBase是第一个在微型计算机上被广泛使用的关系型数据库管理系统(DBMS),由AshtonTate在CP/M系统上发布,然后又在Apple II、Apple Macintosh、UNIX、VMS和IBM PC的DOS平台上发布,并在DOS平台上成为几年中最畅销的软件。 dBase并没有能成功转换到Microsoft Windows平台并逐渐被Paradox,FoxPro和Microsoft Access等新产品所替代。dBase在1991年被卖给Borland,1999年所有的产品线权利被转卖给新成立的dBase公司。 从20世纪80年代中期开始,许多其他的公司在这个产品和语言的基础上生产了自己的分支版本,如FoxPro(现在是Visual FoxPro)。这些都被非正式地称为xBase或XBase。 dBase、FoxBASE、FoxPro都是小型数据库管理软件,三者的主要区别可以看成是版本的改进,dBase、FoxBASE是在DOS下使用的,FoxBASE是dBase的发展,而FoxPro既有DOS版本,也有Windows版本,是在FoxBASE基础上发展起来的。1992年微软收购了Fox公司,把FoxPro纳入自己的产品中。它利用自身的技术优势和巨大的资源,在不长的时间里开发出FoxPro2.5、FoxPro2.6等大约20个软件产品及其相关产品,包括DOS、Windows、Mac和UNIX四个平台的软件产品。 1992年,微软收购FoxPro以后,在其基础上开发了Visual FoxPro(简称VFP)。VFP提供了友好的用户界面、简单的数据存取方式,具有良好的兼容性、真正的可编译性和较强的安全性。1995年,微软推出了VFP 3.0版。VFP先后发布了6、7、8、9四个大版本。VFP 6.0支持面向对象可视化编程技术,并拥有功能强大的可视化程序设计工具。VFP 7.0通过实现OLE DB Provider接口,使开发人员可以在任何支持OLE DB的程序和语言中调用VFP数据。VFP 8.0增加了很多新的数据特性,如远程数据连接、与SQL语句Select...Union之间的隐式数据转换、使用SQL Select命令插入行等。VFP 90能够充分地支持SQL查询语言。微软于2007年前后宣布停止对VFP的研发,VFP 90是最后一个官方版本。 VFP通过SQLCONNECT()函数或SQLSTRINGCONNECT()函数可以和任何支持ODBC驱动的数据库建立连接,成功建立连接后将返回一个大于0的整数型句柄,如果连接失败则会返回-1。通过这个句柄我们可以用SQLEXEC()函数向数据库发送SQL语句,最后需要调用SQLDISCONNECT( )函数断掉连接。 dBase、FoxBASE、FoxPro、VFP的数据库文件的后缀名都是dbf,每个文件对应一个数据库表文件。这些数据库文件可以通称为dbf文件。虽然目前仍在使用dbf文件管理电子数据的被审计单位已经不多了。但是由于dbf文件曾经显赫的历史地位,目前许多财务软件、业务软件出于向下兼容的考虑,通常支持将前台查询结果保存为dbf文件格式。dbf文件的兼容性非常好,这一点类型于Access文件,因此在未来很长一段时期内dbf文件仍将是审计人员需要掌握的数据库文件。 [MZ(2]2.2被审计单位的信息系统[MZ)] 电子数据不能独立于信息系统存在,有什么样的信息系统,就有什么样的电子数据。为了顺利地采集被审计单位的电子数据,有必要全面了解被审计单位使用的信息系统。 以下从技术架构、开发方法、开发流程和技术文档四个方面来剖析被审计单位的信息系统。 [MZ(3]2.2.1信息系统的技术架构[MZ)] 了解信息技术架构可以帮助审计人员确定审计数据采集的位置和具体的采集对象。信息系统中的信息技术架构有5种类型: 非集中式架构、集中式架构、分布式架构、C/S架构及B/S架构。 1. 非集中式架构 非集中式架构包括信息共享很少的或没有信息共享的系统。这种架构产生于用户或部门开发的独立系统或软件,它们之间没有任何中央控制,如图21所示。对于这类信息系统,需要针对各个不同的系统单独进行数据采集。 图21非集中式架构 由于不同系统之间很少有信息共享,因此不同系统使用的数据格式通常存在较大差异。当需要将不同系统中的电子数据集成起来实施审计分析时,应首先进行数据转换工作。 2. 集中式架构 一个集中式架构在一个中心区域或者中心主机中共享信息。目前越来越多的商业银行采用集中式架构的系统。集中式架构的最大优点是高度集中、高度控制,有利于保持硬件、软件的标准,有利于保持信息的集中、统一。其缺点是缺乏灵活性,不易满足不同部门的个性化需求。集中式架构如图22所示。 对集中式架构而言,核心数据保存在中心主机及其备份系统中。各分支机构可能仅仅保存与本部门相关的部分业务数据,这些数据一般都不是实时的。对这类信息系统进行数据采集的时候,只要从中心主机(或者其备份系统)上下载数据即可。集中式架构的应用系统数据量通常比较大,因此数据采集和转换工作耗时较长。如有可能,应尽量将被审计单位的数据下载为数据库类型的数据,以降低数据采集转换工作的复杂度。 图22集中式架构 3. 分布式架构 分布式架构是指通过网络分配信息系统的信息和处理能力的一种架构,通过分布式架构将所有的信息系统连接起来,使得所有地点都能够共享信息和应用程序。这种架构的好处在于处理活动能够分配给最有效的地点。但是为了提高效率、减少网络传输,一个分布式架构经常需要将同样的应用程序或数据存储在两个或多个地点。分布式架构比集中式架构复杂。分布式架构如图23所示。 图23分布式架构 在分布式架构中,数据往往保存有多个副本。在数据采集的过程中,需要确定这些副本数据能否满足审计需求。 4. C/S架构 C/S架构即客户机/服务器架构,它有一台或多台计算机作服务器,为其他计算机(即客户机)提供服务。C/S架构是分布式架构的一种形式。这种架构的基础概念是应用程序被分配到客户机和服务器上。客户机上要安装一定的应用程序软件,称为客户端软件,服务器上要安装服务器软件,如数据库服务器、应用服务器、网络服务器等。C/S架构如图24所示。 图24C/S架构 对于C/S架构来说,为了性能的均衡,数据一般存储在数据库服务器上,由应用服务器提供前台应用,由网络服务器负责数据通信。由于资源有限,一些简单的系统往往将两个或两个以上的服务器集中到一台物理设备上,如将数据库服务器和应用服务器安装在一台PC Server上。对于这类应用系统的数据采集,一般只要采集数据库服务器上的数据即可。 5. B/S架构 在C/S架构中,如果客户端上只安装一种软件,即浏览器软件,那么这种架构又称为浏览器/服务器架构,以下简称B/S架构。在B/S架构中,只需安装和维护一个服务器,而客户端采用浏览器运行软件。这种架构使得用户面对一个相对统一的浏览器界面,减少了软件升级维护的工作量,客户端零维护,系统的扩展非常容易。B/S架构如图25所示。 图25B/S架构 B/S架构的数据采集与C/S架构的数据采集相类似,对于这类应用系统的数据采集,一般也只需采集数据库服务器上的数据。 [MZ(3]2.2.2信息系统的开发方法[MZ)] 信息系统开发的方法有4种,分别是生命周期法、原型法、面向对象的方法以及计算机辅助软件工程。 1. 生命周期法 生命周期法(Life Cycle Approach,LCA)也称结构化系统开发方法,是国内外较流行的信息系统开发方法,在系统开发中得到了广泛的应用和推广,尤其在开发复杂的大系统时,显示了无比的优越性。它是20世纪70年代发展起来的,也是迄今为止开发方法中应用最普遍、最成熟的一种。该方法假设信息系统有一个生命周期,就像其他任何有生命的机体那样有一个开始、成熟、最终死亡的发展过程。 生命周期法的基本思想是将软件工程学和系统工程的理论与方法引入计算机系统的研制开发中,按照用户至上的原则,采用结构化、模块化自顶向下对系统进行分析和设计。具体来说,它将整个信息系统开发过程划分为系统分析、系统设计、系统实施三个独立的阶段,每个阶段又分成若干步骤,如图26所示。各阶段的主要任务如下。 (1) 系统分析 新系统是在原系统的基础上发展起来的。原系统的基本功能以及它与外界的信息联系,都应该在新系统中得到体现,因此,必须对原系统的状况和存在的问题进行详细的了解和分析。在系统分析阶段,先根据用户提出的建立新系统的要求,进行可行性分析,提出系统总体规划。经领导批准后,再对原系统进行深入的调查,彻底掌握原系统,并在此基础上提出新系统的逻辑模型。系统分析是使系统开发达到合理、优化的重要阶段,它是开发成败的关键。 图26生命周期法的步骤 (2) 系统设计 根据系统分析确定的逻辑模型,确定新系统的物理模型,继而对物理模型进行详细的设计,编写系统设计报告。 (3) 系统实施 系统实施包括按照物理模型实现应用软件的编写和测试、系统试运行、编写技术文件、系统转换、系统交付使用,以及运行后的系统维护和评价等工作。 生命周期法的突出优点是强调系统开发过程的整体性和全局性,强调在整体优化的前提下考虑具体的分析设计问题,即自顶向下的观点。它从时间角度把软件开发和维护分解为若干阶段,每个阶段有各自相对独立的任务和目标。这降低了系统开发的复杂性,提高了可操作性。另外,每个阶段都对该阶段的成果进行严格的审批,发现问题及时反馈和纠正,保证了软件质量,特别是提高了软件的可维护性。实践证明,生命周期法大大提高了软件开发的成功率。但是,在实践过程中生命周期法也暴露出一些缺陷。 (1) 难以准确定义用户需求。结构化生命周期法系统的开发过程是一个线性发展的“瀑布模型”,各阶段须严格按顺序进行,并以各阶段提供的文档的正确性和完整性来保证最终应用软件产品的质量,这在许多情况下是难以做到的。由于用户在初始阶段提出的要求往往既不全面也不明确,尤其是我国多数管理人员缺乏应用计算机的基本知识和应用实践,更难提出完整、具体的要求,而当系统投入运行后,又感到不满意,要求修改。 (2) 开发周期长,难以适应环境变化。传统生命周期法,从系统分析到系统实施,绝大部分工作靠人工来完成,使系统开发成本高、效率低。由于所用的工具落后,系统分析和设计的时间较长。对于一个比较大的系统,一般要用2~3年。当系统实施时,原来提出的要求可能已经有了变化,对系统的某些部分又要进行修改或重新设计。同时,由于系统分析阶段时间较长,而提供给用户的只是文字上的成果,用户长期看不到运行的系统,不便于设计者与用户交流。 (3) 整个系统开发工作是劳动密集型的。各阶段的工作从系统分析、系统设计到系统实施,绝大部分工作靠人工完成,系统开发成本高、效率低。 为了改变这种状况,在生命周期法的基础上逐渐发展了原型法、面向对象的方法以及计算机辅助软件工程。 2. 原型法 原型法(Prototyping)的基本思想是1977年开始提出来的,它试图改进结构化系统开发方法的缺点,由用户与系统分析设计人员合作,在短期内定义用户的基本需求,开发出一个功能不十分完善的、实验性的、简易的应用软件基本框架(称为原型)。原型法的开发过程分为四个阶段: 确定用户的基本需求;开发初始原型系统;对原型进行评价;修正和改进原型系统。 原型法的主要优点是: (1) 开发过程是一个循环往复的反馈过程,它符合用户对于计算机应用的认识逐步发展、螺旋式上升的规律。 (2) 原型法很具体,使用户能很快、很直观地接触和使用系统,容易为不熟悉计算机应用的用户所接受。 (3) 原型法开发周期短,使用灵活,对于管理体制和组织结构不很稳定、有变化的系统比较适合。 原型法的主要缺点是: (1) 开发工具要求高。 (2) 难以解决复杂系统和大型系统问题。 (3) 管理水平要求高。 原形法的适用场合: (1) 用户事先难以说明需求的较小的应用系统。 (2) 决策支持系统。 (3) 与结构化系统开发方法结合起来使用。即整体上仍使用结构化系统开发方法,而仅对其中功能独立的模块采用原型法。 3. 面向对象的方法 面向对象方法(ObjectOriented Method)是一种把面向对象的思想应用于软件开发过程中,指导开发活动的系统方法,简称OO(ObjectOriented)方法,是建立在“对象”概念基础上的方法学。对象是由数据和容许的操作组成的封装体,与客观实体有直接对应关系,一个对象类定义了具有相似性质的一组对象。而继承性是对具有层次关系的类的属性和操作进行共享的一种方式。所谓面向对象就是基于对象概念,以对象为中心,以类和继承为构造机制,来认识、理解、刻画客观世界和设计、构建相应的软件系统。 20世纪70年代A. Kay在Smalltalk计算机语言中首次提出面向对象的概念。它与传统方法比较有两项重大思想突破。 (1) 操作与数据共同封装。所谓“对象”就是数据和操作的封装通信单元。在面向对象方法中,系统模型的基本单元是对象,是客观事物的抽象,是相对稳定的。系统的功能是通过对象之间的消息传递来实现的。因此面向对象方法开发的系统有较强的应变能力,重用性好。 (2) 类与继承机制。所谓“类”,是指一组具有相同结构、操作和约束条件的对象。一个类的上层可以有超类,下层可以有子类,形成一种层次结构。一个类可以有多个超类,也可以有多个子类。超类是下层子类的概括,因此子类可以继承超类的属性、操作和约束规则,这就是类的继承机制。继承性使面向对象的系统具有较好的可扩充性和灵活性,因而有利于软件系统的维护。 面向对象方法的优点: (1) 面向对象方法描述的现实世界更符合人们认识事物的思维方法,因而用它开发的软件更易于理解、易于维护。 (2) 面向对象的封装性在很大程度上提高了系统的可维护性和可扩展性。 (3) 面向对象的继承性大大提高了软件的可重用性。 4. 计算机辅助软件工程 计算机辅助软件工程(Computer Aided Software Engineering,CASE)是帮助进行应用程序开发的软件,包括分析、设计和代码生成。CASE工具为设计和文件编制传统结构编程技术,提供了自动的方法。 CASE的目标就是实现系统开发各阶段工作的自动化。 CASE是基于计算机的自动化,是一个正在发展的领域。CASE工具的成熟及有效使用还需要一段时间,但它是一个很有前途的发展方向。 严格地讲,CASE是一种开发环境而不是开发方法,具体开发时,仍需与其他方法结合。 CASE采用的软件工具包括如下几种。 (1) 图稿绘制工具。Microsoft Visio,Smartdraw等。 (2) 原码浏览的工具。SourceInsight,SourceNavigator等。 (3) 配置管理工具。Virsual Source Safe,PVCS,ClearCase,CVS等。 (4) 数据库建模工具。ERWIN,Microsoft Visio,Case Studio,Rational Rose,PowerDesigner等。 (5) UML建模。Rational Rose,Rational XDE,Borland Together,PowerDesigner 等。 CASE的作用可概括为3个方面: (1) 能实现一个具有快速响应、专用资源和早期查错功能的交互式开发环境。 (2) 对系统开发和维护过程中各个环节实现自动化。 (3) 通过强有力的图形接口,实现直观的程序设计。 [MZ(3]2.2.3信息系统的开发流程[MZ)] 信息系统开发的任务就是根据业务目标、内容、规模、性质等具体情况,从系统论的观点出发,运用系统工程的方法,按照系统发展的规律,建立起计算机化的信息系统。其中最核心的工作,就是设计出一套适合业务运行和管理要求的应用软件系统。 对从事计算机数据审计的审计人员来说,了解和掌握一些信息系统开发的相关知识有助于理解被审计单位信息系统的结构和功能,有助于读懂被审计单位提供的各种信息系统技术文档,有助于理解信息系统中数据的含义,有助于从系统的功能、性能以及风险和控制等方面对被审计单位的信息系统做出适当的审计评价。 信息系统的开发流程本身就是一项复杂的系统工程,包括信息系统规划、信息系统分析、信息系统设计、信息系统实施、信息系统运行与维护5个步骤。 1. 信息系统规划 信息系统规划(Information System Planning,ISP),是将组织目标、支持组织目标所必需的信息、提供这些必需信息的信息系统,以及这些信息系统的实施等诸要素予以集成的信息系统方案,是面向组织中信息系统发展远景的系统开发计划。 信息系统规划是系统生命周期中的第一个阶段,也是系统开发过程的第一步,其质量直接影响系统开发的成败。 信息系统规划是信息系统实践中的主要问题,也是管理信息系统研究的主要课题之一。现代企业用于信息系统的投资越来越多,例如宝钢投资已多达亿元。信息系统的建设是个投资巨大、历时很长的工程项目,规划不好不仅会给自身造成损失,由此而引起企业运行不好的间接损失更为可观,人们通常有一种认识,假如一个操作错误可能损失几万元,那么一个设计错误就能损失几十万元,一个计划的错误就能损失几百万元,而一个规划错误的损失则能达到千万元,甚至上亿元。所以我们应克服那种“重硬、轻软”的片面性,把信息系统的规划摆到重要的战略位置上。 信息系统规划的主要内容分为四个方面: ①企业需要哪些信息系统;②如何获得这些系统;③现有系统和管理环境的变化;④系统应急计划。 信息系统规划分为战略规划和执行规划两个层次。战略规划是宏观指导性的长远计划,执行规划是对战略规划的具体化。战略规划的活动主要包括设计系统整体结构、制订资源配置计划、确定子系统的开发次序等。执行规划又称开发规划,是对战略规划的具体落实。 在制定信息系统开发规划之前,需要成立一个规划领导小组,进行有关的人员培训,明确规划工作的进度等。 信息系统战略规划常使用关键成功因素法和企业系统规划法。 关键成功因素(Critical Success Factors,CSF)是指使组织能够达到目标的关键因素。关键成功因素法是分析出企业成功的关键因素,围绕关键因素识别企业的主要信息需求和相关工作的规划方法。 企业系统规划(Business Systems Planning,BSP)是根据企业目标制定信息系统规划的结构化方法。该方法根据企业目标分析企业过程、数据类等,然后再从数据类分析出系统的主要功能(子系统、模块),最后建立基于目标的企业规划。 信息系统规划的成果是系统总体规划方案以及包含经济方面、技术方面和系统运行方面在内的可行性研究报告。 2. 信息系统分析 信息系统分析(Information System Analysis,ISA)是指使用系统的观点和方法,把复杂对象分解为简单组成部分并确定这些组成部分的基本属性和关系的过程,在此过程中使用了结构化系统分析、数据流程图、数据字典等方法和工具。 信息系统分析的主要目的是进一步明确信息系统规划中确定的项目范围和系统开发的目标,在充分掌握现行系统的真实情况和分析用户信息需求的基础上,提出新系统的逻辑方案。 信息系统分析阶段的任务是确定新系统“做什么”的问题,该阶段的工作主要由系统分析员完成,即系统分析员通过与用户接触,充分了解用户需求,再把双方的理解用系统说明书表述出来。 系统规模越大,系统分析复杂性也越高。通常信息系统分析工作包括以下两方面的内容。 (1) 用户需求分析。通过详细了解企业的组织结构、组织目标、组织的业务流程及数据流程,分析和理解用户与管理业务对系统开发的实际需求,包括对系统功能、性能等方面的需求,对开发周期、开发方式及软硬件配置等方面的意向及打算。通常情况下,先由用户提出初步的要求,然后经由系统分析人员对系统进行详细调查,进一步完善用户对系统的要求,最终以系统需求说明书的形式将系统需求定义下来。 (2) 确定系统逻辑方案,形成系统分析报告。在对系统进行详细调查的基础上,运用各种系统开发的理论、方法和技术,确定并表述系统应具有的逻辑功能,形成系统逻辑方案(包括系统的结构、问题处理过程和分析计算模型)。新系统的逻辑方案在逻辑上描述新系统的目标和具有的功能、性能,它以系统分析报告的形式表达出来,作为下一阶段系统设计的依据。 系统分析的工作可以分两个阶段来完成: 第一阶段的工作是进行系统初步调查和可行性研究;第二个阶段的工作是在可行性分析报告通过批准后,对系统进行详细调查和逻辑设计。系统分析的主要步骤是系统初步调查、可行性研究、系统详细调查与分析、提出新系统逻辑方案。表21概述了信息系统分析所涉及的各项活动。 表21信息系统分析所涉及的各项活动 活 动 名 称目标关 键 问 题主要成果(产品)管 理 决 策 初步调查明确系统开发要解决的主要问题和目标,论证系统开发的必要性和可能性是否开发新系统,开发则提出系统的目标、规模、内容的初步设想,粗略估计系统开发所需资源系统开发建议书是否同意系统开发建议书,同意则进行可行性研究 可行性分析进一步明确系统的目标、规模与内容,提出系统开发的初步方案与计划研究系统开发的技术可行性、经济可行性、管理可行性和社会可行性,制订系统开发的初步方案与开发计划可行性研究报告、系统设计任务书审定可行性研究报告,下达系统设计任务书 现行系统详细调查与分析详细调查现行系统的工作过程,建立现行系统的逻辑模型,发现现行系统存在的主要问题详细分析现行系统的结构、业务流程和数据,确认具体问题现行系统的调查报告审查现行系统的调查报告 提出新系统逻辑方案明确用户信息需求,提出新系统的逻辑方案用户需求分析,建立新系统逻辑模型系统分析报告审查系统分析报告,若同意则开始系统设计 如表21所示,系统分析阶段的工作成果(产品)表现在信息系统建设过程中产生的重要文件中,其中尤为重要的是可行性研究报告与系统分析报告。可行性研究报告是决定是否进行系统开发的依据。系统分析报告是信息系统建设的必备文件,它是对系统分析阶段工作的总结,是决定是否进入系统设计的主要依据。在进行系统分析时,调查研究将贯穿系统分析的全过程。调查与分析经常交替进行,系统分析深入的程度是影响信息系统成败的关键问题。 信息系统分析的工具包括业务流程图、数据流程图、数据字典等。 业务流程图和数据流程图是系统业务流程的描述工具,反映了系统的全貌和工作流程,是系统分析的核心内容,但是对其中的数据与功能描述的细节没有进行定义,这些定义必须借助其他分析工具。而数据字典是对数据流程图中数据部分进行详细描述的工具,它起着对数据流程图的注释作用。 3. 信息系统设计 信息系统设计(Information System Design,ISD),也称为信息系统的物理设计,是在系统分析的基础上,将系统分析阶段反映用户需求的逻辑模型转换为可以具体实施的信息系统的物理模型,解决信息系统“怎么做”的问题。这一阶段要根据经济、技术和运行环境等方面的条件,详细地确定新系统的结构,为信息系统的实施提供必要的技术方案。 经过信息系统分析,得到了新系统的逻辑模型,解决了系统要“做什么”的问题。而信息系统设计则是从系统的逻辑功能要求出发,根据实际条件,进行各种具体的设计,确定系统的实施方案,解决系统“怎么做”的问题。因此,信息系统设计是开发企业信息系统的重要环节。 系统设计阶段的工作是一项技术性强、涉及面广的活动。设计内容包括两个方面: 总体设计和各部分的详细设计(物理设计)。在此基础上,完成系统设计说明书的编制,制订出系统的实施计划。 (1) 系统总体设计,包括系统总体布局方案的确定、软件系统总体结构的设计、数据存储的总体设计、计算机和网络系统方案的选择等。 (2) 各部分的详细设计,包括代码设计、数据库设计、人机界面设计(包括输入设计、输出设计、人机对话设计)、处理过程设计等。 (3) 系统实施进度与计划的制订。 (4) “系统设计说明书”的编写。“系统设计说明书”是系统设计阶段的重要成果,它是指一系列系统设计的文档,这些文档阐述了系统设计的指导思想、采用的技术、方法和设计结果与要求。“系统设计说明书”是系统实施工作的主要依据。 信息系统设计的任务是将信息系统的逻辑模型转化为物理模型。信息系统设计应遵循以下原则。 (1) 系统性原则。信息系统设计要从整个系统的角度进行考虑,系统代码要统一,设计标准要规范,传递语言要一致,实现数据或信息全局共享,提高数据重用性。 (2) 灵活性原则。为了维持较长的信息系统生命周期,要求系统具有很好的环境适应性。为此,信息系统应具有较好的开放性和结构的可变性。在信息系统设计中,应尽量采用模块化结构,提高数据、程序模块的独立性,这样既便于模块的修改,又便于增加新的内容,提高信息系统适应环境变化的能力。 (3) 可靠性原则。是指信息系统抗干扰的能力及受外界干扰时的恢复能力。一个成功的信息系统必须具有较高的可靠性,如安全保密性、检错及纠错能力、抗病毒能力等。 (4) 经济性原则。是指在满足系统需求的前提下,尽量节约成本。一方面,在硬件投资上不能盲目追求技术上的先进,而应以满足应用需要为前提;另一方面,信息系统设计中应尽量避免不必要的复杂化,各模块应尽量简洁,以便缩短处理流程、减少处理费用。 4. 信息系统实施 信息系统实施(Information System Implementation,ISI)是指将系统设计阶段的结果在计算机上实现,将原来纸面上的、类似于设计图式的新系统方案转换成可执行的应用软件。信息实施阶段的主要工作包括软硬件准备、程序设计、系统测试、用户培训、系统转换等。程序设计的任务是使用选定的程序设计语言,将系统设计中关于模块详细描述和处理过程说明转换成在计算机系统上运行的源程序。系统测试是保证系统质量的关键,是对整个系统开发过程的最终审查。系统转换的任务就是保证新老系统进行平稳而可靠的交接,最后使整个新系统正式交付用户单位使用。系统转换需要系统开发人员、系统操作人员、用户单位领导以及用户通力合作、相互配合才能完成。 5. 信息系统运行与维护 信息系统运行与维护(Information System Operation & Maintenance,ISOM),是信息系统生命周期的最后一个阶段,一般也是过程最长的阶段。信息系统运行与维护工作包括系统运行日志记录、校正性维护(修改已有系统的错误)、适应性维护(使已有系统适应新环境)和改进性维护(改进、提升原有系统功能和性能)等。系统维护的成本通常在软件开发项目中占很大比重。系统维护的难易程度与软件开发过程的质量控制水平密切相关。例如,文档齐全、测试充分、开发方法得当的软件系统容易维护,反之难以维护。 [MZ(3]2.2.4信息系统的技术文档[MZ)] 信息系统开发流程的各个阶段都有不同的文档,这些文档的种类、格式和作用各不相同。主要文档的名称及作用如表22所示。 在计算机信息系统的规划、分析、设计、实施、运行与维护过程中,文档起到重要的作用。它是系统开发过程质量控制的手段,也是系统运行与维护的重要参考。对于数据审计而言,信息系统文档的作用不可忽视。为了了解被审计单位信息系统的总体情况,为了读懂信息系统中数据的含义,为了测试被审计单位信息系统中的处理过程是否正确,都需要获取和阅读被审计单位信息系统的各种文档。下面重点介绍与数据审计密切相关的4种文档: 业务流程图、数据流程图、数据字典、数据库表结构。 表22信息系统开发各阶段的主要文档 阶段步骤文档主 要 作 用 信息系 统规划 总体规划系统总体规划方案设计系统整体结构,制订资源配置计划,确定子系统开发次序 可行性研究可行性研究报告从经济方面、技术方面和系统运行方面描述新系统的可行性 信息系 统分析 系统调查 组织结构图描述组织结构的现状 业务流程图描述系统的业务处理流程 需求分析 数据流程图从“数据”和“处理”两个方面来描述系统的数据处理流程 数据字典系统设计过程中对各类基本要素进行描述的集合 系统分析报告 系统分析阶段的工作成果和总结,开发人员进行系统设计和实施的基础,目标系统验收和评价的依据 信息系 统设计 总体设计 总体设计说明书描述系统的总体结构 数据库概念结构文档使用ER图等方法设计数据库的概念结构 物理配置方案设计设计一个信息系统实现的物理平台 详细设计 系统编码手册制定系统的编码规则,设计系统使用的各种代码,便于对信息进行鉴别、分类和排序 逻辑数据库设计文档由ER图转换而成的关系数据库系统中的表结构 物理数据库设计文档对索引设计、聚簇设计、分区设计、系统配置等信息进行说明 处理过程设计文档利用工具描述系统的具体处理逻辑 信息系 统实施 编程实施系统源程序系统源程序代码 系统测试系统测试文档包括系统测试方案、系统测试报告等,记录系统测试的过程 用户培训用户培训资料提供用户使用和操作的说明书 系统转换系统转换资料描述系统转换的方案及实施步骤,对系统转换总体过程的评价 信息系 统运行 与维护运行记录 系统维护运行日志 系统维护手册记录系统运行过程中的正常、异常情况 描述常见问题及其解决方案,以及可用的技术支持方式 1. 业务流程图 业务流程图(Transaction Flow Diagram,TFD)是系统分析阶段的文档。业务流程图用以描述系统的业务处理流程。它描述的是真实业务系统内各部门、人员之间的业务关系、作业顺序和管理信息流向,描述了业务过程的具体环节和业务流程的实际处理步骤,是一种纯业务的描述视角。业务流程是信息系统设计与开发的基础。业务流程图的基本符号及含义如下: 在绘制业务流程图之前,要对现行业务系统进行详细调查,并归纳出现行系统的业务流程总结。例如,开发人员在系统调查阶段了解到某企业的会计核算形式是科目汇总表的核算形式,其账务处理业务流程如下: (1) 根据审核无误的原始凭证汇总表编制记账凭证,包括现金收付凭证、银行收付凭证和转账凭证。 (2) 根据现金收付款凭证登记现金日记账。 (3) 根据银行收付款凭证登记银行存款日记账。 (4) 根据银行送来的对账单对银行存款日记账进行核对。 (5) 根据记账凭证及所付原始凭证登记有关明细账。 (6) 根据记账凭证,按相同的借贷方汇总出科目汇总表。 (7) 根据科目汇总表登记汇总分类账。 (8) 将明细账科目余额与财产物资实有数进行核对。 (9) 将总分类账余额与有关明细账余额进行核对。 (10) 根据总账、明细账余额编制各种会计报表。 根据上述业务流程可以绘制出该企业账务处理的业务流程图,如图27所示。 图27某企业账务处理的业务流程图 业务流程图描述的是真实系统的物理模型。业务流程图是从业务入手,从与组织经济活动直接有关的机构开始,进行业务调查而形成的。它实际上是一本用图形方式来描述实际业务处理过程的“流水账”。 这本“流水账”对于信息系统开发者理顺和优化业务过程很有帮助。对于计算机数据审计而言,业务流程图有助于迅速了解被审计单位的主要业务流程,为理解关键业务处理过程的数据流程图打下基础。 2. 数据流程图 数据流程图(Data Flow Diagram,DFD)是需求分析阶段的成果,也是一种系统分析的工具。数据流程图是从“数据”和“处理”两个方面来描述系统数据处理流程的图形化工具。数据流程图以图形的方式刻画数据从输入到输出的移动变换过程,综合反映出数据在系统中的存储、流动和处理情况,偏重于系统中的数据处理过程。它既是对原系统进行分析和抽象的工具,也是用以描述新系统逻辑模型的主要工具;既是系统分析人员与用户进行交流的有效工具,也是系统设计的主要依据。 采用数据流程图进行需求分析时,应使用自顶向下逐步求精的方法,即使用分层次的数据流程图来描述系统。这种描述的过程如下: (1) 先把整个系统看作一个统一的整体,进行综合的逻辑描述,画出最粗略的顶层数据流程图。在顶层数据流程图中要划定系统的边界,分析系统与外界的信息联系,即数据流程图中各信息流与外部实体的各种联系,外部实体向系统输入哪些信息,系统向外部实体输出哪些信息等。 (2) 通过逐步求精的方式,将顶层数据流程图逐层向下分解,分解为更加详细的较低层次的数据流程图。这时要分析系统内部有哪些逻辑处理功能,需要存储哪些信息,各功能与外部实体间、功能之间、功能与存储信息间的信息联系等。通过逐层分解,不断深入分析,直到最终得到的数据流程图中的每一个处理都能被容易地实现为止。 数据流程图的基本符号及其含义如下: 图28是某销售管理系统的一个顶层数据流程图。 图28某销售管理系统的顶层数据流程图 按照自顶向下、逐层分解的方法对它进行细化,可以首先得到一个0层数据流程图,如图29所示。 图29某销售管理系统的0层数据流程图 数据流程图是业务流程图的数据抽象,它屏蔽了业务流程的物理背景而抽象出数据的特征,描述了数据在业务活动中的运动状况。业务流程图是物理模型,数据流程图是逻辑模型。业务流程图主要是描述业务走向,而数据流程则是描述数据的走向。对于计算机数据审计而言,理解被审计单位信息系统关键业务处理过程的数据流程图非常重要。通过对数据流程图的理解和分析,可以迅速找到审计所需的数据对象,描述数据流动的规则,根据这些规则建立审计分析模型进行验证和分析。 3. 数据字典 数据字典(Data Dictionary,DD)是系统分析阶段的文档,是在系统设计过程中对各类基本要素进行描述的集合,是描述系统逻辑模型的重要工具。在系统的开发过程的不同阶段,开发人员需要查阅它;在计算机审计过程中,审计人员也需要查阅它。因此,数据字典是一种非常重要的文档。 数据字典通常由数据项、数据结构、数据流、数据存储和处理过程5个部分组成。其中数据项是数据的最小组成单位,若干个数据项可以组成一个数据结构,数据字典通过对数据项和数据结构的定义来描述数据流和数据存储的内容。 (1) 数据项 数据项是不可再分的数据单位。对数据项的描述通常包括以下内容: 数据项编号 数据项名称 数据项含义说明 别名 数据类型 数据长度 取值范围 取值含义 与其他数据项的逻辑关系 其中取值范围、与其他数据项的逻辑关系定义了数据的完整性约束条件,是设计数据检验功能的基础。 (2) 数据结构 一个数据结构由若干个数据项或数据结构组合而成,它反映了数据之间的组合关系。对数据结构的描述通常包括以下内容: 数据结构编号 数据结构名称 含义说明 组成 其中数据结构的组成说明了利用数据项或其他数据结构来组成该数据结构的规则。 (3) 数据流 数据流是数据结构在系统内传输的路径。数据流通常包括以下内容: 数据流编号 数据流名称 说明 数据流来源 数据流去向 组成(数据结构) 平均流量 高峰期流量 低谷期流量 其中数据流来源是说明该数据流来自哪个过程。数据流去向是说明该数据流将到哪个过程去。平均流量是指在单位时间(每天、每周、每月等)里的传输次数。高峰期流量是指在高峰时期的数据流量。低谷期流量则是指在低谷时期的数据流量。数据流条目可使用的符号如下: = : 表示等价 + : 表示“和” [ ] : 表示选择,即从括号内选取某一项 [ / ] : 表示“或”,即选择括号内的某一项,例如,凭证类型=[收款凭证/付款凭证/转账凭证] n1{}n2: 表示重复,即重复括号内的项,n1,n2为重复n1~n2次,例如2{a}6表示把a重复2~6次。如果n1不出现时,表示从0次开始重复。 () : 表示任选,可全选,亦可一项也不选 (4) 数据存储 数据存储是数据结构停留或保存的地方,也是数据流的来源和去向之一。对数据存储的描述通常包括以下内容: 数据存储编号 数据存储名称 说明 流入的数据流 流出的数据流 组成(数据结构) 数据量 存取方式 其中数据量是指每次存取多少数据,每天(或每小时、每周等)存取几次等信息。存取方式包括处理方式(批处理、联机处理)、处理内容(检索、更新)以及对处理内容的进一步描述。另外,流入的数据流要指出其来源,流出的数据流要指出其去向。 (5) 处理过程 数据字典中一般只描述处理过程的说明性信息,通常包括以下内容: 处理过程编号 处理过程名称 输入数据流 输出数据流 处理说明 处理要求 其中处理说明部分简要说明该处理过程的功能,即该处理过程用来“做什么”。至于“怎么做”的处理逻辑描述,可以采用专门的工具,常用的有结构化英语、判定表、判定树等。处理要求包括处理频度(单位时间里处理多少事务,多少数据量)、响应时间要求等。这些处理要求是后面设计和评价的标准。 下面以销售业务为例,简要说明数据字典的定义。 销售业务中有很多数据项,其中“科目代码”数据项可以描述如下: 数据项编号: Item001 数据项名称: KMDM 数据项含义说明: 唯一标识每个科目 别名: 科目代码 数据类型: 字符型 数据长度: 9 取值范围: 100000000~999999999 取值含义: 前3位是一级科目,后面每2位是一个科目级别 与其他数据项的逻辑关系: 数据流“工资结算单”可以描述如下: 数据流编号: Flow001 数据流名称: GZJSD 说明: 财务部门计算的工资结算单 数据流来源: 财务部门 数据流去向: 职工 组成(数据结构): 职工号+姓名+性别+基本工资+出勤工日+缺勤工日+病假+事假+工伤假+应扣工资+副食补贴+物价补贴+房租水电+储蓄+其他+实发工资 平均流量: 1500/月(单位职工人数) 高峰期流量: 低谷期流量: 处理过程“登记日记账”可描述如下: 处理过程编号: Proc001 处理过程名称: DJRJZ 输入数据流: 记账凭证 输出数据流: 现金及银行存款日记账 处理说明: 根据收款凭证、付款凭证逐笔顺序登记现金日记账和银行存款日记账 处理要求: 每月处理多次,每次处理时间小于15分钟 4. 数据库表结构 数据库表结构是系统设计阶段的文档。数据库表结构是在数据字典中对相关数据项和数据结构描述的前提下,以关系规范化理论为指导设计完成的。数据字典中描述的一个数据结构在数据库表结构中有可能被拆分成多个表。 在实际工作中,被审计单位可能无法提供格式规范、内容齐全的数据字典,所提供的大多是数据库表结构的含义说明文档,包括数据库表名的含义及字段名的含义说明,如表23所示。 表23LY01(参保单位信息表)表部分字段的结构定义 序号指 标 名 称指标 编码指标 类型指标 长度代码 标识指 标 释 义 11行政区划代码AAB301C6Y指工伤认定部门、劳动能力鉴定机构、工伤保险经办机构所在地的行政区划代码,参照GB/T 22602007 中华人民共和国行政区划代码,并按统一规则扩充 12数据期别AAE043C6指上报数据的年度和月份,表示方式为 YYYYMM 13单位编号AAB001C20指本地信息系统中用人单位的唯一识别号码 14单位名称AAB004C100指用人单位的全称 15组织机构代码AAB003C9指国家质检部门颁发的《中华人民共和国组织机构代码证》中的代码(不含连字符“”) 16单位实缴当月金额AAB210N16,2指本月用人单位按应缴当月金额实际缴纳的工伤保险费金额(含预缴中按月划扣金额) 数据库表结构的载体可以是Excel文档、Word文档,也可以是ERWIN、PowerDesigner等文件格式,通过安装ERWIN、PowerDesigner等数据库建模工具可以查看专有格式的数据库表结构的内容。 从观察数据的角度看,数据库表结构说明文档更加直接,从理解数据的角度看,数据字典更有帮助。 从严格意义上讲,这种表结构的定义说明文档描述的是关系数据库模式,是数据库逻辑结构设计的产物。但由于这种方式能够与审计人员所采集的电子数据完全对应起来,有利于审计人员精确理解被审计单位电子数据的含义,因此在实际工作中经常采取这种方式来取代传统意义的“数据字典”中关于数据项和数据结构的描述。 [MZ(2]2.3拓展阅读[MZ)][*3/4] 全球数据库排名 DBEngines的排名主要根据5个因素: 一是Google以及Bing搜索引擎的关键字搜索数量;二是Google Trends的搜索数量;三是Indeed网站中的职位搜索量;四是LinkedIn中提到关键字的个人资料数;五是Stackoverflow上相关的问题和关注者数量。 DBEngines每月给出全球数据库综合排名。 表24为2016年7月DBEngines对308个数据库引擎所作的综合排名。 表24数据库引擎综合排名 排 名 2016年2015年 7月6月7月 数据库管理 系统名称 数据库管理 系统类型 分 值 2016年2015年 7月6月7月 111Oracle关系数据库管理系统1441.53-7.72-15.2 222MySQL关系数据库管理系统1363.29-6.8579.95 333Microsoft SQL Server关系数据库管理系统1192.8927.0889.83 444MongoDB面向文档数据库管理系统3150.3827.61 555PostgreSQL关系数据库管理系统311.154.5538.33 666DB2关系数据库管理系统185.08-3.49-13.04 77↑ 8.Cassandra宽列存储数据库管理系统130.7-0.4217.99 88↓ 7.Microsoft Access关系数据库管理系统124.9-1.32-19.4 999SQLite关系数据库管理系统108.531.752.66 101010Redis键值数据库管理系统108.033.5412.96 1111↑ 14.Elasticsearch搜索引擎数据库管理系统88.621.2118.46 1212↑ 13.Teradata关系数据库管理系统73.930.11.62 1313↓ 11.SAP Adaptive Server关系数据库管理系统70.73-0.95-16.48 续表 排 名 2016年2015年 7月6月7月 数据库管理 系统名称 数据库管理 系统类型 分 值 2016年2015年 7月6月7月 1414↓ 12.Solr搜索引擎数据库管理系统64.690.63-14.59 151515HBase宽列存储数据库管理系统53.140.15-7.77 161616FileMaker关系数据库管理系统51.562.870.75 171717Hive关系数据库管理系统47.550.55-0.65 181818Splunk搜索引擎数据库管理系统46.651.425 191919SAP HANA关系数据库管理系统41.810.545.19 2020↑ 26.MariaDB关系数据库管理系统35.81.1412.52 2121↑ 22.Neo4jGraph数据库管理系统33.68-0.342.34 2222↓ 20.Informix关系数据库管理系统28.56-0.5-7.33 2323↓ 21.Memcached键值数据库管理系统27.2-0.22-5.93 242424Couchbase面向文档数据库管理系统25.980.67-0.3 2525↑ 29.Amazon DynamoDB多模型数据库管理系统24.930.598.42 2626↓ 23.CouchDB面向文档数据库管理系统21-0.71-5.93 27↑ 29.↑ 30.Vertica关系数据库管理系统19.660.323.82 28↓ 27.28Microsoft Azure SQL Database关系数据库管理系统19.15-0.391.9 29↓ 28.↓ 27.Netezza关系数据库管理系统18.96-0.54-0.56 3030↓ 25.Firebird关系数据库管理系统17.4-1.59-6.03 313131Riak KV键值数据库管理系统11.35-0.39-2.3 32↑ 33.32MarkLogic多模型数据库管理系统9.750.19-1.38 33↑ 36.↑ 40.Amazon Redshift关系数据库管理系统9.70.493.54 3434↓ 33.dBASE关系数据库管理系统9.640.2-0.69 3535↑ 37.Greenplum关系数据库管理系统9.16-0.15-0.11 36↓ 32.↓ 34.Ingres关系数据库管理系统9.02-0.7-0.92 3737↑ 43.Impala关系数据库管理系统8.74-0.122.89 3838↓ 35.Sphinx搜索引擎数据库管理系统8.05-0.28-1.68 3939↑ 42.Hazelcast键值数据库管理系统7.110.111.02 4040↓ 38.Ehcache键值数据库管理系统6.64-0.21-1.12 41↑ 42.↑ 51.Google BigQuery关系数据库管理系统6.030.161.72 42↑ 43.↓ 39.Interbase关系数据库管理系统5.910.15-0.67 续表 排 名 2016年2015年 7月6月7月 数据库管理 系统名称 数据库管理 系统类型 分 值 2016年2015年 7月6月7月 43↓ 41.↑ 49.OrientDB多模型数据库管理系统5.83-0.091.37 4444↑ 57.TitanGraph数据库管理系统5.270.21.38 4545Spark SQL关系数据库管理系统5.180.15 4646↑ 70.RethinkDB面向文档数据库管理系统4.8-0.122.21 4747↑ 69.Aerospike键值数据库管理系统4.5301.92 48↑ 50.↓ 41.RavenDB面向文档数据库管理系统4.490.08-1.67 4949↑ 53.Cloudant面向文档数据库管理系统4.460.010.29 50↓ 48.↑ 81.InfluxDB时间序列数据库管理系统4.45-0.042.72 51↑ 52.↓ 46.HyperSQL关系数据库管理系统4.410.12-0.34 52↓ 51.↓ 44.SAP IQ关系数据库管理系统4.370.05-1.26 5353↓ 45.SAP SQL Anywhere关系数据库管理系统4.090.09-0.76 54↑ 55.↑ 55.H2关系数据库管理系统3.930.07-0.15 55↑ 56.↓ 47.Adabas多值数据库管理系统3.910.09-0.77 56↑ 57.↓ 50.Derby关系数据库管理系统3.830.04-0.52 57↓ 54.↓ 48.Jackrabbit内容存储数据库管理系统3.68-0.25-1 5858↓ 52.GemFire面向文档数据库管理系统3.44-0.23-0.86 59↑ 60.↑ 61.Accumulo宽列存储数据库管理系统3.340.01-0.13 60↓ 59.↓ 54.Google Search Appliance搜索引擎数据库管理系统3.23-0.18-0.86 6161↓ 58.Berkeley DB键值数据库管理系统3.13-0.01-0.72 6262↑ 66.Amazon SimpleDB键值数据库管理系统2.9-0.09-0.09 6363↓ 60.Oracle Coherence键值数据库管理系统2.87-0.09-0.63 6464↑ 67.SAP Advantage Database Server关系数据库管理系统2.850.020.17 65↑ 66.Realm关系数据库管理系统2.760.18 66↓ 65.↓ 62.UniData,UniVerse多值数据库管理系统2.69-0.02-0.43 67↑ 69.↑ 93.MemSQL关系数据库管理系统2.650.161.29 6868↑ 71.Oracle NoSQL键值数据库管理系统2.580.060.13 6970.↓ 65.MaxDB关系数据库管理系统2.550.11-0.44 70↓ 67.↓ 59.RRDtool时间序列数据库管理系统2.53-0.01-1.14 续表 排 名 2016年2015年 7月6月7月 数据库管理 系统名称 数据库管理 系统类型 分 值 2016年2015年 7月6月7月 71↑ 72.↑ 95.Microsoft Azure DocumentDB面向文档数据库管理系统2.410.061.11 72↓ 71.↑ 78.Amazon CloudSearch搜索引擎数据库管理系统2.35-0.070.48 73↑ 76.↓ 63.Virtuoso多模型数据库管理系统2.310.19-0.76 7474↓ 73.OpenEdge关系数据库管理系统2.30.030.06 75↑ 77.↑ 102.PouchDB面向文档数据库管理系统2.280.171.16 76↓ 75.↑ 79.Teradata Aster关系数据库管理系统2.220.050.46 77↑ 80.↑ 101.Apache Drill关系数据库管理系统2.190.141.04 78↓ 73.↓ 64.TimesTen关系数据库管理系统2.19-0.15-0.84 79↑ 81.↓ 74.Infinispan键值数据库管理系统2.030.03-0.21 80↓ 79.↓ 56.mSQL关系数据库管理系统1.93-0.14-1.99 81↑ 83.↑ 116.Amazon Aurora关系数据库管理系统1.910.081.03 82↓ 78.↓ 68.Caché面向对象数据库管理系统1.89-0.2-0.73 83↓ 82.↓ 75.Datameer面向文档数据库管理系统1.88-0.02-0.22 84↑ 85.IBM dashDB关系数据库管理系统1.870.12 85↓ 84.↓ 84.JenaRDF存储数据库管理系统1.830.050.12 86↑ 87.↑ 128.CloudKit面向文档数据库管理系统1.780.071.07 87↑ 89.↑ 96.ArangoDB多模型数据库管理系统1.750.10.46 8888↑ 89.Graphite时间序列数据库管理系统1.740.050.26 89↓ 86.↓ 80.Drizzle关系数据库管理系统1.65-0.08-0.08 90↑ 91.↓ 88.LevelDB键值数据库管理系统1.650.050.14 91↓ 90.4D关系数据库管理系统1.640 9292↓ 86.Datomic关系数据库管理系统1.580-0.02 9393↓ 72.Db4o面向对象数据库管理系统1.54-0.03-0.73 9494↓ 83.Percona Server关系数据库管理系统1.520-0.2 95↑ 98.↑ 113.Microsoft Azure Search搜索引擎数据库管理系统1.490.060.54 96↑ 99.↓ 85.SesameRDF存储数据库管理系统1.460.06-0.2 97↓ 96.↓ 82.IMS可导航数据库管理系统1.43-0.03-0.29 98↓ 97.↑ 114.OpenTSDB时间序列数据库管理系统1.41-0.040.48 99↑ 103.↑ 108.MonetDB关系数据库管理系统1.370.110.36 续表 排 名 2016年2015年 7月6月7月 数据库管理 系统名称 数据库管理 系统类型 分 值 2016年2015年 7月6月7月 100↑ 104.↓ 87.Versant Object Database面向对象数据库管理系统1.30.05-0.29 101101↓ 76.VoltDB关系数据库管理系统1.28-0.06-0.66 102↓ 95.↑ 103.Kdb+多模型数据库管理系统1.26-0.220.2 103↑ 105.↓ 99.SednaNative XML数据库管理系统1.260.020.08 104↓ 100.↓ 92.Infobright关系数据库管理系统1.25-0.14-0.12 105↓ 102.↓ 77.EnterpriseDB关系数据库管理系统1.24-0.08-0.64 106106↓ 94.ParAccel关系数据库管理系统1.20.02-0.11 107107↓ 90.D3多值数据库管理系统1.190.06-0.23 108108↑ 121.TaminoNative XML数据库管理系统1.09-0.030.28 109↑ 111.↑ 124.Google Cloud Datastore面向文档数据库管理系统1.070.070.32 110↑ 112.↑ 111.Mnesia面向文档数据库管理系统1.020.020.06 111↑ 113.↓ 104.Red Brick关系数据库管理系统1.010.01-0.05 112↓ 109.↓ 107.jBASE多值数据库管理系统1-0.03-0.02 113↑ 117.↓ 98.Oracle Rdb关系数据库管理系统0.990.1-0.22 114↓ 110.↓ 97.SQLBase关系数据库管理系统0.98-0.02-0.3 115↓ 114.↓ 100.ObjectStore面向对象数据库管理系统0.97-0.01-0.19 116↓ 115.↓ 110.BaseXNative XML数据库管理系统0.950.03-0.01 117↓ 116.↓ 106.GiraphGraph数据库管理系统0.890-0.14 118↑ 119.↓ 115.GridGain键值数据库管理系统0.83-0.02-0.07 119↓ 118.↓ 109.DataEase关系数据库管理系统0.83-0.03-0.19 120↑ 124.Matisse面向对象数据库管理系统0.80.04 121121↓ 120.R:BASE关系数据库管理系统0.8-0.01-0.03 122↑ 127.HAWQ关系数据库管理系统0.770.03 123↓ 122.↓ 91.IDMS可导航数据库管理系统0.75-0.04-0.66 124↑ 130.↑ 156.Cubrid关系数据库管理系统0.740.050.34 125125↑ 142.Northgate Reality多值数据库管理系统0.7400.2 126↓ 120.↓ 119.Altibase关系数据库管理系统0.74-0.07-0.09 续表 排 名 2016年2015年 7月6月7月 数据库管理 系统名称 数据库管理 系统类型 分 值 2016年2015年 7月6月7月 127↑ 128.Tibero关系数据库管理系统0.720 128↓ 123.↓ 118.Model 204多值数据库管理系统0.71-0.07-0.16 129↓ 126.↓ 105.NuoDB关系数据库管理系统0.69-0.05-0.34 130↑ 132.Raima Database Manager关系数据库管理系统0.680.02 131131↓ 122.NonStop SQL关系数据库管理系统0.670-0.11 132↑ 134.↓ 112.Empress关系数据库管理系统0.670.02-0.29 133133↑ 138.AlgebraixRDF存储数据库管理系统0.660.020.07 134↓ 129.↑ 147.Hadapt关系数据库管理系统0.66-0.040.16 135135↑ 136.TokuDB关系数据库管理系统0.60-0.01 136↑ 144.↓ 130.Clustrix关系数据库管理系统0.60.07-0.09 137137↓ 127.solidDB关系数据库管理系统0.580-0.14 138138↓ 133.DBISAM关系数据库管理系统0.570-0.08 139↑ 143.↓ 134.ZODB键值数据库管理系统0.560.02-0.08 140↓ 136.↓ 135.GT.M键值数据库管理系统0.55-0.05-0.09 141↑ 146.↓ 126.Vectorwise关系数据库管理系统0.540.01-0.18 142↓ 141.↓ 140.InfiniDB关系数据库管理系统0.53-0.02-0.04 143↑ 147.↓ 131.Hypertable宽列存储数据库管理系统0.51-0.01-0.18 144↓ 142.↓ 123.Datacom/DB关系数据库管理系统0.5-0.05-0.25 145↑ 148.↑ 148.NCache键值数据库管理系统0.5-0.010.01 146↑ 155.↑ 172.RocksDB键值数据库管理系统0.490.030.22 147↓ 139.↓ 132.1010data关系数据库管理系统0.49-0.07-0.19 148↑ 149.↓ 139.Kognitio关系数据库管理系统0.49-0.02-0.08 149↑ 151.↓ 137.Pervasive PSQL关系数据库管理系统0.480-0.11 150↓ 140.↓ 141.Xapian搜索引擎数据库管理系统0.48-0.08-0.06 151↑ 154.↑ 162.OpenInsight多值数据库管理系统0.480.010.13 152↓ 150.↓ 144.OpenBase关系数据库管理系统0.48-0.02-0.05 153153↓ 125.AllegroGraph多模型数据库管理系统0.47-0.01-0.27 154↓ 145.↑ 160.Stardog多模型数据库管理系统0.46-0.070.1 155↑ 157.↑ 167.WiredTiger键值数据库管理系统0.450.020.15 续表 排 名 2016年2015年 7月6月7月 数据库管理 系统名称 数据库管理 系统类型 分 值 2016年2015年 7月6月7月 156↑ 168.↑ 161.XAP键值数据库管理系统0.450.10.09 157↓ 152.↓ 129.Objectivity/DB面向对象数据库管理系统0.44-0.03-0.27 158↑ 159.↓ 143.FrontBase关系数据库管理系统0.440.01-0.1 159↓ 158.↓ 146.VistaDB关系数据库管理系统0.430-0.07 160↓ 167.↓ 153.NexusDB关系数据库管理系统0.430.08-0.01 161↓ 156.↓ 152.SciDB多值数据库管理系统0.43-0.02-0.01 162162PrestoDB关系数据库管理系统0.430.03 163↓ 160.↓ 150.Rainstor关系数据库管理系统0.420-0.02 164↑ 169.↑ 188.Druid时间序列数据库管理系统0.410.060.22 165↓ 163.↓ 145.TokuMX面向文档数据库管理系统0.36-0.02-0.16 166↓ 161.↓ 151.ITTIA关系数据库管理系统0.36-0.04-0.08 167↓ 166.↓ 164.Perst面向对象数据库管理系统0.35-0.010.03 168↓ 165.↓ 155.WebSphere eXtreme Scale键值数据库管理系统0.35-0.02-0.05 169↓ 164.↓ 154.GemStone/S面向对象数据库管理系统0.35-0.03-0.06 170Snowflake面向文档数据库管理系统0.35 171↓ 170.↓ 157.ObjectDB面向对象数据库管理系统0.350-0.05 172↑ 174.↑ 179.MapDB键值数据库管理系统0.350.040.13 173↓ 172.↓ 165.Indica搜索引擎数据库管理系统0.340.010.02 174↓ 171.↓ 149.Tokyo Cabinet键值数据库管理系统0.340-0.15 175175↑ 219.事件存储数据库事件存储数据库管理系统0.3-0.010.21 176↑ 178.↓ 168.Hibari键值数据库管理系统0.290.02-0.01 177177↓ 166.Splice Machine关系数据库管理系统0.28-0.02-0.04 178↓ 173.↓ 169.XtremeData关系数据库管理系统0.27-0.05-0.02 179↓ 176.↓ 158.Sqrrl多模型数据库管理系统0.25-0.04-0.12 180↓ 179.↓ 174.Project Voldemort键值数据库管理系统0.24-0.02-0.02 181↑ 185.↓ 170.Tokyo Tyrant键值数据库管理系统0.240.01-0.04 182↓ 180.HFSQL关系数据库管理系统0.24-0.03 183↓ 181.↑ 207.KairosDB时间序列数据库管理系统0.24-0.010.1 184↑ 192.↑ 187.RedlandRDF存储数据库管理系统0.230.030.04 续表 排 名 2016年2015年 7月6月7月 数据库管理 系统名称 数据库管理 系统类型 分 值 2016年2015年 7月6月7月 185↓ 183.↑ 196.4storeRDF存储数据库管理系统0.23-0.010.07 186↓ 184.↓ 177.Mimer SQL关系数据库管理系统0.2300.01 187↑ 190.Google Cloud Bigtable宽列存储数据库管理系统0.230.02 188↓ 182.↓ 178.SQL.JS关系数据库管理系统0.23-0.020.01 189↓ 188.↓ 186.Crate.IO多模型数据库管理系统0.230.010.02 190↓ 186.↓ 175.Clusterpoint面向文档数据库管理系统0.2-0.03-0.03 191↓ 187.↓ 185.ModeShape内容存储数据库管理系统0.2-0.020 192↓ 189.↑ 210.Starcounter面向对象数据库管理系统0.2-0.010.08 193↓ 191.↓ 159.InfiniteGraphGraph数据库管理系统0.19-0.01-0.18 194194194Transbase关系数据库管理系统0.1900.02 195↑ 201.↓ 184.LucidDB关系数据库管理系统0.190.02-0.02 196↑ 207.↓ 189.Prometheus时间序列数据库管理系统0.190.030 197↓ 195.↓ 171.eXtremeDB关系数据库管理系统0.190-0.08 198↓ 196.↓ 176.eXistdbNative XML数据库管理系统0.180-0.05 199↓ 198.↑ 252.Tarantool键值数据库管理系统0.1800.18 200↑ 218.↑ 215.GraphDB多模型数据库管理系统0.170.040.07 201↓ 199.↑ 224.ElevateDB关系数据库管理系统0.1700.1 202↓ 200.Trafodion关系数据库管理系统0.16-0.01 203↑ 213.↓ 183.EXASolution关系数据库管理系统0.160.02-0.05 204↑ 205.↑ 226.VelocityDB面向对象数据库管理系统0.15-0.010.08 205↓ 197.↑ 232.PostgresXL关系数据库管理系统0.15-0.020.09 206↑ 208.↓ 191.STSdb键值数据库管理系统0.15-0.01-0.03 207↓ 202.↓ 181.ScimoreDB关系数据库管理系统0.15-0.02-0.06 208↓ 193.↓ 205.GenieDB关系数据库管理系统0.15-0.050.01 209↑ 210.↓ 173.Akiban关系数据库管理系统0.150-0.12 210↓ 203.↓ 190.ScaleBase关系数据库管理系统0.15-0.02-0.04 211↑ 217.↑ 223.Rasdaman多值数据库管理系统0.1400.07 212↑ 221.↓ 202.RedStoreRDF存储数据库管理系统0.140.01-0.01 213↑ 226.↑ 234.EJDB面向文档数据库管理系统0.140.020.08 续表 排 名 2016年2015年 7月6月7月 数据库管理 系统名称 数据库管理 系统类型 分 值 2016年2015年 7月6月7月 214↑ 216.Riak TS时间序列数据库管理系统0.140 215↑ 220.↓ 208.Kyoto Cabinet键值数据库管理系统0.1400.01 216↓ 211.↓ 206.ScaleDB关系数据库管理系统0.14-0.010 217↓ 204.↓ 201.TransLattice关系数据库管理系统0.13-0.03-0.02 218↓ 214.↓ 200.WebScaleSQL关系数据库管理系统0.13-0.01-0.03 219↑ 227.AlaSQL多模型数据库管理系统0.130.02 220↓ 209.↓ 180.Dataupia关系数据库管理系统0.13-0.02-0.08 221↓ 206.↓ 209.HyperDex键值数据库管理系统0.13-0.030.01 222↓ 212.↓ 195.StrabonRDF存储数据库管理系统0.13-0.02-0.04 223223↓ 197.FlockDBGraph数据库管理系统0.120-0.04 224224↓ 198.Scalaris键值数据库管理系统0.12-0.01-0.04 225↓ 222.↓ 193.SearchBlox搜索引擎数据库管理系统0.12-0.01-0.05 226↑ 241.↑ 233.Valentina Server关系数据库管理系统0.120.030.05 227↑ 229.↓ 222.Tajo关系数据库管理系统0.1200.03 228↑ 235.↓ 216.Srch2搜索引擎数据库管理系统0.110.010.01 229↑ 236.↑ 251.NEventStore事件存储数据库管理系统0.110.010.1 230↑ 245.↑ 244.ScaleOut StateServer键值数据库管理系统0.110.020.05 231↓ 215.↓ 227.BrightstarDBRDF存储数据库管理系统0.11-0.030.04 232↓ 231.ActorDB关系数据库管理系统0.1-0.01 233↑ 238.LiteDB面向文档数据库管理系统0.10.01 234↓ 219.↓ 203.Jade面向对象数据库管理系统0.1-0.03-0.04 235↓ 234.↑ 238.RaptorDB面向文档数据库管理系统0.100.04 236↓ 233.↓ 211.OpenQM多值数据库管理系统0.1-0.01-0.01 237↑ 244.↓ 213.SmallSQL关系数据库管理系统0.10.01-0.01 238↓ 230.↓ 214.ctreeACE多模型数据库管理系统0.1-0.01-0.01 239↓ 232.↓ 212.Siaqodb面向对象数据库管理系统0.1-0.01-0.01 240↑ 242.↓ 192.InfoGridGraph数据库管理系统0.090-0.08 241↓ 225.↓ 163.SparkseeGraph数据库管理系统0.09-0.03-0.26 242↑ 248.↓ 231.Sequoiadb面向文档数据库管理系统0.090.020.02 243↓ 228.↓ 204.Terrastore面向文档数据库管理系统0.09-0.03-0.05 续表 排 名 2016年2015年 7月6月7月 数据库管理 系统名称 数据库管理 系统类型 分 值 2016年2015年 7月6月7月 244Heroic时间序列数据库管理系统0.08 245↓ 239.↓ 199.HyperGraphDBGraph数据库管理系统0.08-0.02-0.08 246↓ 240.↓ 236.WakandaDB面向对象数据库管理系统0.08-0.020.02 247↓ 243.↑ 253.Blazegraph多模型数据库管理系统0.08-0.010.08 248↑ 251.DeepSQL关系数据库管理系统0.070.01 249↓ 246.↓ 221.Eloquera面向对象数据库管理系统0.07-0.02-0.01 250↑ 257.↓ 225.Versant FastObjects面向对象数据库管理系统0.070.030 251↓ 237.↓ 235.GlobalsDB多模型数据库管理系统0.06-0.040 252↑ 259.BigObject关系数据库管理系统0.060.03 253↓ 247.↓ 239.SisoDb面向文档数据库管理系统0.06-0.010 254↑ 261.Yanza时间序列数据库管理系统0.060.03 255↓ 252.↓ 243.CitusDB关系数据库管理系统0.050-0.01 256↑ 263.↓ 245.Linter关系数据库管理系统0.050.030.01 257↑ 262.↓ 253.Warp 10时间序列数据库管理系统0.050.020.05 258↑ 265.↓ 218.MulgaraRDF存储数据库管理系统0.050.03-0.04 259↓ 258.↓ 253.LokiJS面向文档数据库管理系统0.050.010.05 260↓ 254.↓ 228.Upscaledb键值数据库管理系统0.040-0.03 261↑ 264.Helium键值数据库管理系统0.040.02 262↓ 253.↓ 241.TempoIQ时间序列数据库管理系统0.04-0.01-0.02 263↓ 256.↓ 217.LightCloud键值数据库管理系统0.040-0.05 264↑ 267.↓ 253.Newts时间序列数据库管理系统0.040.020.04 265↑ 269.KDB关系数据库管理系统0.030.02 266↓ 260.ScyllaDB宽列存储数据库管理系统0.030 267↑ 274.↓ 253.Blueflood时间序列数据库管理系统0.030.020.03 268268↓ 230.GraphBaseGraph数据库管理系统0.030.01-0.04 269↓ 255.↓ 253.Quasardb键值数据库管理系统0.02-0.020.02 270↑ 275.↓ 253.FleetDB面向文档数据库管理系统0.020.020.02 271↓ 266.↓ 229.DydraRDF存储数据库管理系统0.020-0.05 272↓ 249.↓ 242.VelocityGraphGraph数据库管理系统0.01-0.05-0.05 273↑ 275.↓ 253.Bangdb键值数据库管理系统0.010.010.01 续表 排 名 2016年2015年 7月6月7月 数据库管理 系统名称 数据库管理 系统类型 分 值 2016年2015年 7月6月7月 274↓ 250.↓ 237.WhiteDB面向文档数据库管理系统0.01-0.05-0.05 275ToroDB面向文档数据库管理系统0.01 276↓ 273.↓ 220.DBSight搜索引擎数据库管理系统0.010-0.08 277↓ 272.↓ 250.Axibase时间序列数据库管理系统0.0100 278↓ 271.↓ 247.CodernityDB键值数据库管理系统0.01-0.01-0.03 279↓ 275.↓ 253.Elliptics键值数据库管理系统000 280↓ 275.↓ 246.CubicWebRDF存储数据库管理系统00-0.03 281↓ 270.PipelineDB关系数据库管理系统0-0.01 282↓ 275.↓ 253.Amisa Server多模型数据库管理系统0±0.00±0.00 282↓ 275.↓ 253.BergDB键值数据库管理系统0±0.00±0.00 282↓ 275.Cachelot.io键值数据库管理系统0±0.00 282↓ 275.↓ 182.Compass搜索引擎数据库管理系统0±0.00-0.21 282↓ 275.↓ 253.CortexDB多模型数据库管理系统0±0.00±0.00 282↓ 275.↓ 253.DaggerDB关系数据库管理系统0±0.00±0.00 282↓ 275.↓ 253.DensoDB面向文档数据库管理系统0±0.00±0.00 282↓ 275.↓ 253.Djondb面向文档数据库管理系统0±0.00±0.00 282↓ 275.↓ 253.Exorbyte搜索引擎数据库管理系统0±0.00±0.00 282↓ 275.FaunaDB面向文档数据库管理系统0±0.00 282↓ 275.Hawkular Metrics时间序列数据库管理系统0±0.00 282↓ 275.↓ 253.HyperLevelDB键值数据库管理系统0±0.00±0.00 282↓ 275.Infiniflux时间序列数据库管理系统0±0.00 282↓ 275.↓ 240.JasDB面向文档数据库管理系统0±0.00-0.06 282↓ 275.↓ 249.JethroData关系数据库管理系统0±0.00-0.01 282↓ 275.↓ 253.JustOneDB关系数据库管理系统0±0.00±0.00 282↓ 275.↓ 248.Kyoto Tycoon键值数据库管理系统0±0.00-0.03 282↓ 275.↓ 253.LedisDB键值数据库管理系统0±0.00±0.00 282↓ 275.↓ 253.Nanolat键值数据库管理系统0±0.00±0.00 282↓ 275.↓ 253.OrigoDB多模型数据库管理系统0±0.00±0.00 282↓ 275.↓ 253.Resin Cache键值数据库管理系统0±0.00±0.00 282↓ 275.searchxml多模型数据库管理系统0±0.00 续表 排 名 2016年2015年 7月6月7月 数据库管理 系统名称 数据库管理 系统类型 分 值 2016年2015年 7月6月7月 282↓ 275.↓ 253.SenseiDB面向文档数据库管理系统0±0.00±0.00 282↓ 275.↓ 253.SiteWhere时间序列数据库管理系统0±0.00±0.00 282↓ 275.↓ 253.SparkleDBRDF存储数据库管理系统0±0.00±0.00 282↓ 275.↓ 253.TimeSeries.Guru时间序列数据库管理系统0±0.00±0.00 282↓ 275.↓ 253.TomP2P键值数据库管理系统0±0.00±0.00 [MZ(2]思考题[MZ)] 1. 名词解释: C/S、B/S、生命周期法、原型法、面向对象的方法、计算机辅助软件工程、业务流程图、数据流程图、数据字典、数据库表结构。 2. 信息系统有哪几种技术架构? 3. 试述信息系统开发的主要方法。 4. 生命周期法的优点和缺点分别是什么? 5. 面向对象方法与传统方法相比有什么重大思想突破? 6. 试列举常用的CASE工具。 7. 生命周期法将信息系统开发过程划分为哪些阶段?各阶段应形成哪些主要文档? 8. 简述数据字典与数据库表结构之间的关系。 9. 简述数据流程图与业务流程图之间的关系。 10. DMBS的类型除了关系型还有哪些? 第3章电子数据采集与分析技术原理 [MZ(1]第3章电子数据采集与分析技术原理[MZ)] 本章要点 ◆审计接口原理 & 接口规范 & 实现方式 & 控制措施 ◆ODBC原理及其在数据采集中的应用 & ODBC工作原理 & ODBC体系结构 & ODBC驱动程序 & ODBC数据源 ◆UDA原理及其在数据采集中的应用 & OLE DB & ADO & ADO.NET ◆电子数据分析技术原理 & SQL的起源 & SQL的特点 & SQL基本语法 ◆拓展阅读 & 《财经信息技术会计核算软件数据接口》国家标准 & 常用TSQL函数 上一章讲的是电子数据存储与管理技术原理,关注的重点是被审计单位在存储和管理电子数据时使用的关系型数据库和业务信息系统。本章接下来讨论将被审计单位的电子数据采集到审计人员的计算机系统并开展相关分析的技术原理。 [MZ(2]3.1电子数据采集技术原理[MZ)][*3/4] [MZ(3]3.1.1审计接口原理[MZ)] 被审计单位的信息系统通常实施事务型数据处理,审计应用系统进行的则是分析型数据处理,这两种数据处理在目标和过程上均存在很大的差异。为了尽量减少审计分析操作对被审计单位信息系统造成的影响,在审计实务中,通常采用将被审计单位的电子数据采集、转换到审计应用系统中进行分析和处理的方式。为了实现这一功能,需要从被审计单位信息系统向审计应用系统传送审计信息的通道。这个通道被称为审计接口。 审计接口是从被审计单位信息系统向审计应用系统传送审计信息的规范和程序。在信息系统技术领域,接口是指在两个系统间进行信息交换的通道。这个通道包含两方面的内容,一是信息传输的格式和规范,二是完成传输作业的程序。在被审计信息系统与审计应用系统之间传递信息的情况则较为复杂,往往需要开发专用的审计接口。从广义上说,审计接口是在审计中完成数据采集和转换功能的一类系统的总称。 审计接口按照用途进行划分,可以分为通用审计接口和专用审计接口。通用审计接口通常指数据采集和转换工具。利用这些工具可以方便地完成数据采集工作。通用审计接口的应用前提是被审计单位信息系统建立在常用的数据库平台上,而且系统设计、开发比较规范,审计人员对它也比较熟悉。专用审计接口是指为了完成某一项特定功能而专门开发的审计接口。专用审计接口具有很强的针对性,而且易于理解和使用。 审计接口按照数据传输的频率来划分,可以分为实时审计接口与周期性审计接口。每进行完一笔经济业务就进行一次数据传输的审计接口属于实时审计接口。定期传输业务数据的接口属于周期性审计接口。实时审计接口能保证审计机关实时检查被审计单位的经济活动,但这种方式会对被审计单位的信息系统造成一定的负担。而且,这种审计接口在可靠性、安全性等方面要求比较高,实现难度也较大。在联网审计中当对要报送的电子数据的实时性要求比较高的时候,可以建立实时接口;如果是按期(月度、季度、半年度、年度等)报送数据,也可以建立周期性接口。 通过审计接口采集电子数据时,为了确保信息传输的适时性和完整性,需要对接口进行控制。因此,审计接口的实现包括3个要素,即接口规范、实现方式和控制措施。其中,接口规范负责对信息的含义进行定义和描述;实现方式解决的是如何选择最合适的方式完成从被审计单位信息系统到审计应用系统之间的信息传输;控制措施用于保证信息传输的适时性和完整性。 1. 接口规范 接口规范通常表现为接口标准,它实际上是一种信息发送方和接受方都可以使用的语言,这种语言所使用的语句是没有二义性的;同时,这种标准不受具体的计算机系统影响,既适用于计算机系统间的信息交流,又独立于计算机系统之外。在实际工作中,为了有效采集、转换被审计单位信息系统的数据,有时还要根据需求提出一些特定的审计接口规范。这些审计接口规范一般包括数据下载的范围、数据下载的格式以及数据下载的时间要求等内容。 GB/T 24589《财经信息技术会计核算软件数据接口》GB/T 24589 《财经信息技术会计核算软件数据接口》标准规定了会计核算软件接口的数据格式要求,包括会计核算数据元素、数据接口输出文件的内容和格式的要求。此标准由中华人民共和国审计署提出,分为4个部分: 第1部分: 企业;第2部分: 行政事业单位;第3部分: 总预算;第4部分: 商业银行。此标准前两部分由国家标准化管理委员会于2010年6月30日发布,后两部分由国家标准化管理委员会于2011年12月30日发布。是一个会计核算软件数据交换的国家标准。它贯穿会计核算软件与其他信息系统之间数据交换的全过程,克服了数据交换的障碍,提高了会计数据的综合利用率。 2. 实现方式 审计接口的实现方式一般有以下3种。 第1种: 被审计单位信息系统与审计应用系统之间采用数据库连接方式,通过计算机网络直接相连。 第2种: 被审计单位信息系统与审计应用系统之间采用数据交换文件传输数据。 第3种: 被审计单位信息系统与审计应用系统之间通过数据采集工作站和数据服务器交换数据。 (1) 数据库连接采集 这种类型的接口是通过计算机网络直接连接被审计单位信息系统的审计接口,它根据审计要求,在被审计信息系统的数据库中读取规定时间段、规定范围内的审计数据。为保证被审计信息系统的正常运行,审计系统只具有通过审计接口读取数据的权限,而没有增加、删除和修改数据的权限。这种方式的示意图见图31。 图31数据库连接采集示意图 数据库连接采集的复杂程度视不同情况而定。如果被审计信息系统采用桌面数据库系统,如Access、DBF文件系列,审计信息系统可采用ODBC、OLE DB等数据库连接件直接访问。审计信息系统的工作主要是规定读取数据的范围和时间段,相对较为方便。如果被审计信息系统采用Oracle、Microsoft SQL Server等大型数据库系统,审计信息系统也可采用ODBC、OLE DB或其他专用数据库连接件(如Oracle SQL*Net等)通过计算机网络与这些数据库系统建立起客户端访问连接。 采用数据库连接的方式实现审计接口,其中有一些必要的参数设置往往需要一定的计算机专业技术知识,并且需要被审计单位在技术上给予密切配合。同时这种方式也增大了被审计单位业务系统的负担,有时甚至会影响被审计单位业务系统的响应速度。基于以上原因,在审计实践中采用数据库连接方式实现电子数据的采集要非常谨慎。 (2) 数据交换文件采集 审计和被审计双方首先要约定通过数据交换文件传输的数据内容、格式和规范(接口标准),然后被审计单位按约定将信息系统数据库中的电子数据导出为所需的数据交换文件格式。数据交换文件一般采用文本文件,Microsoft SQL Server的数据文件、备份文件,Oracle系统的备份文件(对于少量的数据,也可采用Access数据库文件或Excel电子表格文件或DBF文件)。 当数据交换文件为文本文件、Excel电子表格文件、Access数据库文件、DBF文件时,审计人员可以通过ODBC、OLE DB等数据库连接件采集;当数据交换文件为Microsoft SQL Server的数据文件时,可以使用Microsoft SQL Server的数据库附加功能实现数据的采集;当数据交换文件为Microsoft SQL Server或Oracle数据库的备份文件时,可以在审计人员的信息系统中采用相应版本的Microsoft SQL Server或Oracle数据库管理系统的数据库备份文件恢复功能完成电子数据的采集。 通常,当被审计单位的信息系统采用大型数据库系统时,一般采用这种审计接口方式实现对电子数据的采集。示意图见图32。 图32数据交换文件采集示意图 (3) 数据采集工作站采集 这种审计接口是联网审计推荐采用的方式。为了降低审计风险,同时兼顾整个联网审计系统的安全,在直接远程数据采集中常采用中间工作站的方式将审计系统与被审计生产系统进行隔离。中间工作站将需要采集的数据首先从被审计单位的系统中提取到中间数据库中,审计端的采集系统再从中间数据库中将所需的数据采集到审计服务器中,从而实现审计端与被审计单位生产系统的隔离,具有较高的安全性。示意图见图33。 图33数据采集工作站采集示意图 3. 控制措施 审计接口把审计数据从被审计单位信息系统传输到审计系统,必须保证经过一系列的传输后,审计系统得到的数据与被审计单位信息系统中的原始数据是一致的,没有发生变异,这是审计接口的一个根本性要求。 接口的控制措施包括两种类型的控制: 一是被审计单位信息系统和审计信息系统之间信息传输的及时性、准确性和完整性;二是数据转换过程中数据的准确性和完整性。接口控制可以手工执行,也可以通过预先设定条件触发或采用事件驱动实现自动执行。一个接口传输一个业务数据对象,并且是单向的。 为了实现接口的控制,必须采用一定的方法和技术。下面是一些常用的方法。 (1) 数据选择与时效控制。通过设置一个具体的时间点作为取舍点,以保证数据提取的周期适当,以确保传输的数据都是规定时间段内新近发生的数据,而不是已经采集过的数据。 (2) 数据验证。验证是保障数据完整性的重要手段。验证通过比对审计数据采集的源数据和采集到审计信息系统中的目标数据的一致性,判断是否实现了对电子数据的“应采尽采”。详细情况可参看5.4节“数据验证”。 (3) 差错控制与数据校验。尽管大多数通信环境都能够提供透明传输的功能,但是传输中的差错仍然无法避免。因此审计接口的差错控制与数据校验功能不可忽略。差错控制用于发现接口错误,拒绝、隔离并及时纠正错误,这对于保障接口的准确性和完整性非常重要。 此外,对专用审计接口的实现,需要研究审计接口的开发和应用策略。 专用审计接口的开发需要被审计单位和审计单位双方共同参与,被审计单位向审计单位介绍被审计单位信息系统中数据库的结构和内容;审计单位根据审计需求确定需要提取的审计数据的范围。在商定提取数据的格式和规范后,确定审计接口的实现形式,然后交由双方技术人员实现。一般由各自技术人员实现本方面的接口部分,再进行集成、联调和测试,最后对审计接口开发工作进行评审。被审计单位和审计单位共同对审计接口的准确性和完整性负责。 审计接口开发完成后,需要进行规范化管理,不能随意更改。如果由于被审计单位信息系统发生变化,或审计部门的审计需求而需要调整审计接口,在双方达成一致意见后,才能进行修改,并对修改后的审计接口再次做出评审和认定。 [MZ(3]3.1.2据库访问技术[MZ)] 随着数据库产品和技术的发展,数据库访问技术也先后经历了ODBC、DAO、RDO、UDA、OLE DB、ADO和ADO.NET等发展阶段。 1. ODBC ODBC是Open Database Connectivity的简称,即开放数据库互连。 关系型数据库产生后很快就成为数据库系统的主流产品,由于每个DBMS厂商都有自己的一套标准,人们很早就产生了标准化的想法,于是产生了SQL,由于其语法规范逐渐为人所接受,成为关系数据库上的主导语言。最初,各数据库厂商为了解决互连的问题,往往提供嵌入式SQL API,用户在客户机端需要访问DBMS时,往往要在程序中嵌入SQL语句进行预编译。由于不同厂商在数据格式、数据操作、具体实现甚至语法方面都具有不同程度的差异,所以彼此不能兼容。 长期以来,这种API的非规范情况令用户和关系数据库厂商都不能满意。20世纪80年代后期,Oracle、Sybase、Lotus、Ingres、Informix、HP、DEC等一些著名的厂商结成了SQL Access Group(SQL数据访问集团,SAG),提出了SQL API的规范核心: 调用级接口(Call Level Interface,CLI)。 1989年,Microsoft、Lotus、Sybase和DEC四家公司联合提出一个称为SQL互连(SQL Connectivity)的访问接口规范,定义了一批访问数据库的函数。1990年,SAG将SQL互连作为CLI规范的基础,并于1992年发布了CLI的初步规范。这个规范得到美国国家标准局(ANSI)和ISO的认可。同年,Microsoft和Sybase、Digital共同制定了ODBC标准接口,以单一的ODBC API 来存取各种不同的数据库。随后ODBC便获得了许多数据库厂商和第三方的支持而逐渐成为标准的数据存取技术。 虽然ODBC在初期的版本中执行效率不佳,而且功能有限,因此也为人们所贬低,但是,随着Microsoft不断地改善ODBC,使ODBC的执行效率不断增加,ODBC驱动程序的功能也日渐齐全。到目前,ODBC已经是一个稳定并且执行效率良好的数据存取引擎。Microsoft的产品线一直支持ODBC,目前常用的Win7、Win8、Win10等PC平台操作系统及Windows Server 2012、Windows Server 2016等服务器平台操作系统都支持ODBC。 2. DAO DAO是Data Access Objects的简称,即数据访问对象。 1993年Microsoft为了让程序员能够存取Access数据库,使用OLE Automation技术封装了Jet Engine。这些使用Jet Engine存取Access数据库的OLE Automation Object便称为Data Access Object(DAO)。 DAO能够存取DBF数据库文件以及Excel表格文件,并且能够结合ODBC存取关系数据库。但是毕竟DAO主要的设计目的是存取Access数据库,因此DAO在存取Access数据库时非常有效率,但是在存取其他的数据源时却表现一般。目前DAO已经慢慢接近维护的状态。 3. RDO RDO是Remote Data Objects的简称,即远程数据对象。 由于DAO在结合ODBC存取关系数据库时表现得并不好,因此1995年Microsoft同样以OLE Automation技术直接封装ODBC API,让程序员能够存取关系数据库。这种数据存取技术便称为Remote Data Object(RDO)。 Microsoft之所以推出RDO,是因为ODBC API是非常复杂的API,许多程序员无法直接使用ODBC API来开发应用程序,因此Microsoft以简化的RDO对象让程序员能够较为简单地存取数据。此外,通过RDO、VB和脚本语言也能够存取各种关系数据库。不过目前RDO也已经逐渐地被放弃了,因此,RDO只能算是一个过渡性质的数据存取解决方案。 4. UDA UDA是Universal Data Access的简称,即一致数据访问技术。 1997年,Microsoft提出了UDA架构。UDA以COM技术为核心,协助程序员存取企业中各类不同的数据源。它为关系型或非关系型数据访问提供了一致的访问接口。这个一致的接口使得应用程序能够通过它来访问各种各样的数据源。同时,UDA的多层结构和扩展能力使得它具有极强的生命力。UDA包括两层软件接口,即OLE DB和ADO。 5. OLE DB OLD DB是Objects Link Embed DataBase的简称,即对象链接嵌入数据库。 OLE DB将传统的数据库系统划分为多个逻辑组件,这些组件之间相对独立又相互通信。这种组件模型中的各个部分被冠以不同的名称: 数据提供者(Data Provider)。 提供数据存储的软件组件,小到普通的文本文件,到主机上的复杂数据库,或者电子邮件存储,都是数据提供者。 6. ADO ADO是ActiveX Data Objects的简称,即ActiveX数据对象。 ADO是 DAO和RDO的升级版,可通过应用程序存取各种不同的数据源。ADO封装了OLE DB复杂的接口,以极为简单的COM接口存取数据。 7. ADO.NET ADO.NET起源于ADO,它也是一个COM组件库,用于在以往的Microsoft技术中访问数据。之所以使用ADO.NET名称,是因为Microsoft希望表明,这是在.NET编程环境中优先使用的数据访问接口。 以下讨论在审计数据采集实践中使用最广泛的两种数据库访问技术: ODBC和UDA。 3.1.2.1ODBC原理及在数据采集中的应用 ODBC是微软公司制定的数据库系统互连标准。它为客户端应用系统与数据库服务器之间的连接提供了一种开放的、标准的接口,使得不论什么厂商生产的开发工具或数据库管理系统,只要它们支持ODBC,就能实现互连。 ODBC的推出大大方便了开发人员和用户,得到了广泛的支持和应用,目前绝大多数DBMS和开发工具均支持ODBC。审计人员在审计过程中需要采集诸如Oracle、Microsoft SQL Server等大型数据库中的数据时,ODBC是一种可选的方案。 ODBC的数据库访问功能是通过驱动程序实现的。一方面,支持ODBC的各种DBMS都要提供各自的ODBC驱动程序;另一方面,各种不同的ODBC驱动程序都遵循一定的ODBC API规范,这使得应用程序可以使用统一的接口来完成数据的访问和存储,从而可以方便地从不同的数据库中存取数据。 1. ODBC的基本思想与特点 ODBC的基本思想是为用户提供简单、标准、透明的数据库连接的公共编程接口,开发厂商根据ODBC的标准去实现底层的驱动程序,这个驱动对用户是透明的,并允许根据不同的DBMS采用不同的技术加以优化实现,这有利于不断吸收新的技术而日趋完善。 这同时也就是数据库驱动的思想,它与Windows中打印驱动的思想很相似。在Windows中,用户安装不同的打印驱动程序,使用同样一条打印语句或操作,就可很容易地实现在不同打印机上打印输出,而不需要了解内部的具体原理。ODBC出现以后,用户安装不同的DBMS驱动即可用同样的SQL语句实现在不同DBMS上进行同样的操作,而且无须预编译。ODBC带来了数据库连接方式的变革。在传统方式中,开发人员要熟悉多个DBMS及其API,DBMS端一旦出现变动,往往导致用户端系统重新编建或者源代码的修改,这给开发和维护工作带来了很大困难。在ODBC方式中,不管底层网络环境如何,也无论采用何种DBMS,用户在程序中都使用同一套标准代码,无须逐个了解各DBMS及其API的特点,源程序不因底层的变化而重新编建或修改,从而减轻了开发维护的工作量,缩短了开发周期。 概括起来,ODBC具有以下灵活的特点: (1) 使用户程序有很高的互操作性,相同的目标代码适用于不同的DBMS。 (2) 由于ODBC的开放性,它为程序集成提供了便利,为C/S架构提供了技术支持。 (3) 由于应用与底层网络环境和DBMS分开,简化了开发维护上的困难。 2. ODBC的体系结构 ODBC是依靠分层结构实现的,如此可保证其标准性和开放性。ODBC的体系结构如图34所示,共分为四层: 应用程序、驱动程序管理器、驱动程序和数据源。 图34ODBC体系结构 (1) 应用程序层(Application) 使用ODBC接口的应用程序可执行以下任务: ① 请求与数据源的连接和会话(SQL Connect); ② 向数据源发送SQL请求(SQL ExecDirct或SQL Execute); ③ 对SQL请求的结果定义存储区和数据格式; ④ 请求结果; ⑤ 处理错误; ⑥ 如果需要,把结果返回给用户; ⑦ 对事务进行控制,请求执行或回退操作(SQL Transact); ⑧ 终止对数据源的连接(SQL Disconnect)。 (2) 驱动程序管理器(Driver Manager) 由微软提供的驱动程序管理器是带有输入库的动态连接库ODBC.DLL,其主要目的是装入驱动程序,此外还执行以下工作: ① 处理几个ODBC初始化调用; ② 为每一个驱动程序提供ODBC函数入口点; ③ 为ODBC调用提供参数和次序验证。 (3) 驱动程序(Driver) 驱动程序是实现ODBC函数和数据源交互的DLL,当应用程序调用SQL Connect或者SQL Driver Connect函数时,驱动程序管理器装入相应的驱动程序,它对来自应用程序的ODBC函数调用进行应答,按照其要求执行以下任务: ① 建立与数据源的连接; ② 向数据源提交请求; ③ 在应用程序需求时,转换数据格式; ④ 返回结果给应用程序; ⑤ 将运行错误格式化为标准代码返回; ⑥ 在需要时说明和处理光标。 (4) 数据源(Data Source) 由用户想要存取的数据及与其相关的操作系统、DBMS和网络环境组成。 3. ODBC的工作原理 ODBC从本质上就是一组数据访问应用程序接口(Application Program Interface,API),它可以使Windows应用程序访问大多数流行的DBMS。ODBC API函数可以完成建立连接、传输并执行查询、返回查询结果、检查网络连接状态、接收有关驱动程序自身的错误消息或信息等工作。 从使用者的角度看,ODBC负责根据用户的数据存取要求,选择合适的驱动程序,针对特定的目标数据源完成用户的需求。因此,在使用ODBC访问数据库的时候,要告诉它数据源在哪里,驱动程序是什么,驱动程序访问数据库的具体配置参数如何等信息。不同的厂商针对不同的数据库管理系统开发出了不同的ODBC驱动程序,因此各种驱动程序的配置界面都可能各不相同。 在使用ODBC管理器创建ODBC数据源的时候,必须选择ODBC驱动程序,并且配置相应的参数。在应用程序中使用ODBC存取数据库的时候,应用程序将访问请求交由驱动程序管理器进行处理。驱动程序管理器根据数据源配置中的信息加载合适的驱动程序连接数据库,并根据应用程序的访问请求查询或存储数据,同时将执行结果反馈给调用它的应用程序。 4. ODBC驱动程序 驱动程序是一个动态链接库(Dynamic Link Library,DLL),用来完成ODBC函数调用并与数据源进行对话。根据应用程序的要求,驱动程序完成以下任务: 连接及断开数据源、检查函数错误、初始化事务、把ODBC SQL修改成特定DBMS的SQL并把转换后的SQL语句提交给指定的数据源、把数据发送到数据源,或从数据源检索数据,包括根据应用程序的指定来转换数据类型、把特定DBMS的错误映射到ODBC SQL STATE。 ODBC驱动程序分为两种类型: 基于文件的驱动程序和基于DBMS的驱动程序。 基于文件的ODBC驱动程序既处理ODBC调用也处理SQL语句,在这种情况下它既是驱动程序,又是数据源。一个典型的基于文件的ODBC驱动程序是dBase驱动程序。基于文件的ODBC驱动程序依据其访问数据的存取方式还可以分为两种: 一种是直接存取数据;另一种则采用C/S模式。 基于DBMS的驱动程序只处理ODBC调用,而把SQL语句的处理交给数据库引擎,并通过单独的引擎访问物理数据。这种驱动程序既可以和数据源存储在同一台机器上,也可以分别存储在网络中的不同机器上,甚至可以通过网关访问。 使用ODBC驱动程序的时候要注意两个问题: 由于不同的厂商可以针对不同的数据库管理系统开发出不同的ODBC驱动程序,因此各种驱动程序的配置界面可能各不相同,在配置ODBC数据源的时候应注意这些差别。另外,在访问Oracle等数据库系统时,除Windows系统自带的驱动程序外,还需安装特定的访问程序,这些访问程序一般被称为“客户端软件”或“运行时组件”。 5. ODBC数据源 数据源用于标识数据的来源。要描述一个数据的来源,就需要说清楚数据是在哪种操作系统上的哪种类型的数据库中存放的,系统的网络环境如何等。因此,概括地说,数据源是DBMS、操作系统和网络平台的一个组合体。 ODBC的数据源可以分为两类: 机器数据源和文件数据源。虽然它们两者都包含数据来源的相同信息,但包含这个信息的方法却不同。由于这些不同,使用它们的方法也有所差异。 机器数据源可以分为用户数据源和系统数据源。用户数据源会把相应的配置信息保存在Windows的注册表中,但是只允许创建该DSN的登录用户使用。系统数据源同样将有关的配置信息保存在系统注册表中,但是与用户数据源不同的是系统数据源允许所有登录服务器的用户使用。 文件数据源把具体的配置信息保存在硬盘上的某个具体文件中。文件数据应当允许所有登录服务器的用户使用,而且即使在没有任何用户登录的情况下,也可以提供对数据库数据源的访问支持。此外,因为文件数据源被保存在硬盘文件里,所以可以方便地复制到其他机器中(文件可以在网络范围内共享)。这样,用户不对系统注册表进行任何改动就可直接使用在其他机器上创建的数据源。 从私密性角度评价,用户数据源优于系统数据源,系统数据源优于文件数据源。从兼容性角度评价,文件数据源优于系统数据源,系统数据源优于用户数据源。 6. ODBC的使用 下面从审计数据采集的角度来介绍ODBC的使用。 (1) 创建ODBC数据源 创建ODBC数据源的步骤如下。 ① 在Windows 系统中打开ODBC数据源管理器(控制面板→管理工具→数据源(ODBC)),如图35所示。 “用户DSN”选项卡用于创建用户数据源,通过该选项卡创建的数据源对计算机来说是本地的,并且只能被创建它的用户使用。 “系统DSN”选项卡用于创建系统数据源,通过该选项卡创建的数据源只在本地计算机中,但不专属于用户,此系统或其他具有权限的用户可通过系统DSN来使用该数据源的设置。 “文件DSN”选项卡用于创建文件数据源,这些基于文件的数据源可以在安装同样驱动程序的所有用户之间共享,因此它们都具有对数据库的访问权。这些数据源不必专属于某一用户或本地计算机。 “驱动程序”选项卡用于显示已安装的ODBC驱动程序的相关信息。ODBC驱动程序列表会显示计算机中已经安装的驱动程序的列表。 图35ODBC数据源管理器对话框 “跟踪”选项卡可指定ODBC驱动程序管理器跟踪调用ODBC函数的方式。驱动程序管理器可使用的跟踪方式有: 连续地跟踪调用、只跟踪唯一的连接、执行动态跟踪或由自定义的跟踪DLL来执行跟踪。 “连接池”选项卡可以修改连接重试等待时间以及当使用连接池时所选择的驱动程序的超时时间,也可以启用和禁用记录统计信息数量的“性能监视”。 “关于”选项卡用于显示ODBC核心组件的相关信息,包括Unicode游标库、本地化资源DLL、管理器、控制面板启动、驱动程序管理器、游标库等文件。 ② 创建用户数据源。在如图35所示的对话框中单击“用户DSN”选项卡。 其中,“用户数据源”列表框用于显示所有已创建的“用户DSN”的列表,包含每一个DSN的名称以及与DSN相关联的驱动程序。双击一个数据源的名称,便会显示与该数据源相关联的驱动程序的数据源设置对话框。 单击“配置”按钮将显示与当前选中的某一数据源相关联的驱动程序的数据源设置对话框。“配置”按钮可用来更改当前用户数据源的配置。在单击“配置”之前,必须从列表中选取数据源。 单击“添加”按钮将添加新的用户数据源。单击“添加”时,显示“创建新数据源”对话框,其中包含驱动程序列表。选定一个合适的驱动程序后单击“完成”按钮,就会出现该驱动程序的数据源设置对话框。 单击“删除”按钮将删除当前选定的用户数据源。在单击“删除”前,必须选定想要从列表中删除的用户数据源。 单击“确定”按钮将关闭“ODBC数据源管理器”对话框。不需单击“确定”按钮来接受“用户数据源”列表中的更改,只要单击特定的数据源设置对话框中的“确定”按钮,便可保存修改后的配置。 单击“取消”按钮将关闭“ODBC数据源管理器”对话框。如果单击“取消”按钮,不会取消对“用户数据源”列表的更改。 单击“帮助”按钮将显示帮助内容。 ③ 创建系统数据源。在如图36所示的对话框中单击“系统DSN”选项卡。 创建系统数据源的方法与创建用户数据源的方法类似,两种数据源的区别在于用户数据源只能由创建该数据源的用户使用,而系统数据源可以被任何具有使用该数据源权限的用户所使用。 图36在ODBC管理器中创建系统数据源 ④ 创建文件数据源。创建文件数据源的对话框如图37所示。 图37在ODBC管理器中创建文件数据源 在文件数据源列表框中显示的是全部文件DSN及相应的子目录,这些子目录包含在“搜索范围”下拉列表框所显示的目录中。双击列表框中的一个文件名,就可显示与该文件名相关联的驱动程序的数据源设置对话框。 “添加”按钮用于添加新的文件数据源。单击此按钮,则会出现包含驱动程序列表的“创建新数据源”对话框。选择合适的驱动程序后单击“下一步”按钮,便可按提示一步步完成参数的设置。 “删除”按钮用于删除当前选定的文件数据源。 “配置”按钮用于显示与当前选定的数据源相关联的驱动程序的数据源设置对话框,用于更改当前选定的文件数据源的配置。 “设置目录”按钮用于将所显示的目录设置为执行ODBC管理程序时默认显示的目录。开始运行ODBC管理器时,系统信息包含最初显示的默认目录,可以用“设置目录”按钮来更改默认目录。 “搜索范围”按钮显示当前目录,其子目录与文件DSN显示在窗口下方。单击“搜索范围”下拉列表框右侧的“向下”箭头就会显示整个目录的路径。 “向上”图标按钮把“搜索范围”框显示的目录变成当前目录的上一层目录。 其余按钮与创建用户数据源对话框中的按钮功能相同。 (2) 创建Oracle数据库系统数据源举例 ① 在Windows 系统中双击ODBC数据源图标,打开ODBC数据源管理器; ② 选择系统数据源选项卡,并单击“添加”按钮,弹出如图38所示的对话框。 图38选择ODBC数据源驱动程序的对话框 ③ 在如图38所示的对话框中选中Microsoft ODBC for Oracle条目后,单击“下一步”按钮,系统显示如图39所示的对话框。 图39创建新数据源对话框1 ④ 单击“浏览”按钮,系统显示如图310所示的对话框,键入文件名称: ybnanjing,单击“保存”按钮,就完成了ODBC数据源的设置。 图310创建新数据源对话框2 (3) 使用ODBC获取数据举例 ① 打开Access2010,建立一个新的数据库。 ② 选择“外部数据”选项卡|“ODBC数据库”,如图311所示。 图311Access 通过ODBC访问Oracle数据库表 ③ 在“获取外部数据-ODBC数据库”对话框中选中“将源数据导入当前数据库的新表中”单选项,如图312所示。 图312获取外部数据-ODBC数据库 ④ 如图312所示,单击“确定”后在如图313所示的对话框中单击“文件数据源”选项卡,在“搜索范围”中选择“ybnanjing.dsn”对话框,如图313所示。 图313选择文件数据源 ⑤ 如图313所示,单击“确定”后,弹出Oracle ODBC驱动连接窗口,如图314所示。 图314Oracle ODBC驱动连接测试窗口 ⑥ 如图314所示,相应地输入Oracle实例的服务名、用户名和密码,单击“OK”按钮后弹出“导入对象”窗口,如图315所示。 图315选中需导出的Oracle实例中的表 ⑦ 如图315所示,单击“确定”按钮,开始将Oracle实例中的表导出到Access数据库中。导出结果如图316所示。 图316Oracle实例中的表成功导入Access数据库 3.1.2.2UDA原理及在数据采集中的应用 Microsoft推出的UDA为关系型或非关系型数据访问提供了一致的接口。这个一致的接口使得应用程序可以访问各种各样的数据,而不管数据驻留在何处。在统一数据访问接口的同时,UDA的多层结构使数据使用者有了更多的选择机会,而它强大的扩展能力也给数据提供者留下了更多的扩展空间,这种开放的软件结构具有极强的生命力。因此,这项技术一经问世便受到欢迎,成为继ODBC之后的又一次数据访问技术的飞跃。 UDA包括两层软件接口,分别是ADO和OLE DB,它们分别对应于不同层次的应用开发。 OLE DB是系统级的编程接口,它定义了一组COM(Component Object Model,组件对象模型)接口,在这组接口中封装了各种数据系统的访问操作,为数据使用者和数据提供者建立了标准。OLE DB还提供了一组标准的服务组件,用于提供查询、缓存、数据更新、事务处理等操作。因此,数据提供者只需实现一些简单的数据操作,使用者就可以获得全部的数据控制能力。 OLE DB 是新的底层接口,它介绍了一种“通用的”数据访问范例。也就是说,OLE DB并不局限于ISAM、Jet,甚至关系数据源,它能够处理任何类型的数据,而不考虑它们的格式和存储方法。在实际应用中,这种多样性意味着可以访问驻留在Excel电子表格、文本文件甚至邮件服务器(如Microsoft Exchange)中的数据。 ADO是应用层的编程接口,它以OLE DB为基础并对其进行了封装。它通过OLE DB提供的COM接口访问数据,适合各种C/S应用系统和基于Web的应用。ADO是一套用自动化技术建立起来的对象层次结构,它比其他的一些对象模型(如DAO、RDO等)具有更好的灵活性,使用起来更为方便,并且访问数据的效率也更高。UDA接口的层次模型如图317所示。 图317UDA接口的层次模型 从图317中可以看出,应用程序既可以通过ADO访问数据也可以跨过ADO而直接通过OLE DB访问数据,ADO则必须通过OLE DB访问底层数据。而且,OLE DB分成两部分: 一部分由数据提供者实现,包括一些基本功能,如数据获取、修改、添加数据项等;另一部分如游标功能、分布式查询等一些高级服务则由系统提供。这样的层次结构既为数据使用者提供了多种可选方案,又使得数据提供者简化了服务功能的实现手段,充分体现了OLE DB 两层结构的优势。 ADO对象模型定义了一组可编程的自动化对象,可用于Visual Basic、Visual C++、Java 以及其他各种支持自动化特性的脚本语言。ADO最早作为访问数据库的接口被用于Microsoft Internet Information Server,与一般的数据库接口相比,ADO可以更好地适用于网络环境,它通过优化技术来尽可能地降低网络流量。ADO的另一个特性是使用简单,这不仅因为它是一个面向高级用户的数据库接口,更因为它使用了一组简化的接口用以处理各种数据源。 由图317可知,ADO 实际上是OLE DB的应用层接口,这种结构不再局限于特定的数据源,为UDA接口提供了很好的扩展性。因此,ADO可以处理各种OLE DB 支持的数据源。图318是ADO的对象模型图。 图318ADO对象模型 在ADO模型中,主体对象只有3个: Connection、Command和Recordset;集合对象有4个: Errors、Properties、Parameters 和Fields,分别对应Error、Property、Parameter和Field对象。整个ADO对象模型由这些对象组成。 一个典型的ADO应用是这样的: 首先使用Connection对象与数据源建立连接,然后在Command对象中给出对数据库操作的命令,最后在Recordset对象中对结果数据集进行浏览和维护。Command对象所使用的命令语言与底层的OLE DB数据源有关,不同的数据源可能使用不同的命令语言,但SQL通常作为对关系型数据库的命令语言。 1998年起,Web应用程序的兴起大大改变了许多应用程序的设计方式,传统的数据库连线保存设计法无法适用于此类应用程序,这让ADO应用程序遇到了很大的瓶颈,也让微软开始思考让资料集(Resultset,在ADO中称为Recordset)能够离线化的能力,以及能在用户端创建一个小型数据库的概念,这个概念就是ADO.NET中离线型资料模型(Disconnected Data Model)的基础。而从ADO的使用情形来看,数据库连线以及资源耗用的情形较严重(像是 Serverside cursor 或是 Recordset.Open 会保持连线状态),在ADO.NET中也改良了这些物件,构成了能够减少数据库连线和资源使用量的功能。XML的使用也是这个版本的重要发展之一。2000年,Microsoft的.NET计划开始成形,微软的许多产品都冠上.NET的标签,ADO也不例外,改名为ADO.NET并包装到.NET Framework类别库中,成为.NET平台中唯一的资料存取元件。 如图319所示,ADO.NET的五大对象分别是: Connection(连接数据库)、Command(执行TSQL语句)、DataAdapter(用户填充DataSet,断开模式)、DataReader(读取数据库,一种只读模式,只向前的)、DataSet(数据集,类比电脑的内存)。 图319ADO.NET对象模型 (1) Connection Connection对象的主要作用是开启程序和数据库之间的连接。没有利用连接对象将数据库打开,是无法从数据库中取得数据的。它在ADO.NET的最底层,既可以自己产生这个对象,也可以由其他的对象自动产生。 (2) Command Command对象主要用来对数据库发出一些指令,如可以对数据库下达查询、新增、修改、删除数据等指令,以及呼叫存在数据库中的预存程序等。这个对象是架构在Connection对象上的,也就是Command对象是透过连接到数据源的。 (3) DataAdapter DataAdapter即数据适配器,从数据库中检索数据,再填充到本地数据集中。同时,可以利用DataAdapter,再将数据反向从DataSet中更新回数据库。DataAdapter使用中主要有4个命令对象比较重要,分别是SelectCommand、InsertCommand、UpdateCommand、DeleteCommand。 (4) DataSet DataSet这个对象可以被视为一个暂存区(Cache),可以把从数据库中查询到的数据保留起来,甚至可以将整个数据库显示出来。DataSet是ADO.NET的核心,相当于本地数据库,它和远程数据库连接的桥梁就是.NET数据提供程序。它由多个表构成,每个表都是一个DataTable对象。DataSet下面有两个重要的集合,一个是DataTables,一个是DataRelations。DataTables里面放置的都是DataTable对象。 (5) DataReader 当只需要按一定的顺序读取数据而不需要其他操作时,可以使用DataReader对象。DataReader对象是一个只向前的数据流,用于从数据源中检索只读数据集,并且必须有连接时才可以用。因为DataReader在读取数据的时候限制了每次只读取一笔,而且只能只读,所以使用起来不但节省资源而且效率很好。 [MZ(2]3.2电子数据分析技术原理[MZ)] 上一节介绍的是电子数据采集的技术原理。本节重点介绍电子数据分析的技术原理。 在审计建模分析的过程中,大量的审计线索和有效的审计信息都需通过数据分析获得。审计中“查账”的过程就是利用各种条件进行数据查询的过程。因此,需要使用一些具有查询、分析功能的审计软件或实用工具来辅助完成这些工作。目前被审计单位的数据基本都是存储在关系数据库系统中的,这些工具一般都通过结构化查询语言(Structured Query Language,SQL)实现对数据库的操作。 SQL是关系数据库的标准语言,也是查询分析的主要实现工具。SQL具有灵活方便、易学易用的特点。在一些无法使用审计软件的场合,SQL恰恰发挥了不可替代的作用。学习SQL有利于加深审计人员对数据库基本概念、基本原理的理解,从而增强解决实际问题的能力。 [MZ(3]3.2.1SQL的起源[MZ)] 1970年,美国IBM研究中心的E.F.Codd连续发表多篇论文,提出关系模型。1972年,IBM公司开始研制实验型关系数据库管理系统SYSTEM R,为其配制的查询语言称为SQUARE(Specifying Queries As Relational Expression)语言,在该语言中使用了较多的数学符号。1974年,同一实验室的D.D.Chamberlin和R.F.Boyce把SQUARE修改为SEQUEL(Structured English QUEry Language)语言,并在1976年11月的IBM Journal of R&D上公布新版本的SQL(SEQUEL/2)。1980年改名为SQL。这两个语言在本质上是相同的,但后者去掉了数学符号,采用英语单词表示和结构式的语法规则,看起来很像英语句子,用户比较欢迎这种形式的语言。 1979年Oracle公司首先提供商用的SQL,IBM公司在DB2和SQL/DS数据库系统中也实现了SQL。 在认识到关系模型的诸多优越性后,越来越多的厂商开始研制关系数据库管理系统,这些数据库管理系统的操纵语言也以SQL参照。 1986年10月,美国ANSI采用SQL作为关系数据库管理系统的标准语言(ANSI X3.1351986)。1987年6月国际标准化组织(ISO)采纳其为国际标准。我们称其为“SQL86”标准。1989年10月,ANSI又颁布了增强完整性特征的“SQL89”标准。1990年,在我国颁布的《信息处理系统数据库语言SQL》中,也将SQL定为中国国家标准。随后,ISO对该标准进行了大量的修改和扩充,在1992年8月发布了标准化文件“ISO/IEC 9075: 1992《数据库语言SQL》”,我们称其为SQL92或SQL2标准。1999年ISO又颁布了“ISO/IEC 9075: 1999《数据库语言SQL》”标准化文件,我们称其为SQL99或SQL3标准。在此之后又陆续发布了SQL2003、SQL2006、SQL2008、SQL2011标准。目前的SQL标准已经支持XML。 [MZ(3]3.2.2SQL的特点[MZ)] 自SQL成为关系数据库的国际标准语言之后,各数据库厂家纷纷推出各自支持的SQL软件。许多厂家还根据自己的需要,对SQL进行了一些适当的扩充,形成了不同的版本。例如Oracle的SQL称为PL/SQL(Procedural Language/SQL),Microsoft SQL Server的SQL称为TSQL(TransactionSQL)。他们都把SQL作为共同的数据存取语言和标准接口,这就使不同数据库系统之间的互操作有了共同的基础。 SQL之所以能够为用户和业界所接受,成为国际标准,因为它是一个综合的、通用的、功能强大,同时又简单易学的语言。它集数据操纵(Data Manipulation)、数据定义(Data Definition)和数据控制(Data Control)功能于一体,语言风格统一。它可以独立完成从关系模式定义、数据录入、查询、更新、维护到数据库重构、数据库安全性控制等一系列操作,为数据库应用系统开发提供了良好的环境。 SQL同时适用于交互式环境和嵌入式环境。大多数的数据库管理系统都提供交互式的SQL查询工具,很多审计软件也提供交互式的SQL查询器。交互式的SQL具有交互性好的特点,用户输入的语句可以立刻执行,返回结果,但是其功能也会受到一定的限制。当数据处理的需求超出SQL提供的功能,或者要对数据集合的每一条记录进行遍历处理时,就需要在编程语言中使用SQL了,这时称为嵌入式环境。 嵌入式SQL由特殊的SQL预编译器进行处理,预编译器将这些SQL转变成宿主语言能够理解的形式,再由宿主语言编译器进行编译。应用程序中的变量,也就是“宿主变量”,可以在嵌入式SQL中任何可以使用常量的地方使用。这样,在编程语言中就可以定制SQL,以满足各种复杂应用的需要。也可以将查询返回结果直接赋值给程序变量,实现查询结果的共享。 返回单条记录的查询通过SELECT语句处理。SELECT语句决定了如何查询,以及查询返回信息如何传递到宿主变量中去。返回多条记录的查询通过游标处理,通过游标可以跟踪查询返回记录集中所有的记录。在游标打开的情况下,可以对当前选定的行进行删除和修改。 大多数情况下,审计人员是在交互式环境下使用SQL的。为了提高使用SQL进行数据查询分析的效率,许多工具和软件都提供一个图形化的SQL查询生成器。用户可以通过图形化操作,简单、快速、高效地构造出所需的查询语句。同时,这种方式还可以自动进行语法检查,避免用户输入SQL时产生的许多错误。 在存储过程中使用SQL以及在“现场审计实施系统”的ASL语言中使用SQL,都属于嵌入式SQL应用。 [MZ(3]3.2.3SQL基本语法[MZ)] SQL包含3个部分(又称为子语言),分别是: 数据定义语言(Data Definition Language,DDL)、数据操纵语言(Data Manipulation Language,DML)和数据控制语言(Data Control Language,DCL)。其中数据操纵语言实现数据查询功能和数据更新功能。对计算机数据审计而言,查询语句使用频率最高。各种子语言的基本语法如下。 1. 数据定义 SQL的数据定义功能包括定义表、定义视图和定义索引。下面主要介绍关于基本表的数据定义功能。 (1) 创建基本表 建立数据库最重要的一步就是定义一些基本表,SQL语言使用CREATE TABLE 语句定义基本表,一般格式为: CREATE TABLE<表名>(<列名><数据类型>[列级完整性约束条件] [,<列名><数据类型>[列级完整性约束条件]...] [,表级完整性约束条件]) (2) 修改基本表 数据库中定义的基本表,随着应用环境和应用需求的变化,有时需要修改,包括增加新列、增加新的完整性约束条件、修改原有的列定义或删除已有的完整性约束条件等。SQL语言的ALTER TABLE语句修改基本表,其一般格式为: ALTER TABLE <表名> [ADD <新列名> <数据类型>[完整性约束]] [DROP<完整性约束>] [MODIFY <列名><数据类型>] (3) 删除基本表 当某个基本表不再需要时,可以使用SQL语句DROP TABLE进行删除。其一般格式为: DROP TABLE <表名> 修改基本表或删除基本表时一定要非常谨慎,在数据库系统中对基本表的改动或删除后一般不能够恢复。因此,一定要非常小心,以免误操作导致审计数据的损坏。 2. 数据查询 数据查询通过SELECT语句实现。从英语的角度理解,SELECT语句的结构很直观。如果一个审计人员需要从一个表中选择一组记录,可以非常直观地描述这个过程:“SELECT特定的列FROM一个表WHERE某些列满足一个特定的条件”。 SELECT语句的完整语法结构如下: SELECT [ALL|DISTINCT] <目标表达式1>[,<目标表达式2>]... FROM <表名1> [,表名2]... [WHERE <条件表达式> ] [GROUP BY <列名1>][HAVING <条件表达式>]] [ORDER BY <列名2>[ASC|DESC]] 注:“[ ]”表示可选项目,“<>”表示必选项目,“|”表示多选一。在SELECT语句后面跟“目标表达式”而不是“列”,是因为在构造查询时,可能会利用表达式生成新的列。 在查询语句中,可以实现单表上的查询,也可以实现多表连接查询,还可以实现自联接查询和嵌套查询。在查询的过程中同时可以进行分组和计算(运用5个集合函数)。在结果输出的时候可以选择排序字段与排序方式,可以消除重复记录。查询条件可以灵活设定,既可以采用简单的条件表达式,又可以采用集合、匹配、区间等逻辑表达式。 总之,SQL的查询语句功能十分强大,应用十分灵活方便。在大多数情况下,基本可以满足审计工作中的各种数据查询需要。 3. 数据更新 (1) 向数据表中添加新数据行 向数据表中添加新数据行时,SQL的INSERT通常有两种形式,一是插入一条记录,二是插入子查询的结果。 插入单条记录的语句为: INSERT INTO <表名>[(<列名1>[,<列名2>...])] VALUES (<常量1>[,<常量2>...]) 有时可以利用INSERT语句实现一次将子查询的返回结果全部插入目标表中。这在批量插入数据时效率非常高。其格式为: INSERT INTO <表名>[(<列名1>[,<列名2>...])] SELECT ... 插入子查询时,子查询选择列的类型必须和插入目标表的类型一致,否则查询在执行时出错。 (2) 更新数据表中的数据 更新数据表中的数据可使用UPDATE语句实现,格式如下: UPDATE <表名> SET <列名>=<表达式>[,<列名>=<表达式>]... [WHERE <条件表达式>] (3) 从数据表中删除行 从数据表中删除行可使用DELETE语句实现,格式如下: DELETE * FROM<表名> [WHERE <条件>] 在使用UPDATE语句修改数据或DELETE语句删除数据时,一定要非常小心,不要轻易修改原始数据。最好在执行之前将原始数据备份。 4. 数据控制 数据控制语句能够在一定程度上保证数据库中数据的完整性、安全性,并提供了一定的并发及恢复能力。在一些小型的数据库管理系统(如Microsoft Access)中,其SQL语言集合不包括数据控制功能。 (1) 授权 SQL语言用GRANT语句向用户授予操作权限。GRANT语句在数据库安全系统中登记,允许数据库用户对数据执行特定的SQL语言。GRANT 语句的一般格式为: GRANT <权限>[,<权限>]... [ON <对象类型> <对象名>] TO <用户>[,<用户>]... [WITH GRANT OPTION] (2) 收回权限 与GRANT语句相对,授予的权限可以由数据库管理员(DBA)或其他授权者用REVOKE语句收回。REVOKE语句的一般格式为: REVOKE<权限>[,<权限>] [ON <对象类型> <对象名>] FROM <用户>[,<用户>]... [MZ(2]3.3拓展阅读[MZ)] 本章拓展阅读包括两个部分: 一是关于财经信息技术会计核算软件数据接口的标准的介绍;二是常用的TSQL函数。 [MZ(2]3.3.1《财经信息技术会计核算软件数据接口》国家标准[MZ)] 1. 财务数据接口的国家标准 审计署1999年就开展了“会计核算软件数据接口”方面的研究探索,并于2002年2月开始着手编写了《会计核算软件数据接口》国家标准。2004年9月20日,《信息技术会计核算软件数据接口》国家标准由国家标准化管理委员会(以下简称国家标准委)正式批准发布,并于2005年1月1日开始实施,标准号为GB/T 195812004。该标准主要是针对国内所有正在使用的会计核算软件规定统一的数据输出内容和格式。 2006年,财政部发布了新的企业会计准则,2007年1月1日在全国范围内开始实施。《信息技术会计核算软件数据接口》已经不能适应新的会计制度,迫切需要修订。为此,审计署2007年年底启动了与新的会计制度相配套的会计核算软件接口国家标准的修订工作。2010年6月24日,经过履行法定程序,国家标准委批准发布了企业和行政事业单位会计核算软件数据接口标准,标准名称和标准号为: 《财经信息技术会计核算软件数据接口第1部分: 企业》(GB/T 24589.12010)、《财经信息技术会计核算软件数据接口第2部分: 行政事业单位》(GB/T 24589.22010)。两个标准于2010年6月30日发布,12月1日在全国范围内实施。 GB/T 24589.22010系列国家标准颁布后,越来越多的财务软件通过了该标准的检测认证,提供了输出符合国家标准的数据文件的接口功能。截至2010年年底,共有8家会计软件企业的19个产品向标准化检测机构提出了申请,其中的17个认证申请通过了检测。 2011年4月27日,北京召开了《财经信息技术会计核算软件数据接口》(GB/T 245892010)国家标准实施推进成果新闻发布会。会议通报《财经信息技术会计核算软件数据接口》系列国家标准的实施推进成果,并向首批通过GB/T 24589认证的用友、金蝶、浪潮、金算盘、新中大、甲骨文(中国)、思爱普(SAP北京)7家企业的17个产品颁发证书。表31为认证通过产品目录。 《财经信息技术会计核算软件数据接口第3部分: 总预算》(GB/T 24589.32011)的适用范围是财政总预算会计、基金项目,其中包含了救灾、救济及捐款项的会计核算数据元素、数据接口输出文件的内容和格式的要求。 《财经信息技术会计核算软件数据接口第4部分: 商业银行》(GB/T 24589.42011)适用于商业银行所使用的会计核算软件的设计、研制、管理、购销和应用的会计核算数据元素、数据接口输出文件的内容和格式的要求。 表31首批通过GB/T 24589认证目录表 序号产 品 名 称申 请 公 司通过认证标准 1用友NC V5用友软件股份有限公司GB/T 24589.12010 2用友U8 V8.90用友软件股份有限公司GB/T 24589.12010 3用友U9 V2.1用友软件股份有限公司GB/T 24589.12010 4畅捷通T系列企业管理软件 V5畅捷通软件有限公司GB/T 24589.12010 5Oracle JD Edwards EnterpriseOne V9甲骨文(中国)软件系统有限公司GB/T 24589.12010 6Oracle 电子商务套件 R12.1.3甲骨文(中国)软件系统有限公司GB/T 24589.12010GB/T 24589.22010 7PeopleSoft Enterprise 管理软件 9.1甲骨文(中国)软件系统有限公司GB/T 24589.12010GB/T 24589.22010 8用友A++政府财务管理信息系统 V5.2北京用友政务软件有限公司GB/T 24589.22010 9用友R9i财务管理软件 V9.72北京用友政务软件有限公司GB/T 24589.22010 10浪潮GS管理软件 V5.2浪潮集团山东通用软件有限公司GB/T 24589.12010 11浪潮PS管理软件 V10.1浪潮集团山东通用软件有限公司GB/T 24589.12010 12SAP 商务套件 7.0思爱普(北京)软件系统有限公司GB/T 24589.12010 13金蝶EAS 7.0金蝶软件(中国)有限公司GB/T 24589.12010 14K/3 WISE创新管理平台V12.1金蝶软件(中国)有限公司GB/T 24589.12010 15KIS专业版 V11.0深圳市金蝶友商电子商务服务有限公司GB/T 24589.12010 16金算盘eERP V6.5重庆金算盘软件有限公司GB/T 24589.12010GB/T 24589.22010 17新中大URP软件i6系统11.0杭州新中大软件股份有限公司GB/T 24589.1201 总预算和商业银行的这两部分的会计核算软件数据接口由国家标准化管理委员会于2011年12月30日发布,2012年6月1日正式实施。 2. 通过AO2011采集国标财务数据 《现场审计实施系统》(以下简称AO)提供了对符合国家标准数据的采集转换功能,使得审计人员能够完整、准确、方便、快捷地采集转换被审计单位的会计核算数据。 目前,AO2011提供了对三个国家标准的采集转换功能,分别是GB/T 195812004、GB/T 24589.12010、GB/T 24589.22010。 审计人员根据实际情况单击【采集转换】|【财务数据】|【符合国家标准数据】|【采集数据】,如图320所示。然后,选择某一模板,单击【选择数据源】文本框的【选择】,如图321和图322所示。 图320国标数据采集1 图321国标数据采集2 图322国标数据采集3 需要注意的是通过GB/T 195812004检测软件的财务软件,输出的符合国家标准的数据文件有xml和txt两种格式。xml格式默认输出1个文件,文件名为会计核算软件数据.xml;txt格式默认输出10个文件,分别为: 1. 格式说明文件(GSSM.TXT)。 2. 电子财簿文件(DZZB.TXT)。 3. 会计科目文件(KJKM.TXT)。 4. 部门文件(BMXX.TXT)。 5. 单位文件(WLDW.TXT)。 6. 项目信息文件(XMXX.TXT)。 7. 科目余额及发生额文件(KMYE.TXT)。 8. 记账凭证文件(JZPZ.TXT)。 9. 企业资产负债表文件(Q_ZCFZ.TXT)。 10. 企业利润表文件(Q_LR.TXT)。 通过GB/T 245892010检测认证的财务软件,输出的符合国家标准的数据文件只有xml一种格式。其中GB/T 24589.12010默认输出5个文件,分别为: 1. 公共档案.xml。 2. 总账.xml。 3. 应收应付.xml。 4. 固定资产.xml。 5. 员工薪酬.xml。 GB/T 24589.22010默认输出4个文件,分别为: 1. 公共档案.xml。 2. 总账.xml。 3. 固定资产.xml。 4. 工资.xml。 为了确保数据能够准确无误地采集转换到AO2011中,审计人员应保证财务软件输出的符合国家标准的数据文件名称和文件格式等不被修改。 [MZ(2]3.3.2常用的TSQL函数[MZ)] 审计数据分析中常用的TSQL实用函数包括聚合函数、字符函数、日期函数、数学函数、转换函数等。 1. 聚合函数 聚合函数对一组值执行计算,并返回单个值。除了COUNT以外,聚合函数都会忽略空值。聚合函数经常与SELECT语句的GROUP BY子句一起使用,对按分组字段分出的每一组数据中的所有记录的某一字段进行聚合计算。聚合函数是确定性函数。这表示任何时候使用一组特定的输入值调用聚合函数,返回值都是相同的。聚合函数包括计数(COUNT)、求和(SUM)、求最大值(MAX)、求最小值(MIN)和求平均值(AVG)。审计分析中常见的聚合函数是前4个。 COUNT 返回组中项目的数量。 语法 COUNT ( { [ ALL | DISTINCT ] expression | * } ) 参数 · ALL 对所有的值进行聚合函数运算。ALL 是默认设置。 · DISTINCT 指定 COUNT 返回唯一非空值的数量。 · expression 一个表达式,其类型是除 uniqueidentifier、text、image 或 ntext 之外的任何类型。不允许使用聚合函数和子查询。 · * 指定应该计算所有行以返回表中行的总数。COUNT(*) 不需要任何参数,而且不能与 DISTINCT 一起使用。COUNT(*) 不需要 expression 参数,因为根据定义,该函数不使用有关任何特定列的信息。COUNT(*) 返回指定表中行的数量而不消除副本。它对每行分别进行计数,包括含有空值的行。 返回类型 int 注释 COUNT(*) 返回组中项目的数量,这些项目包括 NULL 值和副本。 COUNT(ALL expression) 对组中的每一行都计算 expression 并返回非空值的数量。 COUNT(DISTINCT expression) 对组中的每一行都计算 expression 并返回唯一非空值的数量。 示例 USE pubs SELECT COUNT(DISTINCT city) FROM authors 下面是结果集:  16 补充说明 COUNT函数在审计实践中用得非常多,主要用于获取特定表的记录数。通常审计人员在分析一张数据表之前用COUNT(*)求表的记录数,以对该表的数据量有一个基本评价。当对某一个字段(如字段A)感兴趣时常用COUNT(字段A)求取该字段取非空值的数量,用COUNT(distinct 字段A) 求取该字段有多少个不同的值。 SUM 返回表达式中所有值的和,或只返回 DISTINCT 值。SUM 只能用于数字列。空值将被忽略。 语法 SUM ( [ ALL | DISTINCT ] expression ) 参数 · ALL 对所有的值进行聚合函数运算。ALL 是默认设置。 · DISTINCT 指定 SUM 返回唯一值的和。 · expression 是常量、列或函数,或者是算术、按位与字符串等运算符的任意组合。expression 是精确数字或近似数字数据类型分类(bit 数据类型除外)的表达式。不允许使用聚合函数和子查询。 返回类型 以最精确的 expression 数据类型返回所有表达式值的和。 示例 USE pubs SELECT type,SUM(price),SUM(advance) FROM titles GROUP BY type ORDER BY type 下面是结果集: type    business54.9225,125.00 mod_cook 22.98 15,000.00 popular_comp 42.95 15,000.00 psychology 67.52 21,275.00 trad_cook 47.89 19,000.00 UNDECIDED (null) (null) 补充说明 SUM函数在审计实践中多用于数据值的加总统计。在使用SUM函数之前一定要确认参与加总的字段的字段类型是数值类型。当某字段的类型为字符串型、日期型时直接使用SUM函数是通常无法得到希望的结果。此时可以通过CAST或者CONVERT函数将字段类型变换为数值类型之后再使用SUM函数。 MAX和MIN 返回表达式的最大值/最小值。 语法 MAX ( [ ALL | DISTINCT ] expression ) MIN ( [ ALL | DISTINCT ] expression ) 参数 · ALL 对所有的值进行聚合函数运算。ALL 是默认设置。 · DISTINCT 指定每个唯一值都被考虑。DISTINCT 对于 MAX 无意义,使用它仅仅是为了符合 SQL92 兼容性。 · expression 常量、列名、函数以及算术运算符、按位运算符和字符串运算符的任意组合。MAX 可用于数字列、字符列和 datetime 列,但不能用于 bit 列。不允许使用聚合函数和子查询。 返回类型 返回类型与 expression 相同。 MAX 忽略任何空值。 对于字符列,MAX 查找排序序列的最大值。 示例 USE pubs SELECT MAX(ytd_sales),min(ytd_sales) FROM titles 下面是结果集:  22246111 补充说明 作为求最大值和最小值的这两个聚合函数可以确定一个字段的取值范围。审计实践中,往往需要判定一张表包含数据的时间跨度,此时可以找出表示时间的字段,对它使用MAX和MIN函数即可。 2. 字符函数 字符函数对二进制数据、字符串和表达式执行不同的运算,返回字符串或数字值。此类函数作用于CHAR、VARCHAR、BINARY和VARBINARY数据类型以及可以隐式转换为CHAR或VARCHAR的数据类型。可以在SELECT语句的SELECT和WHERE子句以及表达式中使用字符函数。 常用的字符函数包括SUBSTRING、LEFT、RIGHT、LEN、LTRIM、RTRIM、REPLACE、CHARINDEX等。 SUBSTRING 返回字符、binary、text或image表达式的一部分。 语法 SUBSTRING(expression,start,length) 参数 · expression 字符串、二进制字符串、text、image、列或包含列的表达式。不要使用包含聚合函数的表达式。 · start 一个整数,指定子串的开始位置。 · length 一个整数,指定子串的长度(要返回的字符数或字节数)。 返回类型 如果expression是支持的字符数据类型,则返回字符数据。如果expression是支持的binary数据类型,则返回二进制数据。 返回字符串的类型与给定表达式的类型相同(表中显示的除外)。 注释 在字符数中必须指定使用ntext、char或varchar数据类型的偏移量(start和length)。在字节数中必须指定使用text、image、binary或varbinary数据类型的偏移量。 示例 SELECT SUBSTRING ('Auditors are always onduty on weekends.',21,7); 下面是结果集:  onduty LEFT、RIGHT 返回从字符串左边或者右边开始指定个数的字符。 语法 LEFT(character_expression,integer_expression) RIGHT(character_expression,integer_expression) 参数 · character_expression 字符或二进制数据表达式。character_expression可以是常量、变量,也可以是字符或二进制数据的列。 · integer_expression 起始位置,用正整数表示。如果integer_expression为负,则返回空字符串。 返回类型 varchar character_expression必须为可隐性转换为varchar的数据类型。否则,使用CAST显式转换character_expression。 示例 SELECT LEFT('Hello Kitty',5),RIGHT('Hello Kitty',5); 下面是结果集:  HelloKitty LEN 返回给定字符串表达式的字符(而不是字节)个数,其中不包含尾随空格。 语法 LEN(string_expression) 参数 · string_expression 要计算的字符串表达式。 返回类型 int 示例 SELECT LEN('auditor'); 下面是结果集:  7 LTRIM 删除起始空格后返回字符表达式。 语法 LTRIM ( character_expression ) 参数 · character_expression 是字符或二进制数据表达式。character_expression可以是常量、变量或列。character_expression 必须是可以隐性转换为 varchar 的数据类型。否则,使用 CAST 显式转换 character_expression。 返回类型 varchar 示例 DECLARE @string_to_trim varchar(60) SET @string_to_trim = ' Sanji is the best chef.' SELECT LTRIM(@string_to_trim) 下面是结果集:  Sanji is the best chef. RTRIM 截断所有尾随空格后返回一个字符串。 语法 RTRIM ( character_expression ) 参数 · character_expression 由字符数据组成的表达式。character_expression可以是常量、变量,也可以是字符或二进制数据的列。 返回类型 varchar 示例 DECLARE @string_to_trim varchar(60) SET @string_to_trim = 'Auditors shadow area is hard to calculate.' SELECT RTRIM(@string_to_trim) 下面是结果集:  Auditors shadow area is hard to calculate. REPLACE 用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式。 语法 REPLACE(expression1,expression2,expression3) 参数 · expression1 待搜索的字符串表达式。string_expression1可以是字符数据或二进制数据。 · expression2 待查找的字符串表达式。string_expression2可以是字符数据或二进制数据。 · expression3 替换用的字符串表达式。string_expression3可以是字符数据或二进制数据。 返回类型 如果expression(1、2或3)是支持的字符数据类型之一,则返回字符数据。如果expression(1、2或3)是支持的binary数据类型之一,则返回二进制数据。 示例 SELECT REPLACE('good good study','good','happy'); 下面是结果集:  happy happy study CHARINDEX 返回字符串中指定表达式的起始位置。 语法 CHARINDEX(expression1 ,expression2 [,start_location]) 参数 · expression1 一个表达式,其中包含要寻找的字符的次序。expression1是一个短字符数据类型分类的表达式。 · expression2 一个表达式,通常是一个用于搜索指定序列的列。expression2属于字符串数据类型分类。 · start_location 在expression2中搜索expression1时的起始字符位置。如果没有给定start_location,而是一个负数或零,则将从expression2的起始位置开始搜索。 返回类型 int 示例 SELECT CHARINDEX('kitty','Hello Kitty'); 下面是结果集:  7 3. 日期函数 日期及时间函数对日期和时间输入值执行操作,并返回字符串、数据字值或时间值。常用的日期及时间函数包括DATEDIFF、YEAR、MONTH、DAY、DATEPART、DATEADD、ISDATE等。 DATEDIFF 返回跨两个指定日期的日期和时间边界数。 语法 DATEDIFF (datepart,startdate,enddate) 参数 · datepart 规定了应在日期的哪一部分计算差额的参数。 · startdate 计算的开始日期。startdate是返回 datetime或smalldatetime值或日期格式字符串的表达式。 因为smalldatetime只精确到分钟,所以当用smalldatetime值时,秒和毫秒总是0。 如果只指定年份的最后两位数字,则小于或等于“两位数年份截止期”配置选项的值的最后两位数字的数字所在世纪与截止年所在世纪相同。大于该选项的值的最后两位数字的数字所在世纪为截止年所在世纪的前一个世纪。例如,如果two digit year cutoff 为 2049(默认),则 49 被解释为 2049,50 被解释为 1950。为避免指代二义性,请使用四位数的年份。 · enddate 计算的终止日期。enddate 是返回 datetime 或 smalldatetime 值或日期格式字符串的表达式。 返回类型 integer 注释 startdate是从enddate减去。如果startdate比enddate晚,返回负值。 当结果超出整数值范围时,DATEDIFF产生错误。对于毫秒,最大数是24天20小时31分钟零23.647秒。对于秒,最大数是68年。 计算跨分钟、秒和毫秒这些边界的方法,使得 DATEDIFF 给出的结果在全部数据类型中是一致的。结果是带正负号的整数值,其等于跨第一个和第二个日期间的datepart边界数。例如,在7月3日(星期日)和7月10日(星期日)之间的星期数是1。 YEAR、MONTH、DAY 返回表示指定日期中的年份、月份、日期的整数。 语法 YEAR(date) MONTH(date) DAY(date) 参数 · date datetime或smalldatetime类型的表达式。仅对1753年1月1日后的日期使用datetime数据类型。 返回类型 int 注释 YEAR函数等价于 DATEPART(yy,date),MONTH函数等价于DATEPART(mm,date),DAY函数等价于DATEPART(dd,date)。 示例 下例从日期03/12/2016中返回年份、月份和日期数。 SELECT YEAR('03/12/2016') AS "Year Number", MONTH('03/12/2016') AS "Month Number", DAY('03/12/2016') AS "Day Number"; 下面是结果集: Year NumberMonth NumberDay Number  2016312 DATEPART 返回代表指定日期的指定日期部分的整数。 语法 DATEPART(datepart,date) 参数 · datepart 是指定应返回的日期部分的参数。表32列出了Microsoft SQL Server可识别的日期部分和缩写。 表32参 数 说 明 日 期 部 分缩写 yearyy,yyyy quarterqq,q monthmm,m dayofyeardy,y daydd,d weekwk,ww weekdaydw hourhh minutemi,n secondss,s millisecondms week (wk,ww) 日期部分反映对 SET DATEFIRST 作的更改。任何一年的 1月1日定义了week日期部分的开始数字,例如,DATEPART(wk,′Jan 1,xxxx′) = 1,此处xxxx代表任一年。 weekday (dw) 日期部分返回对应于星期中的某天的数,例如, Sunday=1,Saturday=7。weekday日期部分产生的数取决于SET DATEFIRST设定的值,此命令设定星期中的第一天。 · date 返回datetime或smalldatetime值或日期格式字符串的表达式。对1753年1月1日之后的日期用datetime数据类型。更早的日期存储为字符数据。当输入datetime值时,始终将其放入引号中。因为smalldatetime只精确到分钟,所以当用smalldatetime值时,秒和毫秒总是0。 返回类型 int 注释 DAY、MONTH和YEAR函数分别是DATEPART(dd,date)、DATEPART(mm,date)和 DATEPART(yy,date) 的同义词。 示例 GETDATE 函数返回当前日期;然而,比较时并不总是需要完整的日期信息(通常只是对日期的一部分进行比较)。此示例显示GETDATE及DATEPART的输出。假设日期是2016年7月19日。 SELECT datepart(month,getdate()); 下面是结果集:  7 DATEADD 在向指定日期加上一段时间的基础上,返回新的datetime值。 语法 DATEADD(datepart,number,date) 参数 · datepart 规定应向日期的哪一部分返回新值的参数。 · number 用来增加datepart的值。如果指定一个不是整数的值,则将废弃此值的小数部分。例如,如果为datepart指定day,为number指定 1.75,则date将增加1。 · date 返回datetime或smalldatetime值或日期格式字符串的表达式。 返回类型 返回datetime,但如果date参数是smalldatetime,返回smalldatetime。 示例 假设系统当前日期为2016年7月18日,此示例返回当前日之后2个月的日期。 SELECT DATEADD(month,2,getdate()) AS 2个月后的今天; 下面是结果集: 2个月后的今天  20160918 02:29:45.327 ISDATE 确定输入表达式是否为有效的日期。 语法 ISDATE(expression) 参数 · expression 一个表达式,将要验证它是否为一个日期。expression是任何返回varchar数据类型的表达式。 返回类型 int 注释 如果输入表达式是有效的日期,那么ISDATE返回1;否则,返回0。例如,以下字符串值2016101、1/20/2016、2016101 12:00pm或者2016101的返回值均为1。 示例 检查@datestring局部变量是否为有效的日期。 DECLARE @datestring varchar(10); SET @datestring = '06/09/2013'; SELECT ISDATE(@datestring); 下面是结果集:  1 4. 数学函数 数学函数对数字表达式进行数学运算并返回运算结果。常用的数学函数包括EXP、POWER、ROUND、FLOOR、CEILING、ABS、SQRT等。 EXP 返回所给的float表达式的指数值。 语法 EXP(float_expression) 参数 · float_expression 是float类型的表达式。 返回类型 float 示例 本示例声明一个变量,同时返回所给变量(取值1)的指数值。 declare @var float set @var = 1.0 SELECT EXP(@var); 下面是结果集:  2.7182818284590451 POWER 返回给定表达式乘指定次方的值。 语法 POWER(numeric_expression ,y) 参数 · numeric_expression 精确数字或近似数字数据类型类别的表达式(bit数据类型除外)。 · y numeric_expression的次方。y可以是精确数字或近似数字数据类型类别的表达式(bit数据类型除外)。 返回类型 与numeric_expression相同。 示例 SELECT POWER(2,5),POWER(2,-5),POWER(2.0000,-5); 下面是结果集:  3200.0313 ROUND 返回数字表达式并四舍五入为指定的长度或精度。 语法 ROUND (numeric_expression ,length [,function ] ) 参数 · numeric_expression 精确数字或近似数字数据类型类别的表达式(bit数据类型除外)。 · length numeric_expression将要四舍五入的精度。length必须是tinyint、smallint或int。当length为正数时,numeric_expression四舍五入为length所指定的小数位数。当length为负数时,numeric_expression则按length所指定的在小数点的左边四舍五入。 · function 要执行的操作类型。function必须是tinyint、smallint或int。如果省略function或function的值为0(默认),numeric_expression将四舍五入。当指定0以外的值时,将截断numeric_expression。 返回类型 与numeric_expression相同。 注释 ROUND始终返回一个值。如果length是负数且大于小数点前的数字个数,ROUND将返回0。 示例 SELECT ROUND(123.9994,3),ROUND(123.9995,3), ROUND(123.4545,2),ROUND(123.45,-2);  123.9990124.0000123.4500100.00 FLOOR、CEILING 返回小于等于或者大于等于所给数字表达式的最大整数。 语法 FLOOR(numeric_expression) CEILING(numeric_expression) 参数 · numeric_expression 精确数字或近似数字数据类型类别的表达式(bit数据类型除外)。 返回类型 与numeric_expression相同。 示例 SELECT FLOOR(123.45),FLOOR(-123.45),CEILING(123.45),CEILING(-123.45); 下面是结果集:  123-124124-123 ABS 返回给定数字表达式的绝对值。 语法 ABS(numeric_expression) 参数 · numeric_expression 精确数字或近似数字数据类型类别的表达式(bit 数据类型除外)。 返回类型 与numeric_expression相同。 示例 SELECT ABS(-1.0); 下面是结果集:  1.0 SQRT 返回给定表达式的平方根。 语法 SQRT ( float_expression ) 参数 float_expression 是 float 类型的表达式。 返回类型 float 示例 下例返回 1.00和10.00 之间的数字的平方根。 DECLARE @myvalue float SET @myvalue = 1.00 WHILE @myvalue < 10.00 BEGIN SELECT SQRT(@myvalue) SELECT @myvalue = @myvalue + 1 END GO 下面是结果集:  1.0  1.4142135623731  1.73205080756888  2.0  2.23606797749979  2.44948974278318  2.64575131106459  2.82842712474619  3.0 5. 转换函数 当SQL Server不自动执行不同数据类型的表达式转换时,可使用转换函数,常见的转换函数包括CAST、CONVERT、ISNULL。 CAST、CONVERT 将某种数据类型的表达式显式转换为另一种数据类型。CAST和CONVERT提供相似的功能。 语法 CAST(expression AS data_type) CONVERT(data_type[(length)],expression [,style]) 参数 · expression 任何有效的 Microsoft SQL Server表达式。 · data_type 目标系统所提供的数据类型,包括bigint和sql_variant。不能使用用户定义的数据类型。 · length nchar、nvarchar、char、varchar、binary或varbinary数据类型的可选参数。 · style 日期格式样式,借以将datetime或smalldatetime数据转换为字符数据(nchar、nvarchar、char、varchar、nchar或nvarchar数据类型);或者字符串格式样式,借以将float、real、money 或smallmoney数据转换为字符数据(nchar、nvarchar、char、varchar、nchar或nvarchar数据类型)。 示例 SELECT CAST(2400 AS decimal(10,2)),CONVERT(decimal(10,2),2400); 下面是结果集:  2400.02400.00 2401.0 ISNULL 使用指定的替换值替换 NULL。 语法 ISNULL ( check_expression ,replacement_value ) 参数 · check_expression 将被检查是否为 NULL的表达式。check_expression 可以是任何类型的。 · replacement_value 在check_expression为 NULL时将返回的表达式。replacement_value 必须与 check_expresssion 具有相同的类型。 返回类型 返回与 check_expression 相同的类型。 示例 将 ISNULL 与 AVG 一起使用 下面的示例查找所有书的平均价格,用值 $10.00 替换 titles 表的 price 列中的所有 NULL 条目。 USE pubs SELECT AVG(ISNULL(price,$10.00)) FROM titles 下面是结果集:  14.24 [MZ(2]思考题[MZ)] 1. 名词解释: ODBC、OLE_DB、ADO、ADO.NET、DAO、RDO、SQL、API、UDA、DDL、DCL、DML。 2. 什么是审计接口,有哪些常见类型的审计接口? 3. 审计接口的实现方式有哪些? 4. 什么是ODBC?简述ODBC的工作原理。 5. 如何利用ODBC获取数据? 6. ODBC的数据源有哪些? 7. 简述ADO与OLE DB之间的关系。 8. SQL的主要特点是什么? 9. GB/T 24589由哪几个部分组成? 10. 试述审计工作中常用的TSQL聚合函数、字符函数、日期函数、数学函数和转换函数。 [MZ(1]第二篇审计数据采集篇[MZ)] 本篇共包含2章,主要介绍审计数据采集以及采集之后的清理、转换、验证等数据维护工作的技术方法。 第4章审计数据采集 [MZ(1]第4章审计数据采集[MZ)] 本章要点 ◆数据采集综述 & 数据选择策略 & 数据采集策略 ◆非数据库数据采集 & 文本数据采集 & 电子表格数据采集 & XML数据采集 ◆数据库数据采集 & DBF数据采集 & Access数据采集 & SQL Server数据采集 & Oracle数据采集 ◆财务数据采集 & 支持国家标准(GB/T 24589)的财务数据采集 ◆拓展阅读 & ERP数据采集策略 & 特殊格式文本的采集技术 & 容错数据采集技术 & Oracle数据恢复常见问题 本章主要介绍审计数据采集的技术方法,首先综述数据采集的策略,然后将待采集的业务电子数据按非数据库数据和数据库数据分类后,分别介绍采集技术,最后简单介绍财务电子账套的采集技术。 本章的拓展阅读主要涉及ERP数据采集策略、特殊格式文本采集、容错数据的采集方法、Oracle备份文件恢复时经常遇到的问题及解决方案。 [MZ(2]4.1数据采集综述[MZ)] 审计数据采集是获取被审计单位电子数据的重要步骤。审计实践表明采集可分两步实现,第一步是准确地选择需采集的电子数据,第二步是有效地实现对目标数据的采集。 根据被审计单位信息系统的特点以及审计数据采集的基本特征,结合审计需求,可以制定相应的数据选择策略和数据采集策略。 [MZ(3]4.1.1数据选择策略[MZ)] 如何从被审计单位复杂的各类数据中选择审计关心的数据?一般而言,可以遵循以下三个原则。 (1) 选择的数据应满足审计工作方案的要求。 审计工作方案中描述了审计的主要工作内容和要求,通过对审计工作方案的分析,掌握审计的内容和要求,并根据这些内容和要求决定数据采集的对象和范围,是数据采集的第一步。采集的数据能否满足审计工作的需求,关键在于对审计工作方案的透彻理解。 (2) 数据选择应建立在对被审计单位信息系统及其业务流程充分了解的基础上。 被审计单位的信息系统中保存了大量与生产经营和管理决策相关的数据,而且逐年增加。要从中准确地选取审计方案所要求的数据,首先必须对被审计单位信息系统及业务处理流程进行深入的分析和理解,通过分析业务流程与数据之间的产生和使用关系,结合审计业务需求,合理地确定数据采集的对象和范围。 (3) 数据采集不应局限于特定的被审计单位,利用外部数据进行关联分析是一种有效的手段。 某些部门的数据之间存在特定的关系,例如,企业报表与税务部门的记录之间,企业销售数据与金税工程数据之间,企业经营状况与电力公司和自来水公司的电费及水费记录之间,关联企业与工商数据之间都存在一定的联系。审计过程中不仅可以利用外部数据对被审计单位的数据进行验证,必要时还可以用外部数据替代被审计单位的数据开展审计。 研究认为如下一些部门的数据与其他部门的数据之间存在较大的关联关系,即商业银行的存贷款数据、人民银行的统一授信数据、税务部门的纳税申报数据和金税工程数据、工商部门的企业登记数据、社保部门的社会保险数据、技术监督局的企业编码数据、海关部门的进出口数据及退税数据、电力公司的电费数据、自来水公司的水费数据等。 在对某国税部门的审计实践中,根据审计署确定的审计范围和要求以及国税审计的业务特点,审计人员确定了采集数据的内容和范围,即不仅采集了国税部门的征管信息系统以及金税工程系统中的电子数据,还采集了地税征管信息系统、工商管理系统、民政系统、海关关税系统、电力部门电费管理系统、自来水公司水费管理系统中的电子数据。基本思路是: 通过国税征管信息的分析掌握企业纳税的基本情况,确定审计延伸企业;再通过工商数据掌握该企业的关联企业情况;通过金税工程数据掌握企业的关联交易情况;通过对企业纳税资料的分析掌握企业经营的基本状况;通过企业电费、水费支出与企业纳税资料进行对比分析验证企业纳税资料的真实性;通过民政系统数据验证福利企业是否满足享受税收优惠政策条件;通过关联分析掌握是否存在通过税收优惠政策避税的情况;通过海关数据与企业纳税情况掌握企业是否存在利用国家出口退税政策偷税的情况。 通过对这些数据的综合分析和交叉比对,有效地进行了企业纳税情况评估、关联企业分析、税收优惠政策执行情况等审计内容。通过对多种信息的相关分析,还发现了国、地税稽查部门之间由于信息共享不畅造成国税检查发现的企业纳税问题未相应地在地税进行处理以及地税检查发现的企业纳税问题未相应地在国税进行处理的问题。实践证明,综合利用外部数据进行审计分析是一种有效的手段。 [MZ(3]4.1.2数据采集策略[MZ)] 常用的采集策略有3种,分别是通过数据接口,直接拷贝和备份文件恢复。 4.1.2.1数据接口法 数据接口法是通过已有的数据接口访问和采集被审计单位数据的策略和方法。 1. 通用审计接口 (1) 通过直接连接目标数据库采集 在这种策略指导下,被审计信息系统和审计系统两者采用数据库连接件(如ODBC、OLE DB)直接相连。根据审计要求,在被审计信息系统的数据库中读取规定时间段、规定范围内的审计数据。为保证被审计信息系统的正常运行,审计系统通过审计接口只具有读取数据的权限,而没有对数据进行增加、删除及修改的权限。 这种审计接口的复杂程度视不同情况而定。如果被审计信息系统采用桌面数据库系统,如Access、DBF系列,或者数据存储在Excel、文本文件中,审计系统可采用ODBC数据库连接件直接访问这些数据库。审计接口的工作主要是规定读取数据的范围和时间段,相对较为方便。如果被审计信息系统采用大型数据库系统,如Microsoft SQL Server、Oracle等,审计系统也可采用ODBC或其他专用数据库连接件(如Oracle SQL*Net等)与这些数据库系统建立联系。选用数据库连接件的方式,以及一些必要的参数设置往往需要一定的计算机专业技术知识,并且需要被审计单位在技术上给予密切配合。基于以上这些原因,这种方式在实际操作时应量力而行。 在这种方式下,审计数据服务器直接从被审计信息系统的数据服务器中采集数据,并保存在审计系统的数据服务器中。审计数据服务器要同时完成数据采集和数据存储工作。这种方式的特点是系统结构相对简单,便于实现、维护和管理。缺点是审计数据服务器和被审计信息系统的数据服务器(或者主机)直接相连,没有隔离,系统安全性不高,对被审计信息系统和审计应用系统的安全性都会造成一定的影响。 (2) 使用数据采集工作站联网远程采集 这种策略的优点是将数据采集和数据存储功能分离开来,审计数据服务器和被审计信息系统的数据服务器(或者主机)之间采用数据采集工作站进行隔离。数据采集工作站将需要采集的数据首先从被审计单位的系统中提取到中间数据库中,审计端的采集系统再从中间数据库中将所需的数据采集到审计服务器中,从而实现审计端与被审计端的隔离。这种策略有效地降低了审计风险,同时提高了整个联网审计系统的安全。缺点是增加了系统开发、维护和管理的复杂性。数据采集工作站的示意图见图41。 图41数据采集工作站示意图 在联网远程采集中,数据采集点的选择应本着方便、高效、安全、节约并能满足审计需求的原则进行选择。 被审计单位的数据存放基本可以分为集中式存放和分散式存放两类。根据数据存放模式的不同,可采用不同的策略来采集数据。 对集中存放的数据,采集点应选在数据集中点。只需在审计数据中心与被审计系统之间建立一条数据链路就可以满足数据集中的需要。这种模式不但可以将审计需要的数据全面采集下来,而且在通信费用方面也是比较节约的。例如,与某银行进行全面的联网审计时,可以在该银行的北方数据中心对其数据进行全方位的采集。 对数据分散存放的被审计单位进行数据采集有两种可选方式: 一种是与每个数据存放点建立数据连接通路,单独采集数据,在审计数据中心整合数据;另一种是在数据采集前,请被审计单位利用自身的网络将数据集中后供审计部门集中采集。对审计部门而言,后一种方式相对比较方便和经济。例如,对工商总局开展联网审计,从技术上讲实现方法有两种: 一种方法是请工商总局按审计署的要求将审计需要的数据打包后集中存放,审计署与数据集中点建立通信链路对数据进行采集;另一种方法是审计署与工商总局的不同系统之间建立独立的数据链路分别采集数据,然后在审计署数据中心进行整合。 (3) 生成并获取交换文件,转换为目标格式数据的采集 当审计信息系统采用大型数据库系统,使用数据库连接件直接建立审计接口有困难时,可以考虑使用本策略。策略要点是: 将数据源中的数据按约定格式导出为数据文件,审计应用系统读取约定格式的数据文件并将其转换到目标数据库,从而完成数据采集。在这种策略指导下,被审计单位数据库生成通用交换文件(通常是文本文件、Access数据文件或DBF数据库文件等),通过数据导入工具或软件将交换文件转换为指定格式的数据。这种方式在技术上不存在较大难度,实际使用时也较为方便。 2. 专用审计接口 与通用审计接口相对的是专用审计接口。专用审计接口为特定的审计事项采集数据服务,通常处理交换文件,如“海关业务审计软件”。在这种策略下,双方首先约定要通过交换文件传输的数据的内容、格式和规范(接口标准),然后在被审计信息系统中开发数据文件的前处理器。前处理器从信息系统的数据库中读取审计数据,转换成交换文件。在审计系统中要开发数据文件的后处理器,后处理器读取交换文件中的数据,清理转换后放入审计系统的数据库中。在这种方式下,专用审计接口的开发工作者要包括交换文件内容、格式、规范的确定和前后处理器的开发。 4.1.2.2直接拷贝法 将被审计单位信息系统的数据通过直接拷贝的方式采集到审计数据服务器中。这种方式适合数据量比较少,数据变化较少的情况。如果被审计单位信息系统的数据是非数据库数据(TXT文件、XML文件和Excel文件等)或者是桌面数据库数据(Access数据库文件、DBF数据库文件等),就很适合采用这种策略。通常情况下,这些数据可以通过相应的数据库管理系统进行处理,审计软件也可直接读取。因此,审计人员可先通过查看被审计单位的应用系统的各项属性来确定数据存储的目录,然后直接从被审计单位信息系统的数据存储目录获取数据。 4.1.2.3备份恢复法 按备份策略使用的层次划分,备份可分为使用应用软件生成数据备份和直接在数据库系统中生成数据备份。 通过应用软件生成数据备份,通常是财务数据的备份。使用被审计单位信息系统提供的备份工具可以进行财务账套备份。通过检查备份日志文件,确定备份数据文件的版本,然后就可以通过AO(现场审计实施系统)的财务数据采集模板加载备份数据文件,进行账套自动分析,并重建财务账套了。例如,审计过程中通过用友财务软件备份功能获得了UFDATA.BAK和UfErpYer.LST两个文件。用UltraEdit软件打开UfErpYer.LST文件,得到以下信息: [BackRetInfo] Type=Account cAcc_Id=002 iSysId=40025.624537037 DataSource=cwserver cacc_path=D:\U8SOFT\ADMIN\CWSERVER\cwserver\ZT002\ Version=1.00 VersionEx=V8.720 Date=20160111 09:21 YCount=2 YYear=14,15 MBs=1071.07 IncludeUFMeta=Yes Backup=Success 这说明UfErpYer.LST文件其实就是一个文本文件,保存着备份相关的一些信息,如软件版本、备份日期、账套年度、文件路径等。接着用UltraEdit打开UFDATA.BAK。在文件头部,可以看到“TAPE”、“Microsoft SQL Server”等字样,因此判断这是一个Microsoft SQL Server的备份文件。接着就可以使用AO的“财务软件备份数据”的“采集数据”功能进行数据采集了,如图42所示。 图42AO软件采集财务数据备份文件 直接在数据库系统中生成数据备份,是获取审计数据时常用的策略。从被审计信息系统数据库(如Microsoft SQL Server或Oracle)获取备份文件后,可以在审计数据服务器上建立与被审计单位相同版本的数据库系统,然后把备份文件恢复到数据库系统中。Microsoft SQL Server2008的备份和还原过程分别如图43和图44所示。 图43Microsoft SQL Server 2008的数据库备份过程 图44Microsoft SQL Server 2008的数据库还原过程 需要说明的是,对于Microsoft SQL Server 2008数据库,还可以直接采集其数据文件(后缀名为MDF、NDF)和日志文件(后缀名为LDF),然后在审计人员的Microsoft SQL Server数据库中使用“附加数据库”功能加载数据库。 [MZ(2]4.2业务数据采集[MZ)] 被审计单位的业务数据按存储方式的不同可分为非数据库数据和数据库数据。本节首先介绍非数据库对象中有代表性的文本(TXT)数据、XML文本数据以及Excel数据的采集;然后介绍数据库对象的数据采集,主要涉及DBF、Access、SQL Server、Oracle等数据库。 [MZ(3]4.2.1非数据库数据采集[MZ)] 4.2.1.1文本数据采集 文本文件不带任何格式,它具有存储方式灵活方便,数据量大小基本不受限制的优点,在个人电脑和商用大型机上广泛应用,几乎所有数据库管理系统都能导出、导入文本文件。 信息系统建设早期,曾经有直接采用文本类型的数据文件进行数据存储和访问的情况。这种方式在获得存储方式灵活性的同时,缺陷也是明显的: 占用较大的存储空间,较多的传输时间,文件转换需要进行类型或字段名称的重定义。而且应用程序一旦发生变化,文件的数据结构就有可能发生变化,同样一旦数据的逻辑结构发生变化,应用程序也必须改变。因此,目前在信息系统建设中已很少直接采用文本类型的数据文件进行数据存储和访问。但是,作为被审计单位信息系统电子数据的导出格式,文本文件兼容性好,在不同系统间的数据交换中经常使用。 可以采集到数据库中的文本文件可以按字段分隔类型的不同,可分为带分隔符的文本文件和固定宽度的文本文件两大类。 1. 带分隔符的文本文件 带分隔符的文本文件必须包含字段分隔符和记录分隔符。字段分隔符区分字段,记录分隔符区分记录。文本限定符和字段名称是可选的,字段名称通常在第一行表示。每个带分隔符的文本文件都有唯一的字段分隔符、记录分隔符和文本限定符,而且其中任意两种标识符不可重复。以下是一个带分隔符本文件的示例,其中第一行为字段名称,字段分隔符为逗号(,),记录分隔符为回车换行(CR)(LF),文本限定符为单引号(′)。示例如下: 移交单位,移交资产内容,接收时间,移交金额 '某外国语学校','轿车、普通客车、摩托车等','20151020','1432380.00' '某艺术职业学院','电子琴','20150901','287960.00' '某水库移民安置办公室','办公椅、大班台、会议台、办公桌等','20150901','78731.00' '某省文物考古研究所','投影仪、打印机、交换机等','20150901','325826.00' (1) 字段分隔符 顾名思义,就是分隔字段内容的标识符,它既可以是一个字符,也可以由多个字符组成。常见的字段分隔符包括逗号(,)、制表符(TAB)、分号(;)、空格( )以及垂直条(|)等。 (2) 记录分隔符 回车换行(CR)(LF)是最常见的记录分隔符,在这种情况下,每一自然行代表一条记录。当使用Windows操作系统的“记事本”软件处理文本文件时,请注意“格式”菜单下的“自动换行”选项。如果选中该选项,“记事本”软件会根据窗口宽度自动调整显示结果,当一行无法显示全部内容时,显示不下的内容直接转入下一行显示,如图45所示;如果“自动换行”选项未被选中,一行的内容严格放在一行内显示,如果在窗口宽度范围内无法全部显示,则窗口底部自动生成水平滚动条,如图46所示。需要说明的是,无论切换到哪种显示方式,都只是“记事本”软件向用户展现文本文件内容的一种方式,文本文件的内容并未发生任何改变。 图45文本文件的自动换行显示 图46文本文件的非自动换行显示 记录分隔符也可以是回车(CR)、换行(LF)、分号(;)、逗号(,)、制表符(TAB)、垂直条(|)等。可以通过下面的方法判断记录分隔符: 记录分隔符出现的频度低于字段分隔符,因此顺着文本文件的内容向下查找,当发现有规律地出现几个字段分隔符之后遇到一个非字段分隔符的标识符,然后又开始有规律地出现字段分隔符即可认定刚才遇到的那个有别于字段分隔符的标识符就是记录分隔符。 (3) 文本限定符 文本限定符的作用是明确标识出字段的内容,可以使用双引号(″)、单引号(′)等,不使用文本限定符也是可以的。当字段内容包含表示字段分隔符的字符时,必须使用文本限定符将字段内容括起来。示例文本文件如下: 移交单位,移交资产内容,接收时间,移交金额 某外国语学校,'轿车,普通客车,摩托车等',20151020,1432380.00 某艺术职业学院,'电子琴',20150901,287960.00 某水库移民安置办公室,'办公椅,大班台,会议台,办公桌等',20150901,78731.00 某省文物考古研究所,'投影仪,打印机,交换机等',20150901,325826.00 以上示例文件使用逗号(,)作为字段分隔符,字段内容“轿车,普通客车,摩托车等”、“办公椅,大班台,会议台,办公桌等”包含(,),无法和作为字段分隔符的(,)区分开来,因此必须使用文本限定符,例如单引号 (′),将字段内容表示为′轿车,普通客车,摩托车等′、′办公椅,大班台,会议台,办公桌′等。当字段内容中包含文本限定符的时候,应该使用其他的文本限定符。文本数据的采集过程如图47和图48所示。 图47采集过程1 图48采集过程2 以下通过实例说明带分隔符的文本文件的采集。 例4.1AAAA.TXT文件的采集 AAAA.TXT文件的内容如图49所示。 图49带分隔符的文本文件(例4.1) 【解答】 首先分析文件特点,字段分隔符为空格( ),行分隔符为回车换行(CR)(LF),没有文本限定符,数据首行也不包括字段名称;然后通过观察字段的规律性,基本上可以认定“记事本”软件当前窗口显示的一长行和一短行内容合来起为一条记录。如果不确定,也可以将显示状况切换到非“自动换行”状态,如图410所示。 图410例4.1变换显示后的结果 该文本文件没有包括字段名称,数据采集时有两种应对方法。方法一,当暂时无法从被审计单位获得数据的表结构时,先采集数据生成新表,由采集软件自动分配字段名称(列 0,列 1 ……),由人工判断字段类型(凡暂时无法确定类型的先设定为字符串型,以尽可能保证数据采集过程中数据精度不丢失)。当条件成熟,获得数据的表结构后,根据从被审计单位获得的原始数据信息,修改目标表的相应字段名称和字段类型。方法二,已从被审计单位获得数据的表结构时,可首先确定目标表的字段名称、字段类型以及表名称,生成新表;然后再向新表导入数据的相关内容。 例4.2LFM1T.TXT文件的采集 LFM1T.TXT文件的内容如图411所示。 图411带分隔符的文本文件(例4.2) 【解答】 分析文件特点,字段分隔符为制表符(TAB),行分隔符为回车换行(CR)(LF),没有文本限定符,数据首行包括字段名称。 请特别注意对字段分隔符的判断。单从肉眼观察,可能得到字段间的分隔都是空格,有的长些,有的短些,而且这些数据没有正对齐字段名称,例如字段名“采购”没有对应任何字段。这时应使用键盘或鼠标对字段间隔做出实际的测试。例如分别复制第二行“800”和“10000123”的间隔以及“10000123”和“JA60”的间隔。复制过程表明这两个间隔都是一个字符,而不是多个空格字符;将结果相应复制到新建的文本文件中的第一行和第三行,然后在新建文本文件中做“全选”操作,结果如图412所示。 图412例4.2的测试结果 从图412可以看出,复制过来的字段分隔字符完全相同,这说明原文件确实是一个使用分隔符的文本文件,满足字段分隔符唯一的要求。另外这也说明制表符在显示的时候会根据前后字符的多少调整自身显示的长度。因此,人为地增加文件首行“供应商”和“采购”之间的间隔,从显示的意义上对齐“采购”和其下方的字段,将弄巧成拙。 将这个文本文件采集到数据库后,结果显示如图413所示。 图413例4.2的导入结果 由于原数据左侧有一个空列,直接导致生成的目标表有一个空列,可以通过编写SQL语句删除不必要的空行。SQL语句如下: ALTER TABLE LFM1T DROP COLUMN [列 0]; 例4.3MARAV.TXT文件的采集 MARAV.TXT文件的内容如图414所示。 图414带分隔符的文本文件(例4.3) 【解答】 分析文件特点,字段分隔符为垂直条(|),行分隔符为回车换行(CR)(LF),没有文本限定符,数据首行包括字段名称。此外文件首部有2行说明文字,第3行字段名称上下各有一行由短横线()构成的装饰性说明行。通过观察整个文件发现,说明性内容仅在文件头部,于是在数据导入之间需要删除文件的第1~3行及第5行,然后按要求导入文件即可。需要说明的是文件第3行和第5行的内容比较长,使用鼠标不易选择,可以用键盘快捷键(HOME)将光标输入位置先定位到行首,然后按键盘(SHIFT)+(END)选中整行,最后直接删除即可。 总结: 带分隔符的文本文件是最常见的文本类交换文件,而例4.3仅提到了部分该类文件的特点。由于实践过程中遇到的文件千差万别,在此无法一一列举,请在学习基本方法的基础上不断总结提高。 2. 固定宽度的文本文件 固定宽度的文本文件通常以回车换行符号作为记录间的分隔,以起始位置和宽度标识字段,第一行一般不表示字段名,一般没有文本识别符号,示例如下: 某外国语学校轿车、普通客车、摩托车等201510201432380.00 某艺术职业学院 电子琴 20150901 287960.00 某水库移民安置办公室 办公椅、大班台、会议台、办公桌等20150901 78731.00 某省文物考古研究所 投影仪、打印机、交换机等 20150901 325826.00 以下通过举例的方式说明对于固定宽度文件的采集。 例4.4贷款利率定长.TXT文件的采集 贷款利率定长.TXT文件的内容如图415所示。 图415固定宽度的文本文件(例4.4) 采集固定宽度的文本文件,建议采用AO2011软件或者“审计数据采集分析2012”软件。以“审计数据采集分析2012”为例,采集步骤如图416至图420所示。 步骤一: 使用“审计数据采集分析2012”打开一个项目,单击菜单选项“数据”,选择“数据导入向导”,单击“下一步”按钮,选择“新建数据导入定义”,单击“下一步”按钮,单击“添加”按钮,“数据源类型”选择“文本文件”双击以引入该文件,结果如图416所示。 图416例4.4——步骤一 步骤二: 单击“下一步”按钮,单击“估测”按钮,初步用垂直条分隔字段,然后用鼠标左键单击的方式产生剩下的分隔线,如图417所示。 图417例4.4——步骤二 步骤三: 单击“下一步”,进入文本格式定义状态,如图418所示。 图418例4.4——步骤三 步骤四: 单击“设置字段”,对目标列依次给定列名:“行号”,“代码”,“名称”,“利率”,“开始日期”,并更改“开始日期”字段的类型为“datetime”,如图419所示。 图419例4.4——步骤四 步骤五: 依次单击“确定”按钮,3次“下一步”按钮,再单击“确认”按钮,完成固定宽度的文本文件的采集,结果如图420所示。 图420例4.4——步骤五 4.2.1.2电子表格数据采集 Microsoft Excel是微软公司生产的著名的电子表格软件,使用非常广泛,目前常用的版本包括Microsoft Excel 2003和Microsoft Excel 2010。目前最新版是Microsoft Excel 2016。 使用Microsoft Excel生成的电子表格数据有如下4个特点。 (1) Excel的工作簿(Workbook)是一个三维电子表格,一个工作簿由若干个工作表构成,每个工作表本身就是一张表格。2003版的Excel最多可以管理65536行和256列,2010版支持的最大行数和列数分别扩大了16倍和64倍,达到1048576行和16384列。 (2) Excel提供了强大的数据分析功能。利用Excel提供的函数和公式以及数据分组等功能可以完成许多日常的财务数据分析和统计。 (3) Excel提供了强大的文件转换功能,可将文本文件、XML文件、DBF文件等直接转换为Excel工作簿文件,为数据的共享、快速录入及转换提供了极大的方便。 (4) Excel提供了强大的作图功能,操作使用方便,可从工作表中灵活地提取所需的数据,快速生成二维或三维的条形图、柱形图、饼图、环形图、散列图、曲面图、雷达图等。 对于Microsoft Excel电子表格数据文件的访问有以下5种方法可供选择。 (1) Excel软件 按后缀名划分,Excel文件可以分为两种: 一种是xls文件,2000版、2002版和2003版软件适用;另一种是xlsx文件,适用于2007版、2010版、2013版和2016版。高版本软件可以采集低版本软件的数据,例如使用2003版的Excel可以打开所有的xls文件。如需采集xlsx文件,可以考虑升级Excel软件到2010版,也可以去微软官方网站https://www.microsoft.com/zhcn/download/details.aspx?id=3&751be11fede85a0c058c2ee190a24fa6=True,下载安装兼容包,如图421所示。 图421Microsoft Office文件格式兼容包官方下载页面 (2) 使用数据库引擎通过编程实现 在高级语言程序软件(如Visual Basic)中使用Jet引擎。Jet引擎是一个访问Excel数据文件的方便、高效的数据库引擎。 (3) 使用ODBC 首先用Excel类型的驱动程序创建ODBC数据源,然后通过DBMS的实用工具或数据库前端开发工具(如Power Builder)连接ODBC数据源,访问数据。 (4) 调用Excel对象库编程实现 在程序中动态创建一个Excel对象,用这个对象提供的方法打开Excel的工作簿,然后利用这个对象访问不同工作表中的数据。 (5) 数据库管理系统的导入功能 利用Microsoft Visual FoxPro、Microsoft Access、Microsoft SQL Server等数据库产品中的数据导入/导出向导,可以将Excel数据文件导入相应的目标数据库中。目前许多审计软件,如AO 2011和“审计数据采集分析2012”,都包括Excel电子表格导入向导。 电子表格和关系数据库具有某种形式的对应关系。具体地说,一个工作簿可以对应一个关系数据库,一张工作表可以对应关系数据库中的一张表,工作表中的每一列可以对应表中的一个字段,工作表中的每一行可以对应表中的一条记录,如图422所示。 图422Excel电子表格与关系数据库的对应关系 因此,可以将一个Excel工作簿文件当作一个关系数据库来对待,像访问数据库一样来访问Excel工作簿。但这是有前提条件的。在访问Excel电子表格中的数据时,要特别注意以下3点。 (1) 关系数据库的规范化问题 由于Excel工作表的格式非常丰富,标题栏可以有很多,大标题下还可以有子标题,表中还可以有表。如果利用访问数据库的方法对这样的数据进行访问,往往是无法正确读取数据的。因为它不满足关系数据库的规范化要求,即一个关系至少是第一范式的,每个属性是不可分割的。这时候,应该保证每一列只有一个标题,标题之间不可重复,而且这个标题是最高层次的标题。 (2) 数据类型的一致性问题 Excel工作表中每一个单元格都可以有不同的数据类型,因此每一列中的数据类型可能不一致。而关系数据库要求表中每个字段的类型是固定的。如果出现数据类型不一致的情况,需要先统一Excel工作表中每一列的数据类型。 (3) 数据的独占性问题 通常数据库管理系统要求独享Excel工作表的控制权限。换言之,一个处于打开状态的Excel工作表不能被数据库管理系统访问。因为处于打开状态的Excel文件已经被Excel软件使用,控制权限在Excel软件那里了,不满足数据库管理系统要求独占Excel工作表的控制权限的要求。 以下通过举例的方式讲解Excel数据的采集。 例4.5某行信贷报表.xls文件的采集 某行信贷报表.xls文件的内容如图423所示。 【解答】 例4.5在工作簿中没有包含标题,因此在数据采集时应去掉“首行包括列名称(F)”前的复选框默认选中的状态,如图424所示。数据采集结果如图425所示。 图423某行信贷报表.xls文件的内容 图424数据采集时需勾选“首行不包括列名称”的复选框 图425例4.5采集结果 例4.6培训登记表.xls文件的采集 例4.6的待采集数据每10条为一个部分,前有表头,后有表尾,如图426所示。这样的Excel文件无法直接导入数据库,需要对表的内容进行清理,去掉所有的表头和表尾,并只保留最上方的一个标题行,如图427所示,整理之后的数据才可以用数据库管理系统实现正常导入。 图426培训登记表.xls文件的内容 图427培训登记表.xls整理后的情况 4.2.1.3XML数据采集 XML 是可扩展标记语言(Extensible Markup Language)的缩写,其中的标记(markup)是关键部分。创建内容后可以使用限定标记来标识它,从而使每个单词、短语或块成为可识别、可分类的信息。XML是一种很像超文本标记语言的标记语言,它的设计宗旨是传输数据,而不是显示数据;它的标签没有被预定义。需要用户自行定义标签;它被设计为具有自我描述性;1998年2月,XML1.0就成了W3C的推荐标准。 XML由3个部分构成,它们分别是: 文档类型定义(Document Type Definition,DTD),即XML的布局语言;可扩展的样式语言(Extensible Style Language,XSL),即XML的样式表语言;可扩展链接语言(Extensible Link Language,XLL)。 (1) DTD DTD规定了文档的逻辑结构。它可定义文档的语法,而文档的语法反过来也能够让XML语法分析程序确认页面标记使用的合法性。DTD定义了页面的元素、元素的属性及元素和属性间的关系。元素与元素间用起始标记和结束标记来定界,对于空元素,用一个空元素标记来分隔。每一个元素都有一个用名字标识的类型,也称为它的通用标识符,并且它还可以有一个属性说明集。每个属性说明都有一个名字和一个值。理想定义应该面向描述与应用程序相关的数据结构,而不是如何显示数据。也就是说,应该把一个元素定义为一个标题行,之后让样式表和脚本定义显示标题行。 DTD不具强制性。对于简单的应用程序来说,开发商不需建立自己的DTD,可以使用预先定义的公共DTD或不使用。即使某个文档已经有DTD,只要文档组织是良好的,语法分析程序也不必对照DTD来检验文档的合法性。服务器可能已执行了检查,所以检验的时间和带宽将得到大幅度节省。 可以采用XML Schema来代替DTD用于定义管理信息等更强大、更丰富的特征。 XML Schema使用XML语法描述文档结构,可以用XML解析器来解析,支持全局性元素(在整个XML文档中以相同方式使用的元素)和局部性元素(在特定的上下文中有不同的含义的元素),提供了丰富的数据类型(如整型、布尔型、日期类型等),还可以根据需要自定义数据类型以支持对元素的描述。 (2) XSL XSL是用来规定XML文档样式的语言。XSL能使Web浏览器改变原有文档的表示法,例如改变数据的显示顺序,不必再与服务器进行交互通信。通过样式表的变换,同一文档可以显示得更大,或经过折叠只显示外面的一层,或者变为打印格式。 XSL凭借其本身的可扩展性,能够控制无穷无尽的标记,而且控制每个标记的方式也是无穷尽的,这也给Web提供了高级的布局特性,如文本的旋转、多列和独立区域。同时支持国际书写格式,可在一页上混合使用从左至右、从右至左及从上至下的书写格式。就如同XML介于HTML和SGML之间一样,XSL标准是介于CSS和SGMI的文档样式语义和规范语言之间的。 (3) XLL XLL支持Web上已有的简单链接,而且将进一步扩展链接,包括终结死链接的间接链接及可从服务器中只查询某个元素的相关部分链接等。 超文本标记语言(HTML)仅仅执行历来与超文本系统概念相关的极少功能,仅支持最简单的链接形式,即指向硬编码位置的单向链接,这与XML相比有着很大的差别。在为XML所设想的真正超文本系统中,所有典型的超文本链接机制将全部得到支持,包括: 与位置无关命名,双向链接,可在文档外规定和管理的链接,元超链接(如环路、多个窗口),集合链接(多来源),Transclusion(链接目标文档是链接源文档的一部分),链接属性(链接类型)。 所有这些可通过XLL实现。由于XML以SGML作为基础,因此,XLL基本上属于Hytime(超媒体/基于时间的结构语言,ISO10744)的一个子集,另外它还遵循文本编码所倡议规定的链接概念。 XML能方便有效地表示结构化数据,这就使得XML可以作为描述和传输数据的手段。使用XML进行数据交换已经成为计算机软件领域的标准技术模式。通过XML实现数据的标准化、结构化,解决了在不同平台、不同系统之间的数据结构/模式的差异,使得数据层在XML技术的支持下统一起来。 以下通过举例的方式讲解XML数据的采集。 例4.7总账.xml 文件的采集 总账.xml文件的内容如图428所示。 图428总账.xml文件的内容 采集XML格式的文件,建议采用“审计数据采集分析2012”软件。以“审计数据采集分析2012”采集为例,步骤如图429至图435所示。 步骤一: 使用“审计数据采集分析2012”打开一个项目,点击菜单选项“数据”,选择“数据导入向导”,点击“下一步”按钮,选择“新建数据导入定义”,点击“下一步”按钮,点击“添加”按钮,“数据源类型”选择“XML数据文件”,如图429所示。 图429总账.xml 文件的采集——步骤一 步骤二: 双击以引入该文件,结果如图430所示。总账可拆分为总账基础信息、记账凭证类型、会计科目、科目辅助核算、科目余额及发生额、记账凭证、报表集、报表项数据、本年预算指标、预算支出情况表、预算收入情况表共11张表。 图430总账.xml 文件的采集——步骤二 步骤三: 点击“下一步”按钮,进入“XML数据导入设置”,如图431所示。通过预览数据表可以查看待导入的各表的情况,图432显示了预览总账的会计科目这张表的情况。 图431总账.xml 文件的采集——步骤三 图432总账.xml 文件的采集——预览总账的会计科目 步骤四: 点击“设置字段”按钮,进入对相应预览表的目标列字段名称和类型的设置,如图433所示。 图433总账.xml 文件的采集——步骤四 步骤五: 依次点击“确定”按钮,3次“下一步”按钮,再点击“确认”按钮,完成XML格式电子数据的采集,结果如图434和图435所示。 图434总账.xml 文件的采集——步骤五(完成导入) 图435总账.xml 文件的采集——步骤五(结果显示) 此外,Microsoft Access也提供对XML语言的支持,因此,可先将XML格式标准数据导入Access(实践表明Microsoft Access 2010及以上的版本对常见的XML文件识别成功率会高一些),再利用SQL Server的导入和导出向导实现数据采集。 如果需要使用Microsoft SQL Server直接采集XML文件,也可以使用Microsoft SQL Server 2008及以上版本的商务智能开发工具集(Business Intelligence Development Studio)来实现。 4.2.1.4其他常见格式数据采集 其他常见格式数据包括Word文档文件、PDF文档文件、网页文件、WPS文档文件、ET电子表格文件等。 实现对这些文件的数据采集的关键词是“转换”,即将这些文档中包含的待转换数据转换成已知的带分隔符的文本文件或者Excel电子表格文件,然后用前几节的方法实现对数据的采集。 以Word文档为例,如图436所示,这个文档中通过表格的形式存放了某市就业再就业培训人员(报名、结业)登记表的内容。通常可将Word文档中的表格通过复制粘贴的方式将内容转到Excel文档或文本文件中,然后导入数据库。 图436待采集的Word文档 PDF文档文件、网页文件中的表格内容处理方式同上。 WPS文档文件与Word文件是兼容的,因此处理方式同Word文件。 ET电子表格文件是WPS OFFICE办公套装中的电子表格文件,它与Excel文件是兼容的,可以直接另存为后缀名为XLS或XLSX的Excel电子文档文件。接下来的采集就顺理成章了。 [MZ(3]4.2.2数据库数据采集[MZ)] 常用数据库的数据采集,主要涉及DBF、Access、SQL Server、Oracle等数据库。 4.2.2.1DBF数据采集 DBF数据文件是后缀名为dbf的一系列文件的统称,这些文件包括dBase、FoxBASE、FoxPro以及VFP数据库软件的各个版本生成的数据文件。DBF数据文件的特点是一个文件包含一张表的内容,有多少张表就需要多少个文件来管理。目前企业的信息系统使用DBF数据库的已经不多了,但是作为一种数据文件的交换格式,DBF数据文件兼容性好,许多大中型数据库在数据导出时可以选择目标文件为DBF格式。 对于dBase、FoxBASE、FoxPro等数据库文件可以通过Access、Excel、SQL Server等数据库管理系统直接采集,对于VFP数据库文件,虽然也是dbf的后缀名,但是需要在采集数据的电脑上安装VFP的驱动程序(可以是ODBC驱动程序,也可以是OLE DB驱动程序),配置成功后才能完成采集。 以下通过举例的方式讲解DBF数据的采集。 例4.8xfj91.dbf的采集 【解答】 仅从后缀名dbf无法判断到底是哪一种格式的数据库文件。可以用尝试法,首先以dBase5的兼容方式(dBase5基本上与FoxBASE、FoxPro的各个版本的数据库文件兼容)尝试导入,如果不成功再尝试VFP的兼容方式导入。导入的时候可以一次性选中同一目录下所有的表。 由于Microsoft SQL Server 2008的数据导入/导出向导不再直接支持对dbf文件的采集,因此可以考虑采用“审计数据采集分析2012”(将它和Microsoft SQL Server 2008的实例关联后)采集。采集时在“数据导入向导”的“选择添加数据源”窗口点击“添加”按钮,在弹出的“链接定义”窗口选择数据源类型为“dBase 5.0”即可,如图437所示,点击“设置”按钮,回到“数据导入向导”的“选择添加数据源”窗口,如图438所示,点击“下一步” 图437选择链接定义(例4.8) 进入“数据导入向导”的“选择转换数据表”窗口,勾选“全部导入”复选框,如图439所示,点击2次“下一步”按钮、1次“确定”按钮,完成采集,结果如图440所示。 图438选择添加数据源(例4.8) 图439选择转换数据表(例4.8) 图440采集结果(例4.8) 例4.9VFP兼容数据库表的采集 【解答】 首先以dBase5的兼容方式尝试导入失败后,可尝试VFP的兼容方式导入。通常情况下Microsoft SQL Server 2008未安装VFP的OLE DB驱动,可从微软公司网站免费下载VFP的OLE DB驱动,下载地址为: http://www.microsoft.com/enus/download/ details.aspx?id=14839,下载页面如图441所示。安装VFPOLEDBSetup.msi后,就可以在数据源中选择,如图442所示。 图441VFP OLE DB下载页面(例4.9) 图442VFP兼容数据源选择(例4.9) 4.2.2.2Access数据采集 Access是微软公司OFFICE办公解决方案中的数据库软件,使用非常广泛,常见的版本包括Microsoft Access 2003(数据库文件的后缀名为MDB),Microsoft Access 2010(数据库文件的后缀名为ACCDB),目前最新的版本是Microsoft Access 2016。 一个Access数据文件可以包括多张数据库表,而数据库表根据实际存放的物理位置的不同可以分为本地表和链接表,本地表存放本地数据,链接表中存放的是表的定义,表的数据则存放在另外一个数据库中,这个数据库可以是Jet引擎所能访问的任何数据库,包括ODBC数据源。实际上,本地表中还包括存放系统数据的系统表。 Access数据库文件的上限为2G字节(含系统对象所需的空间)。同时访问单个文件的理论并发用户为255,实际测试表明4个以上的并发客户端访问极易造成死锁。这就决定Access在单机用户管理小数据量的情况下更能发挥优势。 对于Microsoft Access数据文件的访问可以直接使用Microsoft Access软件,可以借助第三方工具(如Delphi)提供的接口,也可以在支持COM的开发环境(如Visual Basic)中调用Microsoft提供的对象库等。以下主要介绍前两种方法。 (1) Access软件 通过Access软件访问Access数据文件是最直接、最便捷的一种方法。毕竟Access数据文件是由Access软件创建的,二者是紧密结合的。对于简单的数据库应用,Access软件所提供的功能已经足够了,而且Access软件提供了一系列的对象和VBA语言让用户定制自己的应用。在Access软件中常用Microsoft Jet数据库引擎来访问MDB数据文件。 Access数据库文件按后缀名不同可分为MDB文件和ACCDB两种,前者是直到2003版的Access软件管理的数据库文件格式,后者是2007版新采用的数据库文件格式。高版本软件可以采集低版本软件的数据,例如使用2003版的Access软件可以打开所有的MDB文件。如需采集ACCDB文件,可以考虑使用Microsoft Access 2010,也可以去微软官方网站https://www.microsoft.com/zhcn/download/details.aspx?id=3&751be11fede8 5a0c058c2e e190a24fa6=True,下载安装兼容包。 (2) 数据库访问接口 考虑到Access数据文件使用的广泛性,一些第三方的开发工具也提供了经过优化的访问Access数据文件的接口,如Delphi中的BDE。此外,利用ODBC访问Access数据文件也是一种非常可行的办法。许多审计软件和DBMS实用工具也都支持Access数据文件类型。 以下通过举例的方式讲解对Access数据的采集。 例4.10某市2011至201404土地供应情况表.mdb的采集 某市2011至201404土地供应情况表.mdb文件的内容如图443所示。 图443某市2011至201404土地供应情况表.mdb文件的内容 【解答】 可以通过Microsoft SQL Server 2008的导入和导出向导,一次性将Access数据库中所有的表采集到Microsoft SQL Server。数据源的选择中指定数据来自“Microsoft Access”,如图444所示,目标选择Microsoft SQL Server数据库,如图445所示,勾选待采集的表“某市2011至201404土地供应情况表”,如图446所示,由导入和导出向导自动完成数据采集过程,采集完成如图447所示。 图444数据源选择(例4.10) 图445目标数据库选择(例4.10) 图446确定采集源表和目标表(例4.10) 图447采集完成(例4.10) 在本节的最后让我们来讨论一下Access软件在数据采集和管理过程中的适用范围。 Access软件通常可以有效率地管理几十万条数据的数据库,数据量再增大的话,Access软件的执行效率会受到比较大的影响,这时可以考虑使用Microsoft SQL Server进行数据的采集和管理。当需要存储或展示万条以下数据量的数据文件时,如果涉及的查询并不复杂,也可以考虑使用Excel代替使用Access对数据进行管理。 由于财务数据一般数据量不是很大,可以满足Access软件对于被管理数据在数据量上的要求,因此可以使用Access软件分析财务数据。虽然Access可以通过链接表的方式将数据库文件串联起来并通过UNION ALL的方式查询,理论上实现无限量数据的管理,但是效率将极大地受到影响。实践表明当待分析的业务数据远小于2G字节时使用Access软件是可行的。 4.2.2.3SQL Server数据采集 Microsoft SQL Server是审计实践中常用的数据采集和分析处理工具,它是由微软公司开发的,常用版本为2000、2005、2008、2008R2和2012版,最新版是2016(本书主要采用2008版作为讲解对象)。作为待采集的数据源,Microsoft SQL Server 2008数据有3种不同的表现形式,以下分别针对这3种不同形式给出相应的采集方法。 1. 数据库表 第一种表现形式为当前使用的数据库中的某些表,可以通过Microsoft SQL Server的导入和导出向导直接将待采集的数据库表选中后导入指定的目标数据库,如图448所示。 图448Microsoft SQL Server表采集方式 图449Microsoft SQL Server数据库备份还原方式 2. 数据库备份文件 第二种表现形式为数据库备份文件,可以通过Microsoft SQL Server的“任务”→“还原”→“数据库”功能将数据库的备份文件恢复到数据库管理系统中,如图449和图44所示。 3. 数据库文件 第三种表现形式为数据库文件(主数据文件MDF和日志文件LDF,有时还包括次数据文件NDF),通过Microsoft SQL Server的“附加数据库”功能将数据库文件加载到数据库管理系统中,如图450和图451所示。 图450Microsoft SQL Server数据库文件附加方式步骤一 4.2.2.4Oracle数据采集 Oracle公司是目前世界上最大的数据库软件厂商,于1977年在美国成立。Oracle数据库管理系统在大型关系数据库管理系统市场上占有率第一,最新版本的Oracle数据库产品为Oracle 12c。在国内有许多单位的信息系统采用了Oracle数据库管理系统,较早的版本有Oracle 8和Oracle 8i,目前在运行中的产品主要是Oracle 10g和Oracle 11g。 Oracle数据库数据量通常较大,数据采集时常采用备份恢复法,即将待采集电子数据备份为DMP文件,然后在目标系统上恢复的方法。备份文件恢复法的实现主要分为两个步骤,一是从被审计单位获得DMP文件,二是将所获得的DMP文件恢复到审计计算机系统中。 图451Microsoft SQL Server数据库文件附加方式步骤二 1. 从被审计单位获得DMP文件 当从被审计单位接收后缀名为DMP的Oracle备份文件时,审计人员通常还需要和被审计单位的技术人员做进一步的交流,以了解获取的DMP文件的技术背景,为后续的数据库恢复做好准备。 (1) DMP文件是如何生成的 DMP文件目前有两种生成方法。一是通过调用Oracle的EXP命令生成,此时恢复Oracle需要使用相应的IMP命令。这种方法直到最新版的Oracle 12c都适用。Oracle 10g发行后,技术人员在备份时多了一个选择,可以通过数据泵(Data Dump)技术,使用EXPDP和IMPDP命令在Oracle的服务器端实现对数据库的备份和恢复。IMP只适用于EXP导出文件,不适用于EXPDP导出文件;IMPDP只适用于EXPDP导出文件,而不适用于EXP导出文件。 (2) DMP文件备份的是什么级别的数据 对于IMP和IMPDP,均可以实现表备份、用户备份、表空间(Tablespace)备份和全库备份等4种备份。从目标文件看,只能看到是一个后缀名为DMP的文件。有必要弄清楚该文件是表级的、用户级的、表空间级的还是全库级的备份,以便使用相应的方式恢复。 (3) 备份数据来源的数据库实例所涉及的表空间的情况 Oracle数据文件是存放在表空间里的,每个表空间有唯一的逻辑名称,可以对应若干个物理文件,每个物理文件的上限约32G字节。每个数据库有默认用户表空间,名称为users,默认临时表空间,名称为temp。如无明确指定,用户表通常存放在users表空间中,临时文件使用temp表空间。 (4) 备份数据来源的数据库实例在安装时使用的字符集的情况 Oracle数据库实例在安装时需要给出使用的字符集,通常默认的是ZHS16GBK。字符集的选择对于数据库中对汉字的显示非常重要。如果恢复数据库时将DMP文件恢复到的数据库实例在新建时使用的字符集与备份数据来源的数据库实例在新建时使用的不一致,则极有可能恢复出来的数据中文无法正常显示。 2. 将所获得的DMP文件恢复到审计信息系统中 为了提高数据恢复及后续分析的效率,Oracle数据库的恢复通常在服务器上进行。 (1) 在审计计算机系统中安装Oracle数据库,版本不得低于被审计单位的Oracle数据库。 (2) 新建数据库实例,注意字符集的选择。 (3) 新建必要的用户,为用户授予足够的权限,按需建立表空间。 (4) 调用IMP或IMPDP命令,完成对DMP文件的恢复。注意生成恢复日志文件,与从表审计单位获得的备份日志文件比对,以确保相应的表都采集完成了。 例4.11Oracle备份恢复实例 审计人员在审计某市社保资金时,采集了全市的社保数据库的全库DMP文件,使用IMP命令生成。试恢复。 【解答】 步骤一: 该DMP文件压缩后超过300G,在服务器上解压缩后约3T。服务器上已安装64位Oracle 11g数据库。审计人员在服务器上先建Oracle实例YBmoushi(字符集 ZHS16GBK)。然后建三个用户(audit001、audit002、audit003),密码均为1234。这三个用户的表空间均为系统默认的用户表空间users,临时表空间为系统默认临时表空间temp。相关语句如下: create user audit001 identified by 1234 default tablespace USERS temporary tablespace Temp; grant dba to audit001; grant connect,resource to audit001; ALTER USER audit001 DEFAULT ROLE ALL; create user audit002 identified by 1234 default tablespace USERS temporary tablespace Temp; grant dba to audit002; grant connect,resource to audit002; ALTER USER audit002 DEFAULT ROLE ALL; create user audit003 identified by 1234 default tablespace USERS temporary tablespace Temp; grant dba to audit003; grant connect,resource to audit003; ALTER USER audit003 DEFAULT ROLE ALL; 步骤二: 根据被审计单位提供的DMP文件相关的表空间的情况在服务器上新建表空间。由于许多表的记录数多达上亿条,其对应的表空间往往超过32G,因此新建的表空间往往需要对应多个物理文件。以下是部分创建表空间的语句。 CREATE TABLESPACE YW_TS DATAFILE 'E:\Data\Moushi\ro9_YW01' SIZE 6980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW02' SIZE 6980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW03' SIZE 6980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW04' SIZE 6980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW05' SIZE 6980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW06' SIZE 6980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW07' SIZE 6980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW08' SIZE 6984M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW28' SIZE 20000M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW09' SIZE 6984M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW10' SIZE 5980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW11' SIZE 5980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW12' SIZE 5980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW13' SIZE 5980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW14' SIZE 5980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW15' SIZE 5980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW16' SIZE 5980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW17' SIZE 5980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW18' SIZE 5980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW19' SIZE 5980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW20' SIZE 5980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW21' SIZE 5980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW22' SIZE 5980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW23' SIZE 5980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW24' SIZE 5980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW25' SIZE 20000M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW26' SIZE 20000M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW30' SIZE 20000M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW29' SIZE 20000M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW27' SIZE 20000M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW31' SIZE 20000M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW32' SIZE 20000M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW33' SIZE 20000M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW34' SIZE 20000M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW35' SIZE 20000M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW36' SIZE 30704M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW37' SIZE 30704M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW38' SIZE 30704M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW39' SIZE 32760M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW40' SIZE 32760M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW41' SIZE 32760M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW42' SIZE 32760M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW43' SIZE 32760M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_YW44' SIZE 1144M AUTOEXTEND OFF LOGGING ONLINE PERMANENT EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT MANUAL / CREATE TABLESPACE ZG_BIG_IDX_TS DATAFILE 'E:\Data\Moushi\ro9_ZG_BIG_IDX01' SIZE 4480M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_ZG_BIG_IDX02' SIZE 3950M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_ZG_BIG_IDX03' SIZE 3950M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_ZG_BIG_IDX04' SIZE 3980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_ZG_BIG_IDX05' SIZE 3980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_ZG_BIG_IDX06' SIZE 3584M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_ZG_BIG_IDX07' SIZE 3824M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_ZG_BIG_IDX08' SIZE 8312M AUTOEXTEND OFF LOGGING ONLINE PERMANENT EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT MANUAL / CREATE TABLESPACE ZG_GRXZBG_TS DATAFILE 'E:\Data\Moushi\ro9_ZG_GRXZBG01' SIZE 3980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_ZG_GRXZBG02' SIZE 3980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_ZG_GRXZBG03' SIZE 3983M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_ZG_GRXZBG04' SIZE 10000M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_ZG_GRXZBG05' SIZE 4080M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_ZG_GRXZBG06' SIZE 4728M AUTOEXTEND OFF LOGGING ONLINE PERMANENT EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT MANUAL / CREATE TABLESPACE ZG_GSJFJLB_TS DATAFILE 'E:\Data\Moushi\ro9_ZG_GSJFJL01' SIZE 5980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_ZG_GSJFJL02' SIZE 3980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_ZG_GSJFJL03' SIZE 3980M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_ZG_GSJFJL04' SIZE 10000M AUTOEXTEND OFF, 'E:\Data\Moushi\ro9_ZG_GSJFJL05' SIZE 3576M AUTOEXTEND OFF LOGGING ONLINE PERMANENT EXTENT MANAGEMENT LOCAL AUTOALLOCATE BLOCKSIZE 8K SEGMENT SPACE MANAGEMENT MANUAL / 步骤三: 恢复数据库 imp audit001/1234@YBmoushi file=D:\社保资金审计\dmp\exp_0514.dmp full=y log=D:\社保资金审计\dmp\exp_0514_20160606.log buffer=655500 commit=y ignore=y rows=y indexes=n constraints=n feedback=100000 导入生成的日志文件,如图452和图453所示。 图452Oracle数据库恢复日志文件1 图453Oracle数据库恢复日志文件2 [MZ(2]4.3财务数据采集[MZ)] 被审计单位财务数据的采集,首先看需采集的财务软件是否支持《财经信息技术会计核算软件数据接口》国家标准(GB/T 24589)。如果满足,则导出符合国家标准的XML格式的财务数据文件,然后使用AO2011采集。参看3.3.1小节“2. 通过AO2011采集国标财务数据”。 对于尚未支持国家标准(GB/T 24589)的财务软件可以从财务软件前台备份财务账套,然后在AO2011中选择支持该财务账套所属财务软件的模板进行数据采集。也可以考虑在审计计算机系统中安装被审计单位财务软件,然后将备份的财务账套恢复到财务软件中直接查看。 对于尚未支持国家标准(GB/T 24589)的财务软件,可以从软件后台找到其使用的数据库系统,此时对财务数据的采集可参看对业务数据库数据的采集方法。 此外,所有的财务软件都支持前台实时查询。如果审计关注的财务信息非常明确,而且数据量不是很大,则可以从前台分次查询获得需要的查询结果,然后将查询结果通过财务软件的导出功能(有的财务软件通过“打印到文件”实现),导出电子数据,通常财务软件支持导出电子表格或文本格式的电子数据。 当审计人员需要较长时间在被审计单位开展审计,且被审计单位的财务软件采用B/S或C/S的结构部署的时候,可以考虑让被审计单位给审计人员配置一个或几个查询终端,开放年度和账套的查询权限,方便审计人员随时从前台查询。 [MZ(2]4.4拓展阅读[MZ)] 本章拓展阅读包括4个部分,一是ERP数据采集策略,二是特殊格式文本的采集技术,三是容错数据采集方法,四是Oracle备份文件恢复时经常遇到的问题及解决方案。 [MZ(3]4.4.1ERP数据采集策略[MZ)] 目前相当一部分大型国企已经实施了ERP(Enterprise Resource Planning,企业资源计划)。ERP的应用带来了物流、资金流与信息流的融合,使企业的财务信息与业务信息融为一体,因此,在对实施了ERP的大型企业进行审计时,如何充分利用ERP系统的信息开展审计,成为审计必须解决的问题。SAP作为最具实力和最负盛名的ERP厂商之一,其R/3产品(2005年更名为mySAP)是很多大型企业实施ERP的首选,在大型企业中有着很高的市场占有率。R/3系统具有高度的集成性、灵活性和开放性,其底层数据规模非常庞大,结构复杂,一直以来都是审计数据采集和分析的难点。 1. SAP R/3数据采集范围的确定 R/3系统包括生产计划(PP)、工厂维护(PM)、销售与分销(SD)、物料管理(MM)、财务会计(FI)、管理会计(CO)、财产管理(AM)、人事管理(HR)、质量管理(QM)、项目管理(PS)、投资管理(IM)等模块,各模块既可以单独使用,也可以和其他模块相结合,实现集成应用。这些模块是建立在一个统一的数据平台之上的,整个数据平台共有2万余张数据表,字段超过200万个。各模块之间密切结合,数据之间的关系也异常复杂。因此,必须首先确定数据采集的范围,才能高效地实施数据采集和分析工作。 R/3系统平台具有高度的开放性,在系统前台浏览信息时,可以通过系统提供的技术信息帮助直接查看到前台数据所涉及的后台数据表及字段。后台数据表分为3类,即透明表(Transparent Table)、簇表(Cluster Table)和池表(Pooled Table)。透明表与数据库中的物理表一一对应;簇表和表池在数据库中没有一一对应的物理表,它们是物理表经过合并、解析、筛选等处理之后展示出来的,目的是提高系统性能,降低复杂度。此外,系统还可以通过SE11(数据字典)、SE16(数据浏览)等事务代码直接查看后台数据表结构和数据,对于簇表和池表还可以查看其来源于哪张物理表。因此,如果确定了审计关注的业务范围,就可以通过前台操作和观察基本确定审计所关心的数据库表的范围,即数据采集的对象。由于业务流程的灵活性和数据结构的复杂性,确定数据采集对象可能是一个反复补充和完善的过程。 一般来说,审计必需的数据包括各种类型的主数据,如物料、客户、供应商,以及关键的财务及业务单据如凭证、采购订单、销售合同及订单、发货单、发票等,与这些数据相关的代码也是审计必需的。此外,审计还需要关注一些与系统架构密切相关的关键数据,如公司代码、销售组织、采购组织、利润中心等。 2. 数据采集策略 一般来说,有两大类数据采集策略可供选择,一是利用系统功能进行前台采集,二是绕开系统直接采集物理数据。两类策略各有优缺点,适用于不同情况。 (1) 利用系统功能前台采集 SAP R/3的前台提供了底层数据直接查询功能,此外,系统还提供了开发复杂查询的平台,即Query功能。这些都为数据采集提供了可行的路径。比较可行的采集方式有两种,一是利用系统查询操作采集数据,二是使用SAP提供的报表开发工具Query开发查询采集数据。 SAP R/3的数据浏览操作SE16可以直接查询底层数据表,查询的结果也可以保存,因此可以利用这种方法采集数据。数据浏览操作的优点在于操作简便,且采集适用范围大,不仅可以采集透明表数据,还可以采集簇表和池表数据。缺点一是数据直观性较差;二是功能受到系统的限制,如查询返回的记录数不能超过最大值,系统可能对数据浏览操作的对象范围进行限制等;三是前台直接查询返回数据量较大时容易影响系统正常运行。 Query是SAP R/3平台提供的图形化报表工具,可以利用其对底层数据进行综合查询,因此也可以作为数据采集的方法。Query支持较复杂的查询,支持表连接、分组和聚合计算、指定字段别名等功能。利用Query采集数据的优点是功能比较灵活,可直接生成满足审计业务需求的中间表,缺点是Query查询开发要求审计人员具有一定的技术基础。 上述采集策略适用于审计周期较短、审计范围较小、关注对象比较明确的情况,如针对具体单位的某项具体业务采集相关数据。但总的来说,前台数据采集受到环境和平台的影响,采集数据的可信度、完整性有所欠缺,采集速度也较慢。如果审计人员有一定的技术基础,且时间允许,可采用下述的第二种策略。 (2) 直接采集物理数据 后台数据直接采集速度快、采集范围全、可信度高,一直受到审计人员的青睐,是审计数据采集的主要方式。 后台数据直接采集又可分为三种具体方法: 一是通过数据库备份文件采集;二是通过数据交换文件(如文本文件)采集;三是使用数据导入/导出工具直接采集。 数据备份文件采集的优点是采集方便,对系统运行影响较小,如果系统的定期备份能满足审计要求,甚至可以直接使用定期备份文件。缺点在于恢复数据需要搭建相应的数据库环境,如果采集的不是常见的数据库系统的数据,恢复数据的工作将会异常麻烦。 使用数据交换文件采集的优点是适应的数据库平台较多,但数据交换文件(一般采用文本文件)导入过程操作烦琐,并且容易出错。 使用数据导入/导出工具直接采集的优点是采集方便,特别是采集数据可直接导入目标数据库供审计人员使用,降低了工作量。但是缺点在于采集作业可能对系统产生一定影响,因而这种方式容易受到被审计单位的抵触。 由于SAP R/3系统数据库表和字段的命名方式比较晦涩,难以理解和记忆,且表间关系较复杂,所以对采集数据进行清理和转换的工作量较大。更重要的是,由于系统数据库规模庞大,结构复杂,而且各企业的业务模式也不尽相同,因此,审计过程中,掌握数据结构、逻辑关系、含义并结合业务对数据进行分析是一个逐步探索的艰难过程。鉴于上述原因,这类策略适用于审计周期较长、范围较广的情况,同时要求审计人员具有一定的数据分析能力。此外还应当注意的是,这种方式不能采集物理数据库中并不存在的簇表和池表。 3. 数据采集方法 (1) 通过SAP数据操作采集 SAP提供了数据查询操作事务码SE16,只要知道底层数据库表的名字,就可以进行数据查询。操作步骤如下: ① 使用具有SE16权限的账号登录系统。 ② 在事务码输入框内输入“SE16”并按回车键。 ③ 在数据表选择界面输入要查询的数据表的名字。 ④ 填入查询条件,如需返回所有记录,则所有条件都为空;同时设置返回记录的最大条数和显示宽度(尽可能大以保证数据完整)。执行之后,将得到的返回结果下载到本地就可以完成一张数据表的采集工作。 使用这种方法,每次只能对一个后台数据表进行查询和数据采集。 (2) 使用SAP报表工具Query采集 Query是SAP提供的开放的报表开发工具。Query功能强大,结合ABAP语言(高级企业应用编程语言),可开发具有复杂逻辑关系的报表。审计可以通过Query的简单运用进行数据采集。 使用Query查询数据,首先要了解信息集和用户组的概念。信息集可看作底层数据的视图,信息集可以分配给用户组,一个用户组下的用户可以共享分配给该用户组的所有信息集。采集工作需要以下几个步骤: ① 使用事务码SQ03(用户组维护)建立用户组,将当前用户分配到用户组中。 ② 使用事务码SQ02(信息集维护)建立信息集。首先,要添加需要的基础表,例如,当需要采集采购订单数据时,一般要添加采购订单抬头数据表VABK、行项目数据表VBAP以及必要的代码表、供应商主数据表等基础表;然后,根据需要在各基础表之间建立适当的连接;最后,选择需要采集的基础表字段,同时可以为字段设置别名。完成之后就可以保存信息集。 ③ 将信息集分配给用户所在的用户组。 ④ 使用事务码SQ01(建立查询)在信息集的基础上创建查询。这一步同样可以选择字段,调整选择字段次序,设置输出格式。 ⑤ 执行查询,得到返回结果并保存为本地文件,完成数据采集工作。 (3) 通过数据库备份方法采集物理数据 SAP系统可以构建在不同的数据库平台上,目前比较常见的有Oracle、DB2等。以最常见的Oracle数据库为例,采集前需要搭建恢复数据的Oracle数据库平台,具体采集步骤如下: ① 在源数据库服务器上使用exp命令,将需要采集的数据表备份为备份文件,可一次备份整个数据库也可一次备份一个或若干个数据表。经常用到的备份整个数据库的命令为: exp [user]/[password]@[SID] buffer=65536 feedback=10000 full=y file=[expfile] log=[explogfile] ② 将备份文件复制到用于恢复数据的Oracle数据库服务器上,使用imp命令恢复数据,恢复完整数据库的命令为: imp [user]/[password]@[SID] fromuser=[fromuser] touser=[user] buffer=65536 feedback=10000 ignore=y file=[expfile] log=[implogfile] (4) 数据采集工具直接采集物理数据 Microsoft SQL Server 2008提供的数据导入/导出工具是最常用的数据采集工具。同样以采集Oracle数据库数据为例,采集之前需要在执行采集工作的计算机上安装Oracle客户端,并配置好源数据库的本地Net服务,包括IP地址、端口和实例名。使用Microsoft SQL Server提供的数据导入/导出工具采集数据步骤如下: ① 指定数据源,数据源类型选择“Microsoft OLE DB Provider for Oracle”,在属性页中填写数据源的服务器名称(即目标数据库的本地Net服务名称),然后输入具有查询数据权限的Oracle数据库用户名和密码。 ② 指定目标数据库。 ③ 选择需要采集的数据表,同时可以对采集的字段、别名、数据类型等进行设置。 ④ 执行采集任务。 [MZ(3]4.4.2特殊格式文本的采集技术[MZ)] 所谓特殊格式文本数据,指的是一个文本文件中不但包含数据行,还包括很多不规范的说明信息,甚至一些为了美观而添加的空行。当数据量比较大的时候,特别是数据量达到万条以上之后,如何提取有效数据,是一个值得探讨的问题。 特殊格式文本按字段分隔符的不同可以分为两类,分别是包含不规范行的分隔符文本和包含不规范行的固定宽度文本。下面给出从这两类文件抽取有效数据的解决方案。 1. 处理包含不规范行的分隔符文本 包含不规范行的分隔符文本的特点是文本文件中数据是以分隔符文本表现出来的,其中夹杂着很多“无用”的行。处理的目标就是将这些有用的数据从中抽取出来。处理的办法是归纳每一行的特征信息,然后将用户的选择操作用规则表达,最后在导入数据的时候用规则检查每一行的特征,如果满足用户的选择则导入该行数据,否则就舍弃。 行特征信息结构定义如下: Type LineInfo'行特征信息结构 LineNo As Long '行号,从1开始编号 FirstWord As String '首单词 SegCount As Integer '一行的分段数 SegInfo() As Integer '表示分段类型信息的数组 Tag As Boolean '标记位,这里用来表示是否选中 End Type 其中,行号是必需信息,并且每一行的行号唯一。 操作规则信息定义如下: Type Operation Mode As Byte '四位二进制,分别表示单行、根据首单词、分段数、分段类型信息 LineNo As Long '行号,从1开始编号 FirstWord As String '首单词 SegCount As Integer '一行的分段数 SegInfo() As Integer '表示分段类型信息的数组 Tag As Boolean '标记位,标识是否选中 End Type 定义4.1i=(1,2,3,\:,n)为原始文本文件行号集合。L={li}其中i∈I,为原始文本文件行特征信息集合,其中li是LineInfo类型的一个元组。用户操作规则序列O=(O1,O2,O3,\:,Om-1,Om),其中Oi(1≤i≤m)是Operation类型的一个元组。 操作作用在一行上的结果是Oi(L)=Oi({lj})={Oi(lj)}={lj1}。其中,lj1与lj只有Tag位有可能不同。Oi(lj)操作的含义如下: 如果操作模式为单行,那么如果j等于的Oi行号,则将lj位的Tag位改成Oi的Tag位,否则不做操作;如果模式为多行,则将Oi首单词、分段数、分段类型与lj的相应内容比较(只比较模式中选中的部分),如果一致,则将lj位的Tag位改成Oi的Tag位,否则不做操作。 此处的分段类型一致并不是说类型一样。在文件交换的数据中,主要存在数值、文本、日期时间3种类型。而数值和日期时间都可以用文本表示。因此,如果操作中的分段类型是文本,那么无论行分段信息中的分段类型是什么,都可以认为一致,否则一致就是要求两者的分段类型一样。 软件根据输入的文本文件,分析得到L,然后从L中取子集L′L并在界面上显示,让用户进行抽取操作。用户的每一步操作Oi(1≤i≤m)被记录下来,抽取完成后,界面显示的抽取行集所对应的特征信息集为L″=O(L′)=Om(\:(O3(O2(O1,(L′)))))。 由于用户的选择操作往往带有很大的随意性,因此如果完全按照用户的操作步骤可能会对效率产生比较大的影响,因此,软件O还要对进行优化,得到优化的O的等价集O′,使得O′(L′)=O(L′)。 最后,使用O′对L进行操作,得到最终的行特征信息集,其中Tag为真值的行即为选择的数据行。软件的实现,由于是将数据直接导入数据库,因此,采取逐行进行O的操作,如果结果特征信息的Tag为真值,则将该行数据导入,否则舍弃。 2. 处理不规范行的固定宽度文本 包含不规范行的固定宽度文本文件的处理方法和上述方式基本类似,不同之处在于处理过程中通过行宽、分段数、首单词就可以对分离数据行进行识别。如果在行特征信息中加入分段类型信息,则可以进一步提高数据抽取的精确性。 行特征信息结构定义如下: Type LineInfo'行特征信息结构 LineNo As Long '行号,从1开始编号 FirstWord As String '首单词 SegCount As Integer '一行的分段数 Bytes As Integer '一行的字节数,不包括回车换行 Tag As Boolean '标记位,这里用来表示是否选中 End Type 其中,行号是必需信息,并且每一行的行号唯一。 操作规则信息定义如下: Type Operation Mode As Byte '四位二进制,分别表示单行、根据行宽、首单词、分段数 LineNo As Long '行号,从1开始编号 FirstWord As String '首单词 SegCount As Integer '一行的分段数 Bytes As Integer '一行的字节数,不包括回车换行 Tag As Boolean '标记位,这里用来表示是否选中 End Type 识别过程基本同上,区别在于多行模式的情况下,原来是“将Oi首单词、分段数、分段类型与lj的相应内容比较”,现在要修改为“将Oi行宽、首单词、分段数与lj的相应内容比较”。 [MZ(3]4.4.3容错数据采集技术[MZ)] 当以交互文件格式获取被审计单位的电子数据后,在将电子数据导入数据库系统时,数据源的数据质量对于数据采集的成败有至关重要的作用,有时仅仅是因为数据源中一条数据记录的某一个字段有问题就可能导致整张表的数据采集不能正常进行。 使用Microsoft SQL Server采集“某地税数据3.mdb”中的“税票表3”时使用导入与导出工具,执行到最后一步,弹出错误信息对话框,如图454所示,数据库中仅新建立了一张空表,表中一条数据都没有导进去。重复尝试的结果都是一样的。 图454SQL Server数据采集出错信息 此时,通常要求从被审计单位再次采集电子数据后尝试导入数据库系统。这种做法不但费时,而且在不知道出错信息具体情况时,再次采集电子数据未必管用。 本节提供两种方法容错采集电子数据。一是通过“审计数据采集分析2012”的容错功能选项,二是通过Microsoft SQL Server提供的PACKAGE容错采集。 首先看“审计数据采集分析2012”的容错功能选项。如图455所示。在“数据导入向导”的“选择转换数据表”窗口,勾选最右边的“容错”按钮即可容错采集电子数据。 图455“审计数据采集分析2012”的容错功能 需要注意的是这种数据采集方式将源数据中正确的数据采集入数据库后,对于有问题的数据选择直接丢弃。如果要找出错误数据,可以使用Microsoft SQL Server提供的PACKAGE容错采集。容错导入的实现机制是将数据源表中没有问题的数据记录导入目标表中,而将有问题的数据记录单独保存到文本文件中,并说明导入时出错的类型。用户可以根据出错信息修正出错数据,最后将修改后的数据以文本导入的方式追加到目标表中,以完成数据采集。 以下以图示的方式详细讲解Microsoft SQL Server数据采集中的容错技术。 步骤一: 打开DTS包编辑器 打开Microsoft SQL Server的企业管理器,从“控制台根目录”开始依次选择下级目录Microsoft SQL Servers → SQL Server组→ (Local) (Windows NT) → 数据转换服务,直到选中“本地包”,鼠标右键点击“本地包”,选择“新建包”,如图456所示,结果如图457所示。 图456Microsoft SQL Server数据采集容错技术步骤一 图457Microsoft SQL Server数据采集容错技术步骤一的结果 步骤二: 选择数据源 在新建包的窗口中,在“连接”菜单中选择“2 Microsoft Access...”,如图458所示,在弹出的窗口中指定待采集文件“某地税数据3.mdb”,结果如图459所示。 图458Microsoft SQL Server数据采集容错技术步骤二 图459Microsoft SQL Server数据采集容错技术步骤二的结果 步骤三: 选择目标数据库 在新建包的窗口中,在“连接”菜单中选择“1 Microsoft OLE DB Provider for SQL Server...”,如图460所示,在弹出的窗口中指定目标数据库为Microsoft SQL Server数据库“计算机审计”,结果如图461所示。 图460Microsoft SQL Server数据采集容错技术步骤三 图461Microsoft SQL Server数据采集容错技术步骤三的结果 步骤四: 添加转换数据任务 在新建包的窗口中,在“任务”菜单中选择“3 转换数据任务...”,如图462所示,然后首先点击窗口区的Microsoft Access图标作为“源连接”,再点击窗口区的Microsoft OLE DB Provider for SQL Server图标作为“目的连接”,形成从源连接指向目的连接的右箭头,如图463所示。 图462Microsoft SQL Server数据采集容错技术步骤四 图463Microsoft SQL Server数据采集容错技术步骤四的结果 步骤五: 配置转换数据任务 在新建包的窗口区选中代表转换数据任务的右箭头,在“包”菜单中选择“属性(P)”,如图464所示。 图464Microsoft SQL Server数据采集容错技术步骤五 弹出“转换数据任务属性”窗口,在默认的TAB页面上配置“源”的信息,可以保持默认选项不变,如图465所示。 图465Microsoft SQL Server数据采集容错技术步骤五——“源”配置 切换到第2个TAB页面配置“目的”,单击“创建”按钮,弹出“创建目的表”窗口,给出创建新表的默认配置,如图466所示,单击“确定”按钮,关闭“创建目的表”窗口,回到“目的”TAB页面,如图467所示。 图466Microsoft SQL Server数据采集容错技术步骤五的“目的”配置过程 图467Microsoft SQL Server数据采集容错技术步骤五的“目的”配置 第3个TAB页面配置“转换”,可保持默认配置,在导入大数据量的表时建议将源和目的分别作为一个整体连接起来,以提高导入效率,如图468所示。 图468Microsoft SQL Server数据采集容错技术步骤五的“转换”配置 第4个TAB页面“查找”可以保持默认配置。在最后一个TAB页面配置“选项”中指定异常错误文件的存放位置,勾选“错误文本”和“源错误行”,在“最大错误计数”中给定希望容错的个数(最大可以容错9999个),如图469所示,然后点击“确定”,完成转换数据任务属性的配置。 图469Microsoft SQL Server数据采集容错技术步骤五的“选项”配置 步骤六: 容错导入 在新建包的窗口中,从“包”菜单中选择“执行(X)”,如图470所示,执行结果是成功导入了“税票表3”中140477条正确的记录,如图471所示。同时出错信息文件“1.txt”和出错数据集合“1.txt.source”被保存到指定位置。 图470Microsoft SQL Server数据采集容错技术步骤六 图471Microsoft SQL Server数据采集容错技术步骤六的结果 步骤七: 查看出错信息文件 打开步骤四时在硬盘上保存的出错信息文件“1.txt”,从中可以看到如图472所示的出错信息。 图472SQL Server数据采集容错技术步骤七——查看出错信息文件 根据出错信息,我们知道一共有两条记录未正常导入,这两条记录分别位于原文件的23939行和30373行,都是在第4列“所属时期止”字段插入数值时发生了错误,错误的类型为数据溢出。 步骤八: 处理有问题的数据文件 出错的那两行数据文件数据被保存在和“1.txt”存在的那个文件夹里,保存文件名为“1.txt.Source”。打开该文件,如图473所示。 图473SQL Server数据采集容错技术步骤八——处理出错数据 找到竖线分隔符分隔的第4列,发现数据值分别为“4/27/2209”和“7/4/2209”,从图472可知目标表的第4列“所属日期止”的数据类型为smalldatetime。从Microsoft SQL Server的联机丛书可检索出以下信息:“使用smalldatetime数据类型存储从1900年1月1日至2079 年6月6日的日期(每个数值要求4个字节的存储空间)。”因为数据值突破了数据类型的值域,因此产生了数据溢出。 通过与被审计单位沟通,查实这两条数据的第4列“所属日期止”系填写错误,真实数据应为“4/27/2009”和“7/4/2009”。据此修改“1.txt.source”。 步骤九: 追加数据完成采集 将修改过的以竖线分隔符的“1.txt.source”文件通过导入与导出工具追加到目标数据库中的“税票表3”中,最终完成了所有140479条数据的采集,如图474所示。 图474Microsoft SQL Server数据采集容错技术步骤九——追加数据完成采集 说明: 容错采集数据的方式实现了包含错误信息的文件的正常导入,这是它的优点;但容错采集在执行效率方面也存在一定的不足,表现为一次只能配置并导入一张表,不能实现批量采集的功能。因此在审计数据采集实践中,建议先使用导入导出工具批量导入,对报错无法实现采集的表再逐一进行容错导入。 此外,以上的讲解基于Microsoft SQL Server 2000,2008版的SQL Server提供了Business Intelligence Development Studio,通过Integration Service实现对数据的容错采集。因其实现过程略复杂,本书在拓展阅读部分就不展开了。 [MZ(3]4.4.4Oracle数据恢复常见问题[MZ)] 1. 缺少特定的表空间 恢复DMP文件的过程经常会遇到系统报错提示,提示信息第一位是缺少名为XXX的表空间,那么可使用SQL语句新建该表空间,参考语句如下: Create Tablespace XXX Datafile 'e:\data\TS_XXX.dbf' Size 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED ; 2. 表空间文件数超过系统默认值 有的时候需恢复的数据库表空间个数很多,创建表空间的语句开始是正常执行的,但到一定时间就突然无法正常执行,增加新的表空间了。系统报错ORA00059: maximum number of DB_FILES exceeded。 这是由于已创建的表空间使用的数据文件达到了系统约定值“DB_FILES”的默认数量,大约是150。解决方法是使用sql*plus,键入以下语句,然后重启系统。 shutdown; startup nomount; alter system set db_files=2000 scope=spfile; shutdown; startup; show parameter db_files; 3. 默认临时表空间TEMP无法扩展 有时,DMP文件恢复完成了,但是检查导入日志文件发现其中有出错信息。例如 “ORA01652: 无法通过 128 (在表空间 TEMP 中) 扩展 temp 段”,如图475所示。 图475恢复日志中的出错信息 这是由于恢复数据时频繁使用TEMP表空间,临时表表空间TEMP的大小已达到上限,无法增大了。最有效的解决方法是增加临时表空间的个数,并将之设定为自动增长。例如,通过以下语句一次性增加10个表空间文件给临时表表空间TEMP(理论上为临时表表空间TEMP新增了32G*10=320G的可增长空间) alter tablespace TEMP add tempfile 'e:\data\TEMP\TEMP001.dbf' size 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED ; alter tablespace TEMP add tempfile 'e:\data\TEMP\TEMP002.dbf' size 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED ; alter tablespace TEMP add tempfile 'e:\data\TEMP\TEMP003.dbf' size 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED ; alter tablespace TEMP add tempfile 'e:\data\TEMP\TEMP004.dbf' size 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED ; alter tablespace TEMP add tempfile 'e:\data\TEMP\TEMP005.dbf' size 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED ; alter tablespace TEMP add tempfile 'e:\data\TEMP\TEMP006.dbf' size 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED ; alter tablespace TEMP add tempfile 'e:\data\TEMP\TEMP007.dbf' size 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED ; alter tablespace TEMP add tempfile 'e:\data\TEMP\TEMP008.dbf' size 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED ; alter tablespace TEMP add tempfile 'e:\data\TEMP\TEMP009.dbf' size 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED ; alter tablespace TEMP add tempfile 'e:\data\TEMP\TEMP010.dbf' size 100M AUTOEXTEND ON NEXT 100M MAXSIZE UNLIMITED ; [MZ(2]思考题[MZ)] 1. 名词解释: 字段分隔符、行分隔符、文本限定符、表空间、DMP、IMP、EXP、IMPDP、EXPDP、ERP、透明表、簇表、池表。 2. 如何从被审计单位各类复杂的数据中选择审计关心的数据? 3. 试谈对于数据接口法、直接拷贝法和备份恢复法等数据采集策略的认识。 4. 试述在实践中采集文本文件时遇到的问题及解决的方法。 5. 后缀名为xlsx的电子数据如何采集? 6. 后缀名为accdb的电子数据如何采集? 7. 如何实现Access对 2G以上容量的数据库的采集任务? 8. 后缀名同为dbf的文件采集方法相同吗?为什么?实践中如何采集后缀名为dbf的文件? 9. Microsoft SQL Server数据采集有哪几种方法?各在什么情况下使用? 10. 简述用备份数据法采集Oracle数据库数据的步骤及注意事项。 11. 试述对SAP R/3等ERP系统数据采集策略和方法的认识。 12. 试述特殊格式文本数据抽取的一般步骤。 13. 在Microsoft SQL Server中“包”指什么?怎样用包实现容错的数据采集? 14. 在恢复Oracle的DMP文件时,缺少特定的表空间怎么办? 15. 在恢复Oracle的DMP文件时,表空间文件数达到上限怎么办? 16. 在恢复Oracle的DMP文件时,默认临时表空间TEMP无法扩展怎么办? 第5章审计数据维护 [MZ(1]第5章审计数据维护[MZ)] 本章要点 ◆数据维护综述 & 数据清理、转换、验证策略 ◆数据清理 & 数据清理原因、方法 ◆数据转换 & 数据转换原因、方法 ◆数据验证 & 数据验证原因、方法 ◆审计中间表 & 审计中间表的特点 & 审计中间表的创建步骤 ◆拓展阅读 & 数据转换规则 & 数据库表名称转换方法 “七步流程法”的第三步是数据清理、转换、验证,它是计算机数据审计的必经步骤。由于被审计单位数据来源繁杂,数据格式不统一,信息表示代码化,数据在采集和处理过程中可能失真,被审计单位可能有意更改、隐瞒数据真实情况等诸多影响因素,对采集到的电子数据必须进行清理、转换、验证,使得数据能为审计所用。审计数据维护提高了采集到的电子数据的质量,将来源众多的被审计单位电子数据集成到一起,并按审计的需要生成审计中间表,为后续的分析和处理打下扎实的基础。 [MZ(2]5.1数据维护综述[MZ)] 数据维护的目标是提高数据质量,实现手段是对数据的清理、转换和验证。每一项工作的实现,既可以从宏观入手,将之抽象到策略层面加以总结,以更好地指导行动;也可以从微观入手,考虑实现的细节,分析原因,找到方法,给出有针对性的实现方案。 [MZ(3]5.1.1数据清理策略[MZ)] 审计数据清理主要涉及数据的匹配与合并。通过匹配,发现重复的对象;通过合并,保留或生成一个完整的对象。数据清理活动的核心是近似重复对象的识别。近似重复对象是指表现形式不同但语义上相同的对象。从狭义的角度来看,如果两条记录在某些字段上的值相等或足够相似,则认为这两条记录互为近似重复。 数据清理的步骤通常为: (1) 记录排序,即选择一个或几个字段作为关键字进行排序; (2) 识别重复记录; (3) 合并重复记录,即从相似记录集中获得记录的完整信息,并作为该记录的表示。 选择重复记录识别方法应充分考虑系统的效率和精确度,包括是否有利于并行操作及空间开销。目前常用的重复记录识别方法有嵌套循环法、邻近连接法和优先队列法。通过比较,可以选择基于优先队列的重复记录识别方法。这种方法首先对数据集进行排序,根据排序的顺序,对范围相对较小的邻近记录进行匹配比较,从而找出重复记录。 识别重复记录的具体策略是: 在关系表中抽取一个或多个字段构成关键字,根据关键字对表中的记录进行排序,然后寻找关系表中各条记录在一个长度固定的子集队列中的匹配记录。采用类似LRU(最近最少使用)算法来控制队列长度。通过匹配操作寻找需要合并的子集,计算其传递闭包,然后加以合并。最后得到若干个近似重复记录集。 [MZ(3]5.1.2数据转换策略[MZ)] 审计数据转换策略主要有两项内容,一是建立审计数据转换日志,二是研究审计数据转换规则。本节重点讨论第一项内容,第二项内容由于涉及较多的理论知识,因此放在本章的拓展阅读章节5.6.1节,供感兴趣的读者查阅。 审计数据转换通常分步骤进行,根据需要形成一系列中间表。这一过程往往因人而异,例如采用不同的工具、不同的转换次序等。为使转换过程可以追溯、转换质量得到控制,应最低限度形成日志记录。 审计数据转换日志贯串每一个审计数据转换活动,有两种类型: 一种是记录审计数据转换过程中产生的转换错误的日志,称为转换错误日志;另一种是能反映审计数据在转换过程中变化情况的日志,称为转换变化日志。 1. 转换错误日志 在审计数据转换过程中,从被审计单位采集的数据可能来自异构的数据源,这些数据之间可能存在不同层面的冲突。对这些冲突如果考虑不周就会导致审计数据转换错误,从而影响审计中间表的数据质量,进而影响审计人员数据分析的准确性。 (1) 模式层冲突 当审计中间表的实体及其联系在被审计单位数据库中被用不同的概念模式表示时,会产生模式层冲突。 ① 命名冲突: 这是最常见的冲突,包括同名异义和异名同义两种情况。 ② 主键冲突: 每个实体集都可以确定自己的主键,但主键的选择方法可能并不唯一。例如,表A中用员工的工号作为主键,表B中用员工的身份证号码作为主键,将表A和表B集成时,需要统一主键并做必要的转换工作。 ③ 结构约束冲突: 关系数据库中实体间的联系可分为一对一(1∶1)、一对多(1∶N)和多对多(M∶N)三种。结构约束冲突是指现实中实体之间的联系在不同的数据库中实体间的联系规则不同。 ④ 表达格式冲突: 目标模式中相同意义的数据在不同的数据源中的表达方式不同。最典型的是日期时间,既可以用形如“yyyymmdd”的字符串表示,也可以用形如“mmddyyyy”的字符串表示,甚至可以用3个整数字段分别表示年、月和日。这些不同的表示方法在转换时需要统一,考虑不周会导致转换错误的发生。 (2) 实例层冲突 将被审计单位的数据转换到审计中间表的过程中,转换错误的来源并不仅限于模式层冲突,还有各种各样的实例冲突。 ① 数据缺失: 源数据库中缺少某些必要的记录或是某些记录缺少一些字段的值,而这些缺失的信息不能从其他的表中获得。 ② 不正确的数据: 源数据库中含有错误的数据,这种错误产生的原因很多。人为错误及计算公式选择的不同等都可能导致数据库中存在错误的数据。 ③ 数据不一致: 数据不一致的类型很多,包括: (a)定义规范不一致。例如性别,可以用 1/0 编码来表示,但是到底是 1 表示男性还是 0 表示男性?各个系统都可以有自己的定义,只能通过检查数据实例来确定。(b)数据来自不同的时间。各个源数据库随着时间的变化都会发生相应的改变,当向审计中间表中输出数据时,可能因为不同的数据库提供了同一实体在不同时间的快照而造成数据的冲突。(c)数据的语义信息不一致。例如产品编码,被审计单位不同的数据库中可能会有相同的编码,但是它们表示的并不一定是同一种产品,即不同的数据库采用的编码规则不同。 以上是审计数据转换时常见的一些冲突,也是设计审计数据转换系统时需要解决的主要问题。这些问题同时也是产生审计数据转换错误的源泉。转换错误日志不仅记录了审计数据转换时由于种种冲突所产生的错误,还记录了审计数据转换过程中由于系统编程失误而产生的出错信息(例如某些表中的某些记录没有转换成功等),为审计人员最终能得到准确可靠的数据提供一定的帮助。 2. 转换变化日志 审计工作对审计数据有着特殊的要求,不仅要求转换前后保持一致性,而且要求有一定的可追溯性。即当审计人员需要查阅数据的原始面貌时,能够保证通过审计中间表中的数据追溯到其被转换前的原始状况。这就要求对审计数据转换过程及有关数据的变化情况进行记录,形成转换变化日志。 转换变化日志包含下面两个层面。 (1) 面向审计数据转换流程步骤的转换流程日志 审计数据的转换过程是审计数据通过不同的转换活动,最终形成审计中间表数据的过程。转换活动由许多不同的转换步骤组成,每个转换步骤又包含多个转换任务。转换流程日志记录了审计中间表中的数据对应的是被审计单位的哪些数据,是经过哪些转换任务、转换步骤以及转换活动而来的,这期间又运用了什么样的转换规则。 (2) 面向审计数据变化情况的转换数据日志 面向审计数据变化情况的转换数据日志,主要记录了为避免数据中存在冲突导致转换错误而进行的数据处理过程,如对日期时间数据、缺失数据以及不正确或不规范数据的处理等的记录。 被审计单位的数据量往往很大,如果对每次数据变化都进行记录,转换数据日志也会非常庞大,维护这样的日志数据会极大地加重审计人员的负担。通过分析发现在进行审计数据转换时,有些数据处理(如日期时间型数据处理、定义规范不一致的数据处理等)对审计人员的分析通常不产生实质性的影响,这些数据通过转换流程日志就可以实现可追溯性。因此,对于这样的变化转换数据日志可以不记录。但其他的数据处理(如缺失数据处理等)要实现可追溯的目标仍需记录处理过程。 [MZ(3]5.1.3数据验证策略[MZ)] 审计数据验证策略有两条,一是黑盒测试和白测试相结合,二是抽样检验和100%检验相结合。 1. 黑盒测试和白测试相结合 审计数据验证既包括对数据采集的验证,也包括对数据清理和数据转换的验证。对数据采集的验证主要验的是结果,采用黑盒测试,关注数据采集的结果。对于数据清理和数据转换,主要验的是过程,采用白盒测试,关注清理和转换的实现过程。 2. 抽样检验和100%检验相结合 对于数据采集的验证采用抽样检验的方法,可以核对采集后的电子数据的重要参数与数据采集前记录的参数是否一致,可以利用已有的统计指标和纸质凭证、报表对采集后的数据进行核对分析,可以检查采集后的电子数据中有无异常数据。这些检查都是基于抽样实现的,如果要检验所有的数据,代价太大,也没有必要。 对于数据清理和数据转换通常采用100%检验的方法,即关注清理和转换的所有内容。要确保数据清理和转换的工作没有对数据产生破坏性副作用。 [MZ(2]5.2数据清理[MZ)] 审计数据清理是计算机数据审计重要的一环。它的主要工作是检查、控制和分析审计数据的质量,在数据质量问题上发现审计线索,修改或者删除存在不正确、不完整或者重复等有质量问题的数据,为后续的审计数据分析服务。数据清理可以在数据转换之前进行,也可以在数据转换之后进行。 从被审计信息系统中获得的原始数据的质量如何?审计人员要首先进行评价。以下给出数据质量的6个主要评价指标,分别是: 准确性、完整性、一致性、唯一性、适时性和有效性。 (1) 准确性: 数据值与假定正确的值的一致程度。 (2) 完整性: 需要值的属性中无值缺失的程度。 (3) 一致性: 数据对一组约束的满足程度。 (4) 唯一性: 数据记录(及码值)的唯一性。 (5) 适时性: 在所要求的或指定的时间提供一个或多个数据项的程度。 (6) 有效性: 维护的数据足够严格以满足分类准则的接受要求。 [MZ(3]5.2.1数据清理原因[MZ)] 由于被审计数据来源众多,种类繁杂,会存在不少的数据质量问题。在计算机数据审计中,审计的对象是数据,不能对有质量问题的数据简单抛弃,因为这些数据中有可能隐含着审计线索。因此,首先要做的是根据数据质量的要求,对审计数据进行检查,对发现的数据质量问题进行分析,找出造成问题的原因,发现隐含的审计线索。然后清理有质量问题的数据。数据清理的目的是为后续的数据分析做准备,有问题的数据会给数据分析工作带来错误。 常见的数据清理原因可归为以下4个方面: 值缺失限制了审计人员的数据分析工作;数据表中的空值直接影响了数据分析结果的准确性;大量的冗余数据降低了数据分析的效率;数据值域定义的不完整性给数据审计工作带来障碍。 (1) 值缺失限制了审计人员的数据分析工作 被审计单位电子数据的形成,最初的目的是要满足其管理经济业务的需要。因此,操作人员在对多条连续记录中存在的相同数据值进行录入时,往往会只录入第一条记录的数据值,而省略后续记录的相同数据值,导致数据不完整,如图51所示。不完整数据的存在,限制了审计人员按这一数据值的某一特性对被审计单位电子数据进行分析(如查询、筛选、汇总等)。 图51值缺失限制了审计人员的数据分析工作 (2) 数据表中的空值直接影响了数据分析结果的准确性 在进行数据分析时,原始数据为空的记录值并不等同于“0”,不能参加比较大小等分析,在数据处理过程中会被遗漏,必须对这部分空值进行数据清理,如图52所示。 图52数据表中的空值直接影响了数据分析结果的准确性 (3) 大量的冗余数据降低了数据分析的效率 本章所述的冗余数据主要是指审计人员采集到的数据表中存在大量原本就没有使用或存储辅助信息的字段和记录。这些字段和记录对于审计人员而言是多余的,没有任何意义。大量的冗余数据的存在会大大降低审计人员以查询为主的数据分析的效率。因此,必须对冗余数据进行清理。如图53所示的凭证数据中,存在大量冗余数据(十几个字段、近半数的记录)。 图53大量的冗余数据降低了数据分析的效率 (4) 数据值域定义的不完整性给数据审计工作带来障碍 由于被审计单位信息系统对某些数据没有形成较强的值域或数据格式的约束性限制,极易造成因操作人员失误等原因导致录入的数据中存在错误值或同一意义表达格式不统一的情况。如图54所示,在银行账户表中发现资金余额字段存在负值的情况,这与会计处理的常规不符,显然是错误的数据。 图54数据值域定义的不完整性给数据审计工作带来障碍 [MZ(3]5.2.2数据清理方法[MZ)] 广义上可以认为凡是有助于提高数据质量的过程都是数据清理过程。数据清理工作主要包括确认输入数据、替换空值(如用“0”)、消除冗余数据、修改错误值、解决数据中的冲突以及保证数据值落入定义域等。 数据清理的基本技术主要有以下3种。 (1) 解决不完整数据(即值缺失)的方法: 大多数情况下,缺失的值必须手工填入;某些缺失值可以从本数据源或其他数据源推导出来,上述图51中的数据经清理后结果如图55所示。 (2) 错误值的检测及解决方法: 通过常识也可以识别部分错误值,如存款余额不能为负等。也可以用统计分析的方法识别可能的错误值或异常值,如偏差分析、识别不遵守分布或回归方程的值;使用简单规则库(常识性规则、业务特定规则等)检查数据值;使用不同属性间的约束;使用外部数据。 (3) 不一致性的检测及解决方法: 定义完整性约束用于检测不一致性;通过分析数据发现联系。 经过数据清理的数据就可以进行后续处理了。上述图54中的数据经清理后结果如图56所示。 图55值缺失的解决方法 图56数据清理的结果 [MZ(2]5.3数据转换[MZ)] 审计数据转换主要包括两个方面的内容: 一是将被审计单位的数据有效地装载到审计软件所操纵的数据库中;二是明确地标识出每张表、每个字段的经济含义及其相互之间的关系。 在审计数据转换前可以先对数据进行有效性检查,以避免数据冗余和差错。如果没有进行数据的有效性检查,就有可能破坏审计软件处理所需的完整性。检查数据的有效性的最好方法是获得被审计单位具有技术专业知识和业务专业知识的人员的帮助。 数据转换的基本类型可以分为简单变换和清洁刷洗两种。 简单变换,顾名思义,是数据转换中最简单的形式,也是所有数据转换的基本构成单元。这些变换一次改变一个字段的属性,而不考虑该属性的背景或与它相关的其他字段的信息。 清洁和刷洗指的是比简单变换更复杂的一种数据变换。在这种变换中,要检查的是字段或字段组的实际内容而不仅是存储格式。一种清洁和刷洗是检查数据字段中的有效值。这可以通过范围检验、枚举清单和相关检验来完成。清洁和刷洗比较复杂,感兴趣的读者可以查阅《数据仓库技术与联机分析处理》(王珊等著,科学出版社,1998)的相关章节。 以下重点介绍简单变换。简单变换包括数据类型转换、日期/时间格式的转换、代码转换和值域转换。 1. 数据类型转换 最常见的简单变换是转换一个数据元的类型。它是将一种类型的数据转换成另一种类型的数据。数据转换的前提是类型相容。在这里,类型相容指的是一种类型数据的值域可以通过常用的转换函数映射到另一种类型的值域上。这种映射不会丢失数据的精确度。类型相容的转换被认为是合适的转换,如整型(16bit)到文本(字符)型的转换;类型不相容的转换被认为是不合适的转换,如文本(字符)型到整型的转换。以Microsoft Access中的某些数据类型为例,下列转换被认为是合适的转换,如表51所示。 表51合适的类型转换 源 类 型目 标 类 型精 确 度 整型(16 bit)文本(字符)型 整型(16 bit)单精度、双精度型不变 整型(16 bit)长整型(32 bit)不变 长整型(32 bit)文本(字符)型 日期/时间型(32 bit)文本(字符)型 单精度型文本(字符)型 双精度型文本(字符)型 下列转换被认为是不合适的转换,如表52所示。 表52不合适的类型转换 源 类 型目 标 类 型精 确 度 文本(字符)型整型 文本(字符)型单精度型 文本(字符)型双精度型 文本(字符)型日期/时间型 长整型(32bit)单精度型(16bit)可能丢失 长整型(32bit)双精度型(32bit)可能丢失 整型日期/时间型 长整型日期/时间型 日期/时间型整型 日期/时间型长整型 日期/时间型单精度型 日期/时间型双精度型 有时候,特定的转换任务要求必须进行不合适的转换,这时可以通过编写简单的程序(包括SQL语句)来完成,例如,在“凭证”表中,“月份”为文本型字段,如果目标表“凭证_目标”的“月份”为数值型字段,要完成这一类型的转换,可以在TSQL语句中利用CAST函数将文本型的月份转换成数值型的月份。用于转换的SQL语句如下: SELECT 日期,凭证号,科目代码,摘要,数量,金额,借贷方, CAST(凭证表.月份 As int) As 月份,对方科目,单位代码 INTO 凭证_目标 FROM 凭证表; 2. 日期/时间格式的转换 因为大多数系统都采用许多不同的日期和时间格式,所以在审计软件中几乎都要进行日期和时间格式的转换,将它转换成审计软件处理所需的统一格式。这可以通过手工程序编码来完成。它能把一个日期或时间字段拆成几个子部分,然后再将它们拼成想要的格式和字段。然而大多数审计软件中的数据导入和转换工具都提供了日期和时间格式之间转换的设置,采用手工编码的情况就比较少了。 3. 代码转换 在业务数据库中建立代码是为了节省数据库存储空间和提高计算机的处理效率。这些代码一般是由系统管理员设置,由应用程序维护的。这给审计软件处理带来了很大的不便。有两种方法可以解决这一问题。如果审计软件中采用了代码设计,而被审计单位的代码能够满足审计软件的需要,可以将被审计单位的代码表转换到审计软件的代码表上来;如果审计单位的代码不能满足审计软件的需要,就必须根据审计软件的要求对它重新编码。例如,被审计单位提供的汇率表、利率表,有时就可以满足审计软件的需要。如果审计软件不采用代码设计,就必须将被审计单位数据中的代码值转换为经过解码的、易于理解的相应值。 在审计过程中,为了方便大多数审计人员对数据进行处理,往往需要对采用编码(外语、汉语拼音、字符等)形式作为名称的表和字段进行名称的转换与标注。这一步工作的前提是通过被审计单位提供的数据字典或审计人员的经验,对被审计系统的数据结构有了较为清楚的了解。例如,被审计单位提供的原始数据形式的表与字段名如表53所示,为了方便大多数审计人员使用,在识别含义的前提下将其转换为下面的形式,如表54所示。 表53从被审计单位采集到的原始数据的结构(部分) 表名: KMJL 字段名字段类型 KMDM文本型 BMDM文本型 RQ日期/时间型 PDH文本型 BH文本型 JFJE数值型 DFJE数值型 ZY文本型 表54经过转换的被审计单位的数据(部分) 表名: 科目记录表 字段名字段类型 科目代码文本型 部门代码文本型 日期日期/时间型 凭单号文本型 编号文本型 借方金额数值型 贷方金额数值型 摘要文本型 4. 值域转换 值域转换是将一个字段的全部或部分取值映射到另一个字段的全部或部分取值上去。例如,在被审计单位的系统中,某一项数据的取值分为10个级别(“0”~“9”),而在审计软件中,该项数据的取值仅仅分为5个级别(“A”~“E”),这就需要将具有10个级别的值域映射到具有5个级别的值域上去。代码转换可以看成是一类特殊的值域转换。 解决对被审计单位不同类型数据库格式的识别问题,是一个语法层次上的问题;数据转换技术要解决对采集到的原始数据的含义进行识别的问题,同时,它还要将具有相同或相近含义的各种不同形式的数据转换成审计软件或工具处理所需的形式相对统一的数据,这是一个语义层次上的问题。 [MZ(3]5.3.1数据转换原因[MZ)] 1. 被审计单位信息系统的多样性带来了数据的不一致性 计算机数据审计过程中会遇到各式各样的迥然相异的被审计单位信息系统。被审计单位信息系统的差异,会对审计工作造成数据的不一致性问题。数据的不一致性大体有以下表现形式。 同一字段在不同的应用中具有不同的数据类型。例如,字段“借贷方标志”在A应用中的类型为“字符型”,取值为“Credit/Debit”,在B应用中的类型为“数值型”,取值为“0/1”,在C应用中的类型为“布尔型”,取值为“True/False”。 同一字段在不同的应用中具有不同的名字。例如,A应用中的字段“balance”在B应用中的名称为“bal”,在C应用中又变成了“currbal”。 同名字段,不同含义。例如,字段“月折旧额”在A应用中表示为用直线折旧法提取的月折旧额,在B应用中表示为用加速折旧法提取的月折旧额等。 同一信息,在不同的应用中有不同的格式。例如,字段“日期”在A应用中的格式为“YYYYMMDD”,在B应用中的格式为“MM/DD/YYYY”,在C应用中的格式又为“DDMMYY”。 同一信息,在不同的应用中有不同的表达方式。例如,对于借贷方发生额的记录,在A应用中设计为“借方发生额”与“贷方发生额” 两个字段,在B应用中设计为 “借贷方标志”与“借贷方发生额”两个字段。 对于这些不一致的数据,必须进行转换后才能供审计软件分析之用。数据的不一致性是多种多样的,对每种情况都必须专门处理,因此是一项繁重的工作。 2. 被审计单位信息系统的安全性措施给审计工作带来障碍 基于安全性考虑,被审计单位的信息系统一般都采取一定的加密措施,包括系统级的加密措施和数据级的加密措施。特别对具有一定含义的数据库的表与字段的名称,一般都要进行映射或转换。例如,将表命名为T1,T2,…;将字段命名为F1,F2,…。对于这样的数据,必须进行表或字段含义的对照与转换,否则审计人员很难弄清其具体的经济含义。各种各样的加密措施不胜枚举,这些都给计算机数据审计带来了障碍,也给审计数据转换带来挑战。 3. 审计目的不同决定了审计数据的范围和要求不同 被审计单位的信息系统规模不一,数据量相差悬殊。审计人员不可能也没有必要将被审计单位的所有数据都采集过来。审计工作有自己的目的和要求,需要处理的往往是某一时段或某一方面发生的业务数据。这就要求审计人员选取一定范围的、满足一定要求的审计数据。例如,在关税审计业务中,审计人员关心的主要是与税收征管有关的报关单、加工贸易、减免税、货运舱单、税单等相关数据库中的数据,而对于操作员授权管理等系统控制数据库,在不对系统进行评价时,可以不采集。同时,审计目的不同,对原始数据的要求也不同。在检查银行贷款利率执行情况时,需要带有计息标志和利率信息的每一笔贷款的明细数据。如果这样的信息分布在被审计系统的若干张表中,换句话说,如果被审计单位不能提供完全满足审计要求的数据,就有必要对采集到的数据进行转换。 4. 数据转换是数据分析、处理的前提 计算机软件设计一般都基于一定的数据结构,专用的审计软件更是如此。在输入数据不满足软件处理的需求时,必须对它进行转换。对于一些通用的审计软件,对输入数据的适应性相对强一些,但这并不意味着它们可以处理不经转换的任意数据。审计软件中有很多特定的分析方法和专用的工具,这些方法和工具往往要求一定的数据结构。例如,在计算固定资产折旧时,需要用到“资产原值”、“月折旧率”、“入账日期”等信息。如果这些信息不能完全满足,就无法计算。 [MZ(3]5.3.2数据转换方法[MZ)] 数据转换是一项复杂的工作,有很多前期的准备工作要完成。在转换被审计单位的数据之前,首先要对被审计单位的信息系统进行一番调查研究,请被审计单位技术人员配合讲解系统设计、功能划分、操作流程等。同时,获取被审计单位的系统设计文档资料至关重要。被审计单位的数据库表结构详细地描述了数据库中的数据项与事务处理逻辑,这些资料有助于审计人员了解被审计单位信息系统的数据情况。 在这一步工作的基础上,才能着手选择需要转换的数据。选择好这些数据之后,就可以考虑采用一定的方法进行转换了。 数据转换的方法一般来说有3种,分别是专用工具、SQL语言和程序编码。 1. 专用工具 专用工具是为数据转换而专门设计的一类辅助工具。根据用途不同,这些工具大致可以分成三类,一类是数据仓库中的数据采集与转换工具,一类是数据库厂商提供的转换工具,一类是审计软件中集成的数据转换工具。 (1) 数据仓库中的数据采集与转换工具 以Oracle Data Integrator为代表的数据仓库加载工具是一个非常出色的数据转换工具。它是Oracle在2006年10月收购Sunopsis公司后,整合Sunopsis Active Integration Platform而推出的一款数据集成工具。ODI最大的特点是提出了知识模块(Knowledge Module)的概念。 ODI将一些场景(如将文件加载到数据库,从SQL Server数据库抓取数据放到Oracle数据库里,从DB2数据库抓取数据放到Oracle数据库里等)的详细的实现步骤作为一个一个的知识模块并使用Jython脚本语言结合数据库的SQL语句分步录制,忠实记录。这样就形成了ODI里的100多个知识模块,基本上包含了所有普通应用所涉及的所有场景。 (2) 数据库厂商提供的专用数据转换工具 以SQL Server迁移助手(SQL Server Migration Assistant,SSMA)为例,它是微软推出的将异构数据库迁移至SQL Server数据库的专用工具集,有for Access、for Oracle、for Sybase、for MySQL、for DB2等多个软件包,目前最高版本为2016年发布的7.0版。SSMA由微软免费提供,目的是提高将其他数据库中的数据转换到SQL Server数据库的转换速度,并降低出错率,参考下载网址为: https://www.microsoft.com/enus/search/ DownloadsDrillInResults. aspx?q=ssma&cateorder=2_1_5_17_15_16_13_11&site=。 (3) 审计软件中提供的数据转换工具 几乎每一种审计软件都提供了自己的数据转换工具。这些工具可以分为专用的和通用的两大类。专用的转换工具只能转换几种特定系统中的特定数据,如海关审计软件中的数据转换工具;通用的转换工具有更大的灵活性。“审计数据采集分析2012”中提供的数据转换工具就是一个通用的转换工具,它能够将文件类型数据库(DBF数据文件、Access数据文件、文本文件等)中的数据转换到SQL Server数据库中。它能完成类型转换、日期/时间格式转换和值域转换等功能。 2. SQL语言 SQL是关系数据库的标准语言(可参见3.2节),利用SQL进行数据转换,对于技术人员而言尤为适合。SQL中可以分为数据定义子语言(DDL)、数据操纵子语言(DML)和数据控制子语言(DCL)。数据转换中用得较多的是数据定义语句和数据操纵语句。一般可以用数据定义语句来定义目标数据库和目标表的结构,用数据操纵语句将源数据检索到目标数据库中并对检索的结果进行进一步加工。 为了提高性能,更好地完成数据查询与操纵,很多数据库都采用扩展的SQL语言。这些扩展的SQL语言各有特色。例如,TSQL的SQL语句中增加了CASE表达式,语法如下: 搜索WHEN语句: 简单WHEN语句: CASE语句可以很方便地在检索过程中完成一部分数据转换工作。下面是一些例子。 (1) 在“商品销售表”中,类别=“2”表示销售记录,类别=“4”表示上年结转记录。可以通过下面的语句完成类别代码的转换。 SELECT入账日期,单位代码,商品代码,金额,数量,单价,月份, CASE类别 WHEN '2' THEN '销售' WHEN '4' THEN '结转' END FROM 商品销售表; (2) 在“商品销售表”中的字段“数量”表示销售数量,假定可以根据销售数量来确定市场需求情况,那么可以用CASE表达式来将销售数量转换成市场需求程度。 SELECT入账日期,单位代码,商品代码,金额,单价,月份, CASE WHEN 数量 > 200 THEN '极受欢迎' WHEN数量<= 200 AND 数量>100 THEN '受欢迎' WHEN数量<= 100 AND 数量>50 THEN '一般' WHEN数量<= 50 AND 数量>10 THEN '不受欢迎' ELSE '极不受欢迎' END FROM商品销售表 (3) CASE语句还可用于防止转换过程中的被零除错误。例如,下面的语句用于查找那些固定资产月折旧额大于2%的记录。 SELECT设备代码,单位代码,资产编号,规格及型号,单位,数量,使用日期,入账日期,凭证号,资产原值,月折旧额/资产总值,累计折旧,资产净值 FROM 固定资产明细 WHERE(CASE WHEN资产总值=0 THEN NULL ELSE月折旧额/资产总值 END) > 0.02; 可见,这些扩展的SQL语言具有很强的数据转换功能和灵活性。此外,不同的数据库系统中都提供一整套的函数(包括类型转换函数),这些函数对于完成数据转换有很大的帮助。 3. 程序编码 这是一种最基本的转换方法。对于下列4种情形,可以考虑采用程序编码的方式进行转换: 对于复杂数据文件中包含的数据进行转换时;对于非关系型数据库中的数据进行转换时;对于特别复杂的关系型数据库中的数据进行转换时;数据转换的需求固定,使用频繁时。 (1) 对于复杂数据文件中包含的数据进行转换时 复杂数据文件一般是指非关系型数据库的数据文件。一些变长记录结构的文本文件和一些应用程序用于数据存储、交换的特定格式的二进制文件都属于复杂数据文件。复杂数据文件一般有自己特定的格式,最好通过程序编码的方式进行数据转换。例如,交易流水的二进制文件(Detail.bin)的格式为: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 交易号(10) 日期(8) 时间(6) 交易金额(共14位,4位小数) 每一笔交易占用19个字节,每个字节以BCD码形式将数据存放在“金融审计数据库”中,“交易流水”表的结构如表55所示。 表55“金融审计数据库”中“交易流水”表结构 字段名字 段 类 型 交易号文本型(5位字符宽度) 交易时间日期/时间型 交易金额双精度浮点型 可以采用下面的代码将交易记录转换到“金融审计数据库”的“交易流水”表中。 Private Sub TransDetail2MDB() Dim dbFinancial As Database'标识"金融审计数据库"的数据库变量 Dim rstFinancial As Recordset '标识"交易流水"的记录集变量 Dim intFile As Integer '标识文件句柄的变量 Dim nMaxSize As Long '标识文件大小的变量 Dim nPosition As Long '标识当前读指针的位置的变量 Dim nRecCount As Long '标识记录总数的变量 Dim nCurrRec As Long '标识当前记录位置的变量 Dim tmpStr As String '临时字符串 Dim tmpByte As Byte '临时字节变量 Dim sTransCode As String '保存"交易代码"的变量 Dim sDateTime As String '保存"交易时间"的变量 Dim sTransValue As String '保存"交易金额"的变量 Dim i As Integer '循环变量 '打开数据库 Set dbFinancial = OpenDatabase("C:\金融审计数据库.MDB",True,False) '打开记录集 Set rstFinancial = dbFinancial.OpenRecordset("交易流水",dbOpenDynaset) intFile = FreeFile'分配文件句柄 '打开文件 Open "C:\Detail.bin" For Binary Access Read As intFile nMaxSize = LOF(intFile) '获得文件大小 nRecCount = Int(nMaxSize / 19) '获得记录总数 nPosition = 1 '初始化读指针 nCurrRec = 0 '初始化当前记录指针 '以下部分完成数据转换 While nCurrRec < nRecCount tmpStr = "" '清空临时字符串 For i = 1 To 5 '读交易代码 Seek intFile,nPosition '定位读指针 Get intFile,nPosition,tmpByte '读出一个字节 tmpStr = tmpStr & Chr((tmpByte And &HF0) / 16 + 48) '转成ASCII码 tmpStr = tmpStr & Chr((tmpByte And &HF) + 48) '转成ASCII码 nPosition = nPosition + 1 '读指针下移 Next i sTransCode = tmpStr '暂存交易代码 '以下部分读取交易时间 tmpStr = "" For i = 1 To 4 Seek intFile,nPosition Get intFile,nPosition,tmpByte tmpStr = tmpStr & Chr((tmpByte And &HF0) / 16 + 48) tmpStr = tmpStr & Chr((tmpByte And &HF) + 48) nPosition = nPosition + 1 Next i sDateTime = Mid(tmpStr,1,4) & "" & Mid(tmpStr,5,2) & "" & Mid(tmpStr,7,2) tmpStr = "" For i = 1 To 3 Seek intFile,nPosition Get intFile,nPosition,tmpByte tmpStr = tmpStr & Chr((tmpByte And &HF0) / 16 + 48) tmpStr = tmpStr & Chr((tmpByte And &HF) + 48) nPosition = nPosition + 1 Next i SDateTime = sDateTime & " " & Mid(tmpStr,1,2) & ":" & _Mid(tmpStr,3,2) & ":" & Mid(tmpStr,5,2) '以下部分读取交易金额 tmpStr = "" For i = 1 To 7 Seek intFile,nPosition Get intFile,nPosition,tmpByte tmpStr = tmpStr & Chr((tmpByte And &HF0)/ 16 + 48) tmpStr = tmpStr & Chr((tmpByte And &HF) + 48) nPosition = nPosition + 1 Next i sTransValue = tmpStr '进行数据转换并记录到数据库中 rstFinancial.AddNew rstFinancial.Fields("交易号").Value = sTransCode rstFinancial.Fields("交易时间").Value = CDate(sDateTime) rstFinancial.Fields("交易金额").Value = CDbl(sTransValue) / 10000 rstFinancial.Update nCurrRec = nCurrRec + 1 '记录指针下移 Wend rstFinancial.Close '关闭记录集 dbFinancial.Close '关闭数据库 End Sub (2) 对于非关系型数据库中的数据进行转换时 对于非关系型数据库中的数据进行转换,如果不想购买昂贵的数据库网关或其他转换产品,可以采用程序编码的方式。值得注意的是,这里的程序编码一般要在被审计单位的系统中完成。即在被审计单位技术人员的配合下,在被审计单位的系统中书写一段程序将特定的数据转换成审计人员所需要的格式。 (3) 对于特别复杂的关系型数据库中的数据进行转换时 有些关系数据库中数据项之间的关系错综复杂,采用SQL语言实现转换代价很高。这时可以考虑程序编码方式。利用软件开发工具中的数据访问对象和方法,可以很方便地书写数据转换代码。 (4) 数据转换的需求固定,使用频繁时 这类任务最好采用程序编码方式完成。编写一段相对完整、考究的转换程序既可以避免多次使用转换工具或SQL语句带来的操作误差,又不需要使用者具有很多数据处理方面的专业知识,操作简单,效率可观。 [MZ(2]5.4数据验证[MZ)] 审计数据验证贯串审计数据采集、清理、转换的全过程。为了保证审计数据采集的真实,为了确保审计数据转换的正确,都需要进行审计数据验证。本章讲述审计数据采集阶段和清理转换阶段的验证工作的主要内容,验证原因以及审计数据验证中用到的技术和方法。 1. 审计数据采集阶段的验证 审计数据采集阶段的验证可以分为采集前的验证和采集后的验证两部分。 (1) 审计数据采集之前的验证 这一阶段数据验证的目的主要是确保审计所需数据的真实性、完整性,保证数据采集工作准确有效。在条件许可的情况下,可以验证数据库的创建日期、总数据量、数据内容、采集接口的正确性和有效性,并记录数据采集前的相关参数。 ① 验证数据库的创建日期 为了确保被审计单位提供了原始数据,首先应该确保数据采集对象(源数据库)的原始性。主要通过查看数据库文件的创建日期来实现验证。对于不同的数据库管理系统,可以采用不同的实现方法。 对于Microsoft SQL Server数据库管理系统,可以通过对象资源管理器查看该数据库“属性”中的“创建日期”项,或在查询页通过执行系统存储过程“sp_helpdb”了解服务器上全部数据库的基本信息,包括数据库名称、总大小、创建用户、创建日期、数据库状态等,如图57所示。 图57SQL Server 全部数据库基本信息查询 对于Oracle数据库管理系统,可以在SQL*Plus工具中输入 SELECT created FROM v$database; 命令来查看当前连接的数据库的创建日期,如图58所示,该数据库创建于2016年7月28日。 图58Oracle 当前连接的数据库的创建日期查询 在得到了被审计单位的表空间后,可以进一步了解表空间的物理存储位置和所占的空间大小,这可以通过下列语句实现,如图59所示。 SELECT tablespace_name 表空间,file_name 物理文件名,bytes 字节数 FROM dba_data_files; 图59Oracle 表空间的物理存储位置和所占的空间查询 ② 验证总数据量 验证总数据量的时候,可以首先查看表空间或物理数据库文件的大小。如果表空间或物理数据库文件的大小与审计人员预期的大小差异较大,则可以对此表空间中数据的真实性提出质疑。进一步可以查看数据库中全部基本表所包含的数据行数是否与审计人员在审前调查阶段估算的行数相近。若相差较为悬殊,则表明数据有可能不是原始的真实数据。 ③ 验证数据内容 审计人员和被审计单位技术人员一起,在被审计单位的数据库环境中打开需采集的数据库,验证审计人员所需的表或视图是否都包括在此数据库中。若都包括,则打开所需的每张表或视图,查看这些表或视图的字段是否包含了审计人员所需的全部信息。在分析具体的数据表时,审计人员应记录一些具体的信息。 ④ 验证数据采集接口的正确性、有效性 如果数据采集接口是由被审计单位实现的,则还需验证接口的正确性与有效性。可以对接口的源代码(目标代码)进行分析,或者利用文件比较工具将拟运行接口的源代码(目标代码)与过去保留的正确版本进行比较。对临时开发的接口,还必须验证其有效性,如是否存在数据类型转换错误、是否存在效率问题等。 ⑤ 记录数据采集前的相关参数 在数据采集之前的验证过程中,审计人员需要随时记录一些重要参数,包括数据库表的记录数、表结构、视图内容以及进行分组统计获取的各层次的主要变量的统计指标(如按科目级次分组统计的当年发生额、年末余额)等,为下一步获取数据后的完整性验证做准备。 (2) 审计数据采集之后的验证 审计数据采集之后的验证主要是对采集到的数据进行确认,排除遗漏和失误,所采取的方法有两类: 一类是技术性验证,如核对总记录数、主要变量统计指标等;另一类是业务性验证,如检查借贷是否平衡,顺序码断号、重号验证等。一般而言,在进行了技术性验证后,往往需要从数据的经济含义出发进行业务性验证。这一阶段数据验证的工作包括: 与数据采集前记录的参数进行核对,利用已有的统计指标和纸质凭证、报表进行核对分析,检查有无异常数据。 ① 与数据采集前记录的参数进行核对 在数据采集之前的验证过程中,审计人员会随时记录一些重要参数,包括数据库表的记录数、表结构、视图内容以及进行分组统计获取的各层次的主要变量的统计指标(如按科目级次分组统计的当年发生额、年末余额)等,在数据转换工作完成之后,可以利用这些参数进行核对,确保数据采集的完整性。 ② 利用已有的统计指标和纸质凭证、报表进行核对分析 对所采集到数据的完整性的另外一种验证手段就是利用已有的统计指标或纸质凭证、报表进行验证。在假定这些指标和凭证、报表都正确的前提下,可以对转换后的数据进行统计分析,计算出一些主要的统计指标和报表数据进行核对,或将部分电子数据与纸制凭证进行核对。在某些情况下,由于不能接触被审计单位的生产环境,或由于数据是从备份介质中通过应用系统恢复后再导出为文本文件提供的,难以在数据采集之前进行验证。在审计大型金融企业时,通常都会遇到这种情况。此时,就必须通过电子数据计算有关金额,与现有的纸质资料,如有关财务报表、日常统计表的相应金额比对,如有差异,并不表明数据一定不真实,此时还应进一步分析,找出产生差异的原因。例如,获取了某银行明细账户的数据,则可以统计出年末总账余额,将统计出的数据与该行年末业务状况表的相应总账科目余额进行比较,如果通过电子明细账统计出的总账科目余额小于业务状况表的金额,还不能立即得出数据不完整的结论,因为可能存在有部分业务还是手工处理的情况。 ③ 检查有无异常数据 由于数据传输过程中会发生一些不可预料的情况,因此对采集到的数据,要特别验证其有无异常情况,如中文字符出现乱码、规范格式的文本文件中出现不规范行、数据类型转换失败、数据丢失等情况。对于这些问题,需及早发现,及时处理。 ④ 对数据转换工作的验证 数据采集之后的验证工作通常在数据转换之后进行。同时,有些数据采集的过程也包含了数据转换的工作。因此,必须对数据转换工作的正确性和有效性进行验证。对审计数据清理和转换工作的验证将在下面阐述。 2. 审计数据清理和转换阶段的验证 审计数据清理和转换工作贯串数据采集和分析的全过程。在数据清理和转换中,审计人员会将原始电子数据中表名、字段名、记录值代码以及表间关系的经济含义明确标识出来,这需要进行大量的查询和增加、删除、修改操作,每一步清理和转换工作都有可能影响数据的完整性和正确性,因此在这一阶段进行数据验证很有必要。 审计数据清理和转换过程中可能存在目标数据模式设计不合理、数据清理和转换策略不当、工具使用不合适、过程不规范缺少日志记录等问题。 相应地验证工作包括两方面内容: 一是确信数据清理和转换的目标实现;二是确认数据清理和转换工作没有损害数据的正确性、完整性。 (1) 数据清理转换过程中可能存在的问题 目前数据清理和转换工作主要是简单变换和部分数据清洗工作。在这个过程中可能存在的问题主要有以下4种情况。 ① 目标数据模式设计不合理 如果目标数据模式和源数据模式存在严重的结构冲突,为消除结构冲突就会增加许多数据转换工作量,降低转换的效率。另外一种表现是目标数据类型与源数据类型之间不相容,经常导致转换失败。如DBF的date类型数据到Microsoft SQL Server的smalldatetime类型数据的转换,就存在值域上的不相容。 ② 数据清理和转换策略不当 数据清理和转换涉及大量的数据读写操作,在这个阶段,应尽量减少对数据的约束与检查。可以在数据清理和转换之前去掉数据之间的约束,在清理和转换工作完成之后再添加这些约束。使得数据之间满足一定的约束条件,这本身也是数据清理和转换的一部分内容。另一个问题是索引。对数据的清理和转换工作最好是在没有索引的情况下进行,等完成之后再添加索引,有利于提高效率。 ③ 数据清理和转换工具使用不合适 大多数的数据清理和转换工具都能够辅助完成一定的数据清理和转换任务,但是这些工具各具特色,目前还没有一种工具能够完全满足审计数据清理和转换的需求。如对于打印格式或特殊格式文本文件的数据抽取问题,大多数的数据转换工具都不支持。另外,各种工具的转换效率和差错控制能力也不相同。在使用这些工具的时候,要求审计人员对这些工具的特性有较深入的了解。一旦使用不当,就可能造成审计人员无法知晓的错误。 ④ 清理转换过程不规范,没有日志记录 数据清理和转换工作通常是分步骤进行的,根据需要形成一系列的中间表。这一过程往往会因人而异,如采用不同的工具、不同的转换次序等。最重要的是这一过程目前没有形成日志,转换过程无法追溯,转换质量无法控制。 (2) 对数据清理转换过程进行验证的主要内容 对数据清理和转换过程进行验证主要包含两方面内容: 一是确认数据清理和转换的目标实现;二是确认数据清理和转换工作没有损害数据的正确性、完整性。 为了确认数据清理和转换的目标得以实现,必须针对转换前存在的数据质量问题和转换要求逐一核对。例如,空值是否有效消除、冗余数据是否有效消除、错误数据是否有效消除、需要进行的结构变换是否有效完成等。 要确认数据清理工作没有损害数据的正确性、完整性,就必须确认数据清理和转换过程没有引进新的错误,使用的主要方法见5.4.2节。 [MZ(3]5.4.1数据验证原因[MZ)] 审计数据验证不仅是确保数据真实、正确的重要手段,也是提高数据采集转换质量、降低数据采集转换风险的重要工具。审计数据验证的原因主要体现在以下3个方面。 (1) 避免假账真审,降低审计风险 确认被审计单位所提供的数据是系统存储的原始数据,确保审计人员所采集电子数据的真实性、正确性和完整性。通过验证电子数据对被审计单位实际经济业务活动的真实反映程度,排除被审计单位有意识隐瞒、修改部分数据的可能性。 (2) 避免数据在采集过程中发生遗漏 当电子数据从一台计算机转移到另一台计算机、从一个信息系统转移到另一信息系统时,由于信息系统的数据输入输出控制多样性、数据采集人员对相关知识、源数据库特性的掌握程度不同等情况的存在,可能导致采集的数据发生遗漏。因此,审计人员在对采集到的电子数据进行审计分析前,必须充分验证数据,确认数据的正确性、完整性。 (3) 避免清理转换过程对数据的破坏 由于采集到的原始数据的格式与记录分布多种多样,为了满足不同的审计需求,审计人员必须对采集到的电子数据进行数据清理和数据转换。如果审计人员在进行数据清理和数据转换时编写的程序或使用的工具存在问题,则可能导致部分数据遗漏或错误,使得随后进行的数据分析结果发生错误。因此,审计人员在完成每一步数据操作后,必须对被操作的电子数据进行数据验证,确保数据的正确性和完整性。 [MZ(3]5.4.2数据验证方法[MZ)] 审计数据验证的方法大致有以下4种: (1) 关系模型完整性约束的验证; (2) 数据总量和主要变量统计指标的验证; (3) 业务规则的验证; (4) 统计抽样方法的验证。 1. 关系模型完整性约束的验证 利用关系模型上一定的完整性约束条件定义和检查可以实现一部分数据验证。在关系数据模型中,基本结构是关系,可以对关系实施以下3种完整性约束。 (1) 实体和主键约束 每个关系中必须有主键(一个或多个字段的组合),关系中每个元组的主键取值不能为空,每个元组的主键在关系中必须唯一。 (2) 引用约束 一个关系的元组引用另一个关系的元组的数据,引用约束确保被引用的数据必须存在。例如,凭证表(关系)中的科目编号引用科目表(关系)中的科目编号,凭证表(关系)中的每个记录(元组)的科目编号必须在科目表(关系)中存在。 (3) 用户定义的完整性约束 包括属性的值域约束和关系上的完整性约束。 ① 属性的值域约束: 对象的属性的取值范围。例如,借贷方向只能取值为“借方”和“贷方”或相应的表示借贷方向的代码。 ② 关系上的完整性约束: 与一个实体的实例相联系的另一个实体的实例最大数和最小数。例如,一张海关报关单上申报的货物最少必须有一项,最多可以有N项。 2. 数据总量和主要变量统计指标的验证 利用数据总量和主要变量的统计指标进行验证是一种常用的方法,内容如下。 (1) 核对总记录数 审计人员进行数据采集后,首先要将取得的电子数据的记录数与被审计单位信息系统中反映的记录数进行核对(有打印纸质凭证的,还要与纸质凭证数进行核对),验证其完整性。这时有几种做法,一是直接利用被审计单位提供的查询终端,在一定权限的许可范围内统计出所采集的各张数据表的记录数;二是利用某些数据库管理系统提供的数据备份日志文件,如在Oracle中使用Exp命令备份数据式产生的后缀名为log的日志文件;三是利用数据采集之前的验证过程中获得的各张数据表的记录数量进行核对。必要时需要通过被审计单位技术人员查询出所下载数据的总记录数。 (2) 核对主要变量的统计指标 数据的主要变量(如数量、金额等)验证存在于计算机数据审计的每个环节,在审计人员进行任何数据操作后(简单查询除外),几乎都要通过数据验证来确认这些操作没有对数据的完整性造成任何影响。 对主要变量的验证通常是对采集到的业务数据进行简单清理和转换后进行的,通过编写SQL语句,利用SUM等统计函数来生成一定层次上的统计列,并与数据采集之前的验证过程中获得的相应参数进行核对,必要时需要被审计单位技术人员从源系统上计算出这些统计量。对数据清理、数据转换后形成的审计中间表进行主要变量统计指标的验证,目的是确认数据清理和转换操作的正确性。 3. 业务规则的验证 业务规则是一个系统正常处理业务活动所必须满足的一系列约束的集合。这些约束有来自系统外部的,如国家政策和法律法规;有来自系统内部的,如借贷记账法要求的借贷平衡,账务处理系统中各种账户之间的钩稽关系;有些约束还作为系统的控制手段,如凭证号的连续性约束。利用这些约束可以对采集到的数据实施一定程度的验证。 (1) 检查借贷平衡 检查借贷平衡是审计人员常用的一种简单有效的数据验证方法,它与核对主要变量的统计指标方法相辅相成。不同系统对于借贷金额的表示方法不尽相同,大致有两种: 一种金额存储方式为“借方金额”与“贷方金额”,这时可以通过SQL语句按月汇总出目的数据表的“借方金额”、“贷方金额”,分月验证数据的借贷平衡关系;另一种金额存储方式为“借贷方向+金额”,这时可以通过SQL语句按月份和借贷方向汇总目的数据表的借方金额和贷方金额,分月验证数据的借贷平衡关系。 (2) 凭证号断号、重号验证 凭证表(交易文件)是由原始凭证向其他会计账簿、报表传递会计信息的最基础的会计数据表,所以在利用电子数据开展计算机审计的过程中,必须注意保证凭证表数据的完整性。在会计信息系统中,凭证号是典型的顺序码,凭证号每月按照凭证类型连续编制,不同的凭证使用不同的凭证号,凭证号中间不能有断号、空号或重号。因此,分析凭证表中凭证号是否连续是验证审计人员所采集数据与被审计单位会计数据一致性的一种重要的核对方法。审计人员可以依据采集到的凭证表的存储特征,通过编写SQL语句来进行凭证号断号、重号的验证工作。除了对凭证号可以进行重号、断号验证外,对于其他一些具有连续取值特性的字段,也可以实施这样的验证。 (3) 钩稽关系 在各类会计账簿和报表中,每一类、每一个数据都有明确的经济含义,并且数据间往往存在某种明确而固定的对应关系,这些对应关系便是钩稽关系。钩稽关系一般体现为机械准确性,是不同经济变量之间在量上的依赖、对应关系。在业务和会计数据中存在许多钩稽关系。验证钩稽关系是否正确,是数据验证的重要方法。例如,在审计人员采集到的被审计单位固定资产数据表中,关于固定资产价值方面的数据一般都包括资产原值、累计折旧、资产净值字段内容。而且,这三个字段值之间存在如下钩稽关系: 资产原值-累计折旧=资产净值 因此,审计人员在使用被审计单位的固定资产数据表之前,有必要对上述钩稽关系进行验证。这可以通过SQL语句来实现。 (4) 法律法规约束 法律法规的约束构成了一种特殊的业务规则。利用这种约束既可以建立一定的数据分析模型,也可以进行数据验证。例如,根据某市相关规定,住房公积金单方缴存最高比例为12%,个人与单位同比例缴存;缴存基数(月工资)不得超过当地上年职工月平均工资的3倍。 假设Z表示实际月缴存额,A表示实际缴存基数,B表示个人实际缴存比例,C表示单位实际缴存比例,则Z =A ×(B + C) A、B、C应满足以下约束条件: ① A≤当地上年职工月平均工资×3 ② B≤12% ③ C=B 可以利用以上约束条件对数据进行验证并构造超标准缴存的数据分析模型。 若某市2015年度职工月平均工资为3000元,则统计2015年超标准缴存情况的数据分析模型如下: CASE WHEN 超比例、超基数 THEN 超缴额= 2×(实际比例×实际基数-12%×3000×3) WHEN 不超比例、超基数THEN 超缴额= 2×[实际比例×(实际基数-3000×3)] WHEN 超比例、不超基数 THEN 超缴额= 2×[(实际比例-12%)×实际基数] END 4. 统计抽样方法的验证 数据验证的另一类方法就是利用统计抽样的方法。当数据量巨大或者前面所述的方法无法使用时,可以考虑利用统计抽样方法。利用统计抽样方法进行验证一般分为以下3种。 (1) 从被审计单位提供的纸质资料中按照抽样的规则抽取一些样本,在采集后的数据中进行匹配和验证。 (2) 从被审计单位的系统中按照抽样的规则抽取一些样本,在采集后的数据中进行匹配和验证。 (3) 从采集后的数据中按照抽样的规则抽取一些样本,与被审计单位提供的纸质资料和被审计单位系统中的数据进行匹配和验证。 [MZ(2]5.5审计中间表[MZ)] 在数据清理、转换、验证之后,接下来应生成审计中间表。 被审计单位的数据一般不可能“天生”就适应审计需求。通常要利用被审计单位数据库中的数据实现审计分析,必须对清理、转换、验证后的基础数据按审计目的进行“再加工”,从基础数据中选择出所需要的数据,构成适用于审计分析的数据表——审计中间表。 审计中间表具有以下特点。 (1) 面向分析主题 审计中间表的构建是针对具体的审计项目实施的。同样的数据库,如果审计目的不同,构建的中间表也不相同。审计人员应该依据审计方案既定的审计目标进行数据的选择、整合,构建面向主题、满足审计目标的数据集合——审计中间表。 (2) 相对稳定 审计中间表是在具体的审计项目实施过程中形成的,是对采集到的源数据进行清理、转换,并进一步根据审计目标选择、整合而形成的数据集合。由于这些集合具有相对固定的结构,并且保存的是被审计单位的历史数据,一般不进行更新,所以审计中间表是相对稳定的。在联网审计模式下构建的审计中间表,即使数据不断发生变化,结构也是相对稳定的。 创建审计中间表的步骤可分为以下6步: · 备份原始数据; · 设计审计中间表; · 生成审计中间表; · 整理审计中间表; · 审计中间表数据验证; · 撰写审计中间表说明书。 (1) 备份原始数据 由于在创建中间表的过程中,会对数据进行删除等操作,如果出现操作失误,有时难以恢复数据。如果事先不做好备份工作,容易因操作失误而造成难以挽回的影响,延误数据处理的进程,影响审计的开展。在创建审计中间表前,应对基础数据进行备份。 (2) 设计审计中间表 在具体审计项目中,审计人员通常需要结合被审计单位的经济业务,创建多张审计中间表。由于审计中间表需要准确地表达出所代表的经济业务类别的信息,因此其设计和区分的标准就是经济业务性质和数据库表结构。一张审计中间表中所包含的经济业务数据具有相同的经济业务性质;不同审计中间表中所包含的经济业务数据,要么其经济业务性质不同,要么具有不同的数据库表结构。 为了设计审计中间表,首先应全面了解被审计单位的业务,根据业务性质划分业务类别;其次要分析数据字典和数据库表结构,细分业务类别;接着要根据不同的业务类别,分别从源数据中选择反映该类别经济业务主要信息的字段,参照数据库表结构中的规则,重新组织字段,设计主表;然后分析主表中各字段的内容,如果某一字段所包含的内容需要附加信息的说明,则找出反映这些附加信息的字段重新组织,设计附表;接下来要分析主表中各字段的内容,如果某一字段所包含的内容是代码,则需要结合代码的含义及其层次结构,设计出代码表;此外,如果还有一些反映某项经济业务信息的数据表,虽与主表中的字段并无直接关联,但也是审计所需要的,可以设计为补充表。 (3) 生成审计中间表 在生成审计中间表的过程中,需要关注以下3个环节: 分析源数据的表间关联关系、整合数据和选择字段。 为了分析源数据的表间关联关系,需要被审计单位提供数据库开发过程中形成的技术文档,这些文档可以包括数据库总体结构文档、数据库分类说明文档、数据库表间关系说明文档、数据库表结构文档以及创建数据库及表的SQL语句等。 整合数据的目的是将满足审计需求,分散在不同的数据库或数据表中的数据有机地关联起来。具体操作可以根据表间关系进行数据的连接,并将满足分析主题的数据形成数据仓库(或数据集市),以达到整合的目的。 选择字段的标准在于剔除与审计分析无关的字段,保留审计所需的相关字段。选择依据是对字段在数据库表中的作用、字段的经济业务含义等方面的理解。字段的选择应通过审计组充分讨论,并对结果进行书面记录。该阶段的字段选择,在数据清理的基础上侧重于依据审计实施方案规定的审计范围、内容、重点和目标进行选择。 完成上述三个环节的工作之后,可以通过编写SQL语句将所需要的数据表进行关联、选取所需字段并设置有关条件,生成符合审计需要的审计中间表。审计人员编写的SQL语句主要通过使用SELECT语句选取字段,使用JOIN操作将相关数据表进行关联,并利用INTO操作保存结果,最终生成审计中间表。 (4) 整理审计中间表 在生成审计中间表后,还需要通过为其设置主键,设定表中记录唯一性的标识,以检验在生成审计中间表的过程中是否有由于表间连接导致表中存在重复记录的情况。 可以建立主表和附表、代码表等相关表之间的关系图。关系图的建立,一方面验证了数据之间的约束关系;另一方面便于审计人员了解数据之间的关联关系,更好地使用数据。 (5) 审计中间表数据验证 审计中间表的数据验证工作包括检查在字段选择的过程中,有无因操作失误将确定应保留的字段删除,或是仍保留了应删除的字段;应重点关注数据连接操作的验证,检查有无因连接条件出现逻辑错误,或通过连接形成了不正确、改变原来经济含义的数据;还应注意在处理过程中有无由于突然断电、电磁干扰和病毒感染导致数据完整性受影响的情况。 (6) 撰写审计中间表说明书 审计中间表说明书可包括以下内容: 被审计单位信息系统建设的概况、系统的构成、与审计相关的系统的主要功能和数据库管理系统的基本情况;数据采集、转换、清理、验证和建立审计中间表的人员和重要操作;用以进行审计分析的数据来源、数据之间关系的类型和具体关联关系;数据处理人员对数据分析和使用的建议。说明书的撰写应该按照系统的逻辑构成关系,例如按“系统→子系统→系统内功能模块→具体数据”的顺序进行逐步细化说明。 由于审前调查和电子数据的处理过程中的具体工作可能分别由不同的审计人员完成,因此审计中间表说明书的撰写,应由原数据采集处理的具体操作人员分别承担,然后统一汇总。 [MZ(2]5.6拓展阅读[MZ)] 本章的拓展阅读主要包括两个部分: 一是数据转换规则;二是数据转换实例。 [MZ(3]5.6.1数据转换规则[MZ)] 审计数据转换规则包括关系数据库数据表模式之间的转换(关系转换)规则和数据表记录之间的转换(记录转换)规则。 1. 关系转换规则 关系表转换可分为单表到单表、单表到多表、多表到单表三种情况(多表到多表可以拆分为单表到多表、多表到单表的情况)。这需要研究关系数据库的相关特性,理解关系数据库的规范化要求,确保转换前后关系的完整性。 (1) 单表到单表 单个数据源表到单个目的表的转换。 假设有源关系RS(A,B),目标关系RD(C,D,E),那么转换规则可以表示如下: RD.C=f(RS.A),RD.D=f(RS.B),RD.E=f(RS.A,RS.B)。其中f(x)表示关于x的运算表达式。 (2) 单表到多表 单个数据源表到多个目的表的转换。 假设有源关系RS(A,B,C),目标关系RDl,RD2,根据RDl和RD2的不同模式结构,又可以分为几种不同的情况。 ① RDl(A,B)、RD2(B,C),转换规则可以表示如下: RDl.A=RS.A,RDl.B=RS.B,RD2.B=RS.B,RD2.C=RS.C。 ② RDl(A,B,FID)、RD2(ID,C),转换规则可以表示如下: RD2.ID=ID(RS.C),RD2.C=RS.C,RDl.A=RS.A,RDl.B=RS.B,RDl.FID=RD2.ID。其中ID(RS.C)表示自动对C字段建立编号,FID代表外键。 ③ RDl(A,B)、RD2(C),转换规则可以表示如下: RDl.A=RS.A,RDl.B=RS.B,RDl.C=RS.C。其中RDl和RD2没有重复记录。 (3) 多表到单表 多个数据源表到单个目的表的转换。 假设有源关系RSl(A,B)、RS2(C,D),目标关系RD(A,B,C),由于是模式之间的转换,所以无非是源表进行连接操作之后映射到目的表上。根据要求的不同,存在连接、左连接、右连接、全连接4种情况。 2. 记录转换规则 数据表记录之间的转换可以分为: 单记录到单记录、单记录到多记录、多记录到单记录三种情况(多记录到多记录可以拆分为多记录到单记录,单记录到多记录的情况)。需要研究关系数据库记录特性,建立不同记录之间的转换标准。 (1) 单记录到单记录 根据源与目的元组字段的不同,可以分为以下几种形式。 ① 目标元组和数据源元组是简单的映射关系: S(x1,…,xi,…,xn) to D(x1,…,xi,…,xn)。 ② 目标元组比数据源元组多几个字段,增加的字段值可以为固定值或者关于源元组字段的表达式: S(x1,…,xi,…,xn) to D(x1,…,xi,…xn,xn+1,…,xN)。 ③ 目标元组比数据源元组少几个字段: S(x1,…,xi,…,xn) to D(x1,…,xi-j,xi+k,…,xn),其中i-j>0 And i+k then (RDl.A=RS.A,RDl.B=RS.B,RDl.C=RS.C) if then (RD2.A=RS.A,RD2.B=RS.B,RD2.C=RS.C) ② 如果这里的多记录是在单个目的表中,那么这种情况就是拆分元组的字段。这和单记录到单记录的字段拆分有点类似,但又有所不同,主要表现为目的表的结构不同。仍以上面的例子为参考,源表的关系模式为: S(Personnel,Sdate,Goods),但是目的表的关系模式为: D(Personnel,Sdate,F(Goods)),这就需要分别定义字段间的映射关系。具体例子如图511所示。 (3) 多记录到单记录 与单记录到多记录相同,根据多记录的记录位置不同,大体也可以分为两种情况。 ① 如果多记录在多个源表中,那么这种情况就是多表归并的问题,是指将多个源表中的记录归并到一张目的表中去,要消除重复记录。假设有关系: 源关系RSl(A,B,C),RS2(A,B,C),目标关系RD(A,B,C),转换规则为RD.A=RSl.A,RD.A=RS2.A,RD.B=RSl.B,RD.B=RS2.B,RD.C=RSl.C,RD.C=RS2.C,这种情况要指定用于消除重复元组的主键。 ② 如果这里的多记录是在单个源表中,那么这种情况就是合并。它可以看作是图511情况的逆操作。这里不做过多说明。 图511单记录到多记录的数据转换示例 [MZ(3]5.6.2数据转换实例[MZ)] 在审计实践中,常遇到采集到的数据库表名称使用流水号加密的情况,例如采集到100张表,表名为table001、table002……table100。而每张表中的字段也是由item001、item002……这样顺序排列下去。这样的表不方便审计人员直接撰写分析语句,通常需要加以转换。多表批量转换的实现可以通过编写存储过程来实现。 以汉化“transformation”数据库中的436张表的过程为例,通过Microsoft SQL Server的存储过程实现数据库表及字段名称的批量汉化。原始数据如图512所示。 图512原始数据表结构 步骤一: 根据数据库表结构文档建立中英文表名和字段名对照表,格式如图513所示。 图513中英文表字段对照格式 步骤二: 将“中英文表字段对照格式.xls”导入Microsoft SQL Server数据库,与采集到的数据放在同一个库中,并将这张表命名为“合并结果”。 步骤三: 在查询页面执行以下预处理语句,结果如图514所示。 图514预处理 步骤四: 建立存储过程p_FieldMap,内容如下。 if exists (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[p_FieldMap]') And OBJECTPROPERTY(id,N'IsProcedure') = 1) drop procedure [dbo].[p_FieldMap] GO create procedure p_FieldMap As begin 定义变量 declare @s_oldTable varchar(50),@s_Table varchar(50) declare @s_oldField varchar(50),@s_Field varchar(50) declare @s_TableBak varchar(50) declare @s_Define varchar(50) declare @s_temp varchar(120),@i_Tag smallint 定义游标,定位到字段映射表 DECLARE C_Field CURSOR FOR SELECT 原表名,表名,原列名,列名,标志 FROM 列名表 WHERE 标志=1 打开游标 OPEN C_Field 得到当前行的内容并存入变量 FETCH NEXT FROM C_Field INTO @s_oldTable,@s_Table,@s_oldField,@s_Field,@i_Tag 初始化表名备份变量 set @s_TableBak='' 循环处理每一行记录 WHILE @@FETCH_STATUS = 0 BEGIN 判断是否进入下一个表,如果是,修改表名,并修改表名备份变量值 if @s_Table<>@s_TableBak begin EXEC sp_rename @s_oldTable,@s_Table set @s_TableBak=@s_Table end 修改列名 set @s_temp=@s_Table + '.' + @s_oldField EXEC sp_rename @s_temp,@s_Field,'COLUMN' 修改标志位 UPDATE 列名表 SET 标志=0 WHERE current of C_Field 获取下一条记录内容 FETCH NEXT FROM C_Field INTO @s_oldTable,@s_Table,@s_oldField,@s_Field,@i_Tag END 后续处理 CLOSE C_Field DEALLOCATE C_Field End 步骤五: 执行存储过程p_FieldMap,完成汉化,结果如图515所示。 图515表名、字段名汉化结果 汉化表的实现当然也可以通过软件直接完成。以下讲解如何使用“审计数据采集分析2012”完成以上这436张表。 前两步同前。 步骤三: 打开“审计数据采集分析2012”,登录Microsoft SQL Server的实例“transformation”,新建一个项目,点击“工具”菜单下的“数据结构汉化”子菜单项,如图516所示。 图516“审计数据采集分析2012”汉化步骤三 步骤四: 如图517所示,在弹出的“SQL Server数据结构汉化工具”中,在“数据结构说明表”后的下拉列表框中找到“合并结果”,并将之确定为数据结构说明表;在“列(原表名)” 后的下拉列表框中找到“表英文名称”,并将之确定为待修改的原表名;在“列(新表名)” 后的下拉列表框中找到“表中文名称”,并将之确定为将使用的目标表名;在“列(原字段名)” 后的下拉列表框中找到“字段英文名称”,并将之确定为待修改的原字段名;在“列(新字段名)” 后的下拉列表框中找到“字段中文名称”,并将之确定为将使用的目标字段名。 图517“审计数据采集分析2012”汉化步骤四 步骤五: 点击“汉化”按钮,完成汉化。汉化结果参见图515。 [MZ(2]思考题[MZ)] 1. 请简述数据清理策略、数据转换策略、数据验证策略。 2. 转换变化日志是必需的吗?为什么? 3. 数据清理、数据转换、数据验证的原因是什么? 4. 数据清理、数据转换、数据验证各有什么主要的方法? 5. 什么是模式层冲突?什么是实例层冲突?常见的模式层冲突和实例层冲突都有哪些? 6. 审计数据清理转换过程中可能存在什么问题? 7. 请简述评价数据质量的6个主要评价指标。 8. 审计数据转换的基本内容和基本类型指的各是什么? 9. 什么时候需要采用程序编码这种转换方法? 10. 审计数据验证在数据采集之前和之后的主要内容分别是什么?主要区别在哪里? 11. 审计数据验证在清理转换阶段的主要内容是什么? 12. 审计中间表的特点是什么? 13. 如何创建审计中间表? 14. 数据转换规则有几条? 15. 请简述单表到多表转换过程的要点。 16. 请简述单记录到单记录的数据转换规则的要点。 17. 试述利用“审计数据采集分析2012”实现数据库表名称转换的要点。 18. 名词解释: 转换变化日志、转换错误日志、简单变化、清洁和刷洗、模式层冲突、实例层冲突。 [MZ(1]第三篇审计数据分析篇[MZ)] 本篇共包含4章,主要介绍审计数据分析的技术方法,重点讲述查询型分析、验证型分析和发掘型分析在审计中的应用。