胡記兵,黃作明,柳巧玲
(南京審計(jì)學(xué)院 信息科學(xué)學(xué)院 信息系統(tǒng)審計(jì)實(shí)驗(yàn)中心,江蘇 南京210029)
工作流是業(yè)務(wù)流程的抽象,可以將孤立的信息串起來,并賦予信息特定的含義。不同的使用者對信息的理解可能是不同的,信息使用者的角色決定了該信息的主觀涵義。為了保證信息系統(tǒng)的正確性,必須使得信息的客觀涵義與信息的主觀涵義一致,這是在信息系統(tǒng)不能高度自動(dòng)化時(shí)必須達(dá)到的要求。如稅務(wù)人員必須保證正確地獲得信息系統(tǒng)中的表。信息系統(tǒng)中的表決定了信息的主觀涵義,表中數(shù)據(jù)的形成過程決定了表中信息的客觀涵義,只要二者一致,信息系統(tǒng)出錯(cuò)的可能性就被降低。
本文只關(guān)注信息被賦予的客觀涵義,信息的主觀涵義與客觀涵義的一致性可以采用以下方法來保證:將信息系統(tǒng)中的特定數(shù)據(jù)遠(yuǎn)程連接到信息使用者并實(shí)時(shí)傳送,這個(gè)實(shí)時(shí)信息定義主觀涵義,在實(shí)時(shí)接收端嚴(yán)格防止增刪改等寫操作,只能讀取。
目前,關(guān)于流程審計(jì)的研究受到了理論界與實(shí)務(wù)界的廣泛關(guān)注。其中具有代表性的研究成果有:Huang Shiming等人針對利用計(jì)算機(jī)輔助審計(jì)技術(shù)和工具所進(jìn)行的審計(jì)的缺陷,建立了一種業(yè)務(wù)流程差距檢測機(jī)制,該機(jī)制能夠自動(dòng)檢測信息系統(tǒng)流程與企業(yè)內(nèi)部控制流程之間的差距,幫助解決數(shù)據(jù)質(zhì)量問題,提高系統(tǒng)的安全性[1]。李國棟等人采用組件化的方法,通過Petri網(wǎng)對工作流過程模型進(jìn)行了組件形式的建模,并以建立網(wǎng)絡(luò)科技信息資源加工審核系統(tǒng)模型為例,闡述了組件化建立工作流網(wǎng)的過程,并通過基于不變量的方法對工作流網(wǎng)的活性和有界性進(jìn)行了分析,驗(yàn)證了模型的可行性[2]。丁志軍等人利用時(shí)序Petri網(wǎng)對審計(jì)緩沖區(qū)管理的實(shí)現(xiàn)方案進(jìn)行建模,進(jìn)而對系統(tǒng)的安全性和活性進(jìn)行了分析和驗(yàn)證[3]。王保云等人根據(jù)有色Petri網(wǎng)原理提出了安全審計(jì)事件可視化模型,并基于該模型,以文件類操作的安全審計(jì)事件為主線,給出了一種安全審計(jì)事件時(shí)空邏輯關(guān)系可視化實(shí)現(xiàn)框架[4]。李博文等人針對計(jì)算機(jī)審計(jì)工作,結(jié)合工作流和Petri網(wǎng)方法,建立了一套審計(jì)工作流模型,并通過化簡,對模型進(jìn)行了正確性驗(yàn)證[5]。劉志磊在研究Petri net工作流的基礎(chǔ)上,將其應(yīng)用于審計(jì)管理系統(tǒng)中,并且所設(shè)計(jì)的管理系統(tǒng)已經(jīng)在某商業(yè)銀行審計(jì)管理項(xiàng)目中得到應(yīng)用,取得較好效果[6]。楊雯等人給出了面向?qū)ο蠊ぷ髁骶W(wǎng)的定義,分析了它的特點(diǎn),并以其為工具建立了審計(jì)業(yè)務(wù)流程模型[7]。張衛(wèi)祥在Petri網(wǎng)和工作流網(wǎng)定義的基礎(chǔ)上,把流程挖掘技術(shù)引入到安全審計(jì)中,并借鑒現(xiàn)有安全審計(jì)常用分析方法,提出了對流程挖掘和針對工作流領(lǐng)域異常的分析手段和方法[8]。
Petri網(wǎng)是一種圖形化描述過程的強(qiáng)有力工具,可以非常直觀地描述一個(gè)工作流過程,由庫所和變遷組成,用圓圈表示庫所,矩形表示變遷,庫所和變遷由有向弧相連接[9]。變遷是Petri網(wǎng)中的主動(dòng)元素,通常表示事件、操作、轉(zhuǎn)換或傳輸。通過實(shí)施變遷,過程從一個(gè)狀態(tài)轉(zhuǎn)變到另一個(gè)狀態(tài)。庫所是Petri網(wǎng)中的被動(dòng)元素,它們不能改變網(wǎng)的狀態(tài),通常表示媒介、地理位置、階段、狀態(tài)、條件等。變遷的實(shí)施就是從每個(gè)輸入庫所中獲得標(biāo)記(每個(gè)輸入庫所中都要有標(biāo)記,這也是條件),然后放到每個(gè)輸出庫所中。如圖1所示,從輸入庫所Claim中獲取標(biāo)記,然后放到輸出庫所Under Consideration中。實(shí)施時(shí),變遷消耗掉來自輸入庫所的標(biāo)記,并為每個(gè)輸出庫所產(chǎn)生標(biāo)記。
擴(kuò)展的Petri網(wǎng)主要由4種路由結(jié)構(gòu)組成:順序路由、并行路由、選擇路由、循環(huán)路由。如圖2~圖5所示。
一個(gè)流程可以用Petri網(wǎng)來表示,這樣可以用Petri網(wǎng)的理論對流程進(jìn)行分析。本文引入Petri網(wǎng)以便對流程的執(zhí)行情況進(jìn)行審計(jì)。為了便于審計(jì),要求循環(huán)路由只發(fā)生一次,這種情況下需要對流程的Petri網(wǎng)稍作更改。
本文采用收款流程來描述對流程的審計(jì)[10]。為不失一般性,此處考慮任意的收款流程,即本例只反映收款流程的主要元素,這樣做的目的是使對流程審計(jì)的方法適用于任意流程的審計(jì)工作。如果收款流程是通過計(jì)算機(jī)實(shí)現(xiàn)的,則需要系統(tǒng)分析員和軟件工程師介入,系統(tǒng)分析員對收款流程系統(tǒng)的分析結(jié)果如圖6所示。
軟件工程師在系統(tǒng)分析員的指導(dǎo)下工作。軟件工程師為開發(fā)出可用的收款流程系統(tǒng),根據(jù)需要在數(shù)據(jù)庫中設(shè)計(jì)表格,如表 1~表 4所示。
為了完成審計(jì)工作,必須對數(shù)據(jù)庫系統(tǒng)中的所有表格進(jìn)行審計(jì),即驗(yàn)證在每個(gè)表格上的操作是否違反了流程。如果操作違反了流程,需要將違反流程的操作找出來,合規(guī)的流程由系統(tǒng)分析員在軟件需求方的指導(dǎo)下定義。存在流程被違反的可能性是因?yàn)閿?shù)據(jù)庫操作入口不是唯一的,操作可以通過對軟件的操作來進(jìn)行,也可以進(jìn)入數(shù)據(jù)庫進(jìn)行更改。
表1 收款單據(jù)表(SKDJB)
表2 收款單文件表(SKDWJB)
表3 總帳表(ZZB)
表4 預(yù)收款表(YSKB)
先來看對SKDWJB的審計(jì)。審計(jì)人員要了解在SKDWJB上有哪些操作,可以看出,如果忽略SKDWJB與ZZB和YSKB的聯(lián)系,在SKDWJB上的操作有insert和update兩種。
對于SKDWJB上的insert操作O1,如果 O1沒有違反規(guī)則,則要求在SKDJB上有與該操作對應(yīng)的insert操作O2和 delete操作 O3。例如,O1是 insert into dbo.SKDWJB(ContractID,RecordPerson,TotalAmount,AmountOnContract,Amount)values(1,'zhang san',1 000,5 000,1 000)。
在SQL Server 2008中為每張表格建立審計(jì)表,以反映表格內(nèi)容的變更[11]。O1操作將在審計(jì)表dbo.Audit中產(chǎn)生一條記錄,通過該記錄的PrimaryKey字段找到O1操作涉及的主鍵,這里是1,通過 SQLStatement字段找到O1涉及的金額,這里是 1 000,用 sql語句 Select*from dbo.Audit where TableName=′dbo.SKDJB′and Operation=′i′and SQLStatement like ′%(1,1000%′在 dbo.Audit表中查找在 SKDJB上與 O1對應(yīng)的 insert操作 O2,用 sql語句Select*from dbo.Audit where TableName=′dbo.SKDJB′and Operation=′d′and SQLStatement like ′%ID=1%′在dbo.Audit表中查找在SKDJB上與O1對應(yīng)的delete操作O3。O2可能是 insert into dbo.SKDJB(ContractID,Amount,AmountOnContract,ID)values(1,1 000,5 000,1),O3 可 能 是delete from dbo.SKDJB where ID=1。
對于SKDWJB上的update操作O4,如果O4沒有違反流程,則要求在SKDJB上有與該操作對應(yīng)的insert操作O5和delete操作O6。例如,O4是update dbo.SKDWJB set RecordPerson=′li si′,TotalAmount=3 500,Amount=2 500 where ContractID=1,O4操作將在審計(jì)表 dbo.Audit中產(chǎn)生一條記錄,通過該記錄的PrimaryKey字段找到O4操作涉及的主鍵,這里是 1,通過SQLStatement字段找到O4涉及的金額,這里是 2 500,用 sql語句 Select*from dbo.Audit where TableName=′dbo.SKDJB′and Operation=′i′and SQLStatement like ′%(1,2 500%′在 dbo.Audit表中查找在 SKDJB上與 O4對應(yīng)的 insert操作 O5,用 sql語句Select*from dbo.Audit where TableName=′dbo.SKDJB′and Operation=′d′and SQLStatement like ′%ID=6%′在dbo.Audit表中查找在SKDJB上與O4對應(yīng)的delete操作O6。O5可能是 insert into dbo.SKDJB(ContractID,Amount,AmountOnContract,ID)values(1,2 500,5 000,6),O6 可 能 是delete from dbo.SKDJB where ID=6。
以上審計(jì)比較容易用計(jì)算機(jī)程序?qū)崿F(xiàn),但是對ZZB和YSKB的審計(jì)卻不那么簡單,因?yàn)閷ZB和YSKB的操作需要共享SKDWJB中的資源,這與SKDJB和SKDWJB的簡單一對一關(guān)系不一樣。為了降低對ZZB和YSKB的審計(jì)難度,用Petri網(wǎng)來描述幾個(gè)表之間的資源使用關(guān)系,如圖7所示,同時(shí)流程系統(tǒng)軟件按照該P(yáng)etri網(wǎng)進(jìn)行設(shè)計(jì)。
圖7中的兩張表SKDWJB1和SKDWJB2是為了方便審計(jì)工作而增加的。從圖7中可以看到,在SKDWJB上的insert操作有兩類,一類是輸入過程引發(fā)的,另一類是轉(zhuǎn)帳過程引發(fā)的。前文已經(jīng)描述了對輸入過程引發(fā)的在SKDWJB上的insert操作的審計(jì),現(xiàn)在要考慮SKDWJB和ZZB的關(guān)系,將SKDWJB上的insert操作的審計(jì)修改為以下內(nèi)容:
對于SKDWJB上的insert操作 O1,如果 O1沒有違反規(guī)則,則要求在SKDJB上有與該操作對應(yīng)的insert操作 O2和 delete操作 O3(設(shè)該條件表示為 C1);或者要求在 SKDWJB和 SKDWJB1上都有相應(yīng)的 delete操作(設(shè)該條件表示為C2)。下面提供按照這條規(guī)則可以找出所有違規(guī)操作的簡要證明:
令 O1→C1∪C2表示:如果任意O1合乎流程,那么C1和C2必然有一個(gè)被滿足。
反證:O1→C1∩C2,假設(shè)存在某一個(gè)在 SKDWJB上的insert操作 O1違規(guī),那么必然在 SKDJB上與 O1對應(yīng)的 insert操作 O2和 delete操作 O3至少缺一個(gè)(即 C1),并且要求SKDWJB上相應(yīng)的delete操作O4和在SKD-WJB1上相應(yīng)的delete操作O5至少缺一個(gè)(即C2)。只要操作是按照上面的Petri網(wǎng)進(jìn)行,以上假設(shè)是不可能的,即不可能存在違規(guī)操作O1。即只要違規(guī)操作O1存在,就一定可以按照上面的規(guī)則將其找出。
在圖7所示的Petri網(wǎng)中,轉(zhuǎn)帳這個(gè)變遷實(shí)施的前提條件是SKDWJB和SKDWJB1中同時(shí)有一個(gè)標(biāo)記,這個(gè)條件可被輸入變遷滿足。從圖7可看出,當(dāng)輸入變遷實(shí)施時(shí),給SKDWJB和SKDWJB1各輸入一個(gè)標(biāo)記,從而滿足轉(zhuǎn)帳變遷實(shí)施的條件。轉(zhuǎn)帳變遷實(shí)施后,給SKDWJB輸入一個(gè)標(biāo)記,這個(gè)標(biāo)記是記帳變遷實(shí)施的條件之一,記帳變遷實(shí)施的另一個(gè)條件是SKDWJB2中存在標(biāo)記,這個(gè)條件被輸入變遷的實(shí)施滿足。
本文研究得出如下結(jié)論:(1)流程為服務(wù)所導(dǎo)向。服務(wù)需要在變化,服務(wù)質(zhì)量要求在提高,因此流程是不斷在變化的。有潛在審計(jì)需求的信息系統(tǒng)需要在系統(tǒng)分析中盡早考慮審計(jì)需要,考慮越早,需要做的工作越少。(2)Petri網(wǎng)的作用在于確定為滿足審計(jì)需要增加的表。在圖7中,SKDWJB1和SKDWJB2都是為了滿足審計(jì)需要增加的表,如果不是為了審計(jì),這兩張表都是不必要的。(3)從審計(jì)過程中看到,選擇路由是難于審計(jì)的,順序或并行路由是易于審計(jì)的。在流程中,一張表格被多個(gè)過程使用,如果不采取增加表的措施,將產(chǎn)生混亂。所以,流程設(shè)計(jì)者如果考慮審計(jì)需要,就必須盡量避免選擇路由出現(xiàn)在流程中,如此,可以為信息系統(tǒng)審計(jì)人員減少不必要的工作。(4)流程審計(jì)今后或許可以向更加智能化、自動(dòng)化的方向發(fā)展,如開發(fā)出比較智能的算法來完成信息系統(tǒng)審計(jì)工作。
[1]Huang Shiming,YEN D C,HUNG Y C,et al.A business process gap detecting mechanism between information system process flow an internal control flow[J].Decision Support Systems,2009,47(4):436-454.
[2]李國棟,宋斌,柳長安.基于Petri網(wǎng)的組件化工作流模型研究[J].微計(jì)算機(jī)信息,2009,25(30):104-106.
[3]丁志軍,劉海峰,蔣昌俊.審計(jì)緩沖區(qū)的形式化模型及其驗(yàn)證[J].計(jì)算機(jī)科學(xué),2006,33(5):98-103.
[4]王保云,楊英杰,常德顯,等.一種安全審計(jì)事件時(shí)空邏輯關(guān)系可視化方法[J].計(jì)算機(jī)工程,2009,35(2):151-153.
[5]李博文,李孝忠.基于Petri網(wǎng)的審計(jì)工作流模型設(shè)計(jì)與驗(yàn)證[J].計(jì)算機(jī)應(yīng)用,2006,26(Z):242-243.
[6]劉志磊.Petri Nets工作流及其在審計(jì)管理中的應(yīng)用[D].北京:北京郵電大學(xué),2008.
[7]楊雯,劉厚泉,劉曼.基于高級(jí) Petri網(wǎng)的審計(jì)業(yè)務(wù)流程建模[J].福建電腦,2007(11):104-105.
[8]張衛(wèi)祥.面向工作流系統(tǒng)基于流程挖掘的安全審計(jì)技術(shù)研究與實(shí)現(xiàn)[D].上海:華東師范大學(xué),2007.
[9]AALST V W,HEE K V.工作流管理[M].王建民,聞立杰,譯.北京:清華大學(xué)出版社,2004.
[10]張瑞君,蔣硯章.會(huì)計(jì)信息系統(tǒng)[M].北京:中國人民大學(xué)出版社,2009.
[11]NIELSEN R.SQL Server 2008寶典[M].馬振晗,任鴻,高宇輝,譯.北京:清華大學(xué)出版社,2011.