[搬家兼装修]银行的事故
前面的废话《银行的事故》是俺在银行科技工作中的各种道听途说的集大成者,为了增添读趣,就写得好象自己置身其中一样。如果发现里面的内容与现实报道有雷同之处,那必定是俺也看过报道联想之后编造出来的。因此,如果有什么冒犯的,或者想知道啥秘密的,千万别找我。
这个系列,初写是在三年前刚进河时,但写着写着就没了兴趣,弃坑很久,中间填了一锹土,又不愿再填了。不过这个题材还是让我欲罢不能,今日接着续一篇,并将原文搬到这边来,希望,爱坛能让我有毅力将其补完。
一
本来想做一个标题党,将本文名为《如何去抢银行》,不过考虑到这样一个题目不但很黄很暴力,而且可能引来权力部门的专政,所以还是老实一点比较好,就叫做事故吧。声明一下,那些没有技术含量的暴力事件,或者有技术含量但是却与IT无关的暴力事件,都不在本文关注的范围内。做什么事说什么话,我想写的,还是那些与IT相关的故事,或者可以称为智力事件,这个既包括一些有心而为之的案子,也包括由于脑袋断路而造成的损失。
其实银行的IT应用应该是很久远的事情(印象中最早的是中国银行,据说在八十年代他们就用中型机了),不过大多数银行(包括工、农、建)一开始并没有大机的概念,都是一个网点一台机器,现在我们称那种系统为单点系统。在那个时代,电脑闹个头痛脑热是很正常的事情,而且一旦坏了,就只有等着运维人员上门来修,这时候,银行与顾客经常会有这样的对话,“我取钱”,”电脑坏了”,“什么时候好?“,”不知道“,”我急用呀”,“没办法“,”你们现在在干什么?”,“等修电脑的人”,“他们什么时候来?”,“正在过来“,“今天能好吗?”,“不知道,现在时间不早了,要不然你明天过来?“。
反正遇到这种情况,你就是神也没用,只能去祈祷那些不是神却很神的人赶快出现。而且在那个时代,你甚至也不能象现在这样,换一个网点试试运气。银行的人会告诉,虽然本银行有众多分号,但概不通兑,新街口开的户到东四十条那是肯定不行的。本来上了电脑就意味着方便,比如当时最常见的广告语是“电脑核算,快捷方便”,但是故障如此之多,以至于据说某些农行(农行曾经就是银行界的泔水桶,有什么比较NC的事一般都会扣它头上,现在有了更好更大的泔水桶,那就是农信)网点打出“手工记帐、方便可靠”的招牌。
不过那时的故障其实都算不得事故,因为影响范围有限,顾客也比较好对付,遇到取不出钱,一般都是自认倒霉,然后回家等着第二天来碰碰运气,一般而言,你的 RP不会太差,那种系统一连坏三天的情况虽然也有但并不常见。当时,电脑故障的不确定性几乎和今天下不下雨是一样的,天气这事情只有天老爷和气象局知道,而电脑这事儿,天老爷知不知道大家不清楚,明确知道是怎么回事的只有科技部的仙人们。
其实有时候也不能怪系统不结实,因为银行网点的员工毕竟不是电脑专业,而且过去的电脑普及率也不象现在,很多人真的对电脑没有任何感觉。举个简单的例子,在UNIX下面,“_"是经常会用在程序名字里的,但是在实际工作中,这个最好别用,因为难免有时候系统出现些故障,然后需要通过电话支持一下,“你执行 sys_main.sh...",“什么?”,“S...Y...S下划线”,“下划线是什么?”,“就是减号那个键同时按上shift","shift 是什么?”,“就是那个......"。怎么样,麻烦增强版吧。这已经是对网管(网点主管)说了,要是普通员工,那就更麻烦了。
就因为这个,在很长时间,电脑对于银行的业务人员都是一个比较神秘的东西,当然,这也为规避银行的某些管理提供了一个非常有效的借口。在九十年代中期,银行普遍开始加强管理,窗口人员和客户吵架一次,检查,两次,下岗培训一个月,三次,解聘,然后还有许多具体的服务指标,比如什么样的业务应该多长时间办完。但是如果你把这个条例看完一遍,相信印象最深刻的不是哪一条规定,而是那几乎每一条后面都跟着的”电脑故障除外”。
时代在进步,银行当大爷的时代一去不复返,客户有个什么不舒服,大可以堵在窗口,然后一元一元的往帐户里存钱,只要不带凶器,银行还真拿你没办法。但这也间接造成了科技部门的紧迫感,曾经去一个网点维护,网点人员指着门上的那个大洞说,这个就是客户踢的,也不怪别人,三天没取成钱。不怪客户,那就自然应该怪科技了,虽然别人没这么说,但是作为科技人员,这个感觉真的不太好。
不过在单点时代,所有的这些故障,都只能说是一些麻烦,真正上升到事故的层次还得到银行数据集中之后。
二
银行系统的数据集中是在九十年代初就开始的,在很多人眼里,数据集中不过是把单点系统变成多点系统,但实际上却不是那么简单。数据集中是银行发展过程中具有里程碑意义的事情,一套银行综合业务系统投资巨大,象全国性商业银行,都是几十亿的投入,但是却决不会有人说这玩意费钱,利益均沾是一方面,确实能带来效益还是决定因素。
银行数据集中用一句官样的话,就是以科技手段突破银行经营中地域和业务的限制,打破管理中的条块分割,这里面不但有技术上的细节问题,甚至还牵扯到部门间的利益。当然数据集中这事儿,真的不是一句两句话能说完的,短里写是一篇文章,长里写就是一个系列了,还是就此打住,我们转入正题,先从一个不大不小的民事案子说起。
在大连有个叫辛寨子的地方,这个地方虽然号称大连的新马泰(辛寨子、马栏子、台山),实际却是一个偏远所在,住的人基本都是原来的村民,人口不多,大家抬头不见低头见,都比较熟悉。回头想起,这个案子,有很大程度就是因为熟悉而来。
有一天,王二(名字咱就隐去吧)媳妇拿着到期的存单来取款,银行却告诉她,钱已经被挂失取走了。当时媳妇就有些蒙了,我这存单在这儿,钱怎么说没就没了呢?赶紧找当家的商量,又拿出了另一张存单,到银行来,发现情况比想象的更糟,另一张存单的钱也被取走了。银行说,钱是被挂失取走的,而且已经被取了一段时间了(这个,就意味着监控录象可能已经被销了),除此之外,也就提供不出什么来。
两张存单不是小数,加在一起有三万多,怎么也不能瞎了,王二看银行这头没法交流了,就去派出所报案。警察的介入这效果还是立杆见影的,新情况马上出来了。银行查了一下挂失记录,发现挂失的人也叫王二,但是身份证号却是另外一个号,这个王二也真的存在,而且就是一个村子的,平时大家为了区分,就称这两个人为大王二、小王二,丢钱的这个是大王二。
不过,知道这事儿是小王二办的,所有的人都松了口气。警察立即把小王二给叫来,小王二家也不远,就在银行隔壁,开了个铺面。再一细问,原来这事还真和小王二有关,是他媳妇办的,问题是这位小王二媳妇怎么能够挂失大王二的存单,按照银行的说法,小王二媳妇提供了与大王二的存单完全一样的存单号、金额和开户日期,这事儿,她是怎么办到的?
经过几方核对,当时的事情也就比较清楚了。在半年前,小王二媳妇有张存单找不到了,就去挂失,因为户名、金额什么的都有,再加人头熟,办起来还是比较容易的。办完之后,小王二媳妇突然对银行的那个查询功能发生了兴趣,就对银行的人说,这个功能挺好,你能不能帮我查一查我们家王二名下的存款单,熟人好办事,于是银行的人就帮着查了,一共五笔,三笔是王二媳妇知道的,但有两笔小王二媳妇却不知道。再后面发生了什么,大家就已经知道了,小王二媳妇将这两笔办了挂失,然后取钱回家,而过了半年后,大王二媳妇拿着存单却发现钱没了。
事情到这儿似乎已经很清楚了,那就是小王二媳妇通过挂失取走了钱。但是钱究竟是谁的,这个问题却节外生枝。小王二媳妇一口咬定,这钱是她存的,但是存单没了,而大王二家手里的存单肯定是拣他家的。小地方也能出罗生门,同一件事,在几个人的口中,出现了不同的说法。在经过几天的沟通无效之后,大王二家的最后决定,上法院,告银行和小王二家,当然还有一个附加的手段,那就是,找电视台。
事情上了“新视点”,马上成了个热门话题。在整个事情过程中,其实有很多是巧合的地方,因为有一个条件不成立,这事儿就不会发生。首先是开户时还没有实行实名制,这样在原帐户信息就没有证件号来核对,第二个,开户时的开户地址不太明确,只写到辛寨子,而这二王都在这个地址上。当时大家都在议论这事,觉得好象真的无解,其实对于业内人士来说,分辨这事儿一点都不难,因为在开户时,每个人都要填一张凭条,即使现在实行免填单,最后也要签一个名字。只要找出开户凭条,进行笔迹签订,就自然能确定谁是存单的主人。
当然,实际生活中,有时候并不需要这么麻烦。这边才上了电视,那边银行就拿着钱来说,你别告了,我们把这钱给你可以吧?而且谁说福无双至,又过了一天,小王二家的就私下跑过来,拿着钱,承认那存单不是他家的,她当时以为是小王二的私房钱。毕竟是邻里之间,有话好好说,这事儿也就这么过去了,似乎谁都没损失什么。其实要说损失,还是有的。首先就是小王二家,贪占邻里钱财这个名声恐怕要背一辈子,好在没有上法院,如果真是到了那时候,小王二家就没法立足了。当然还有其次,那就是银行,作为一家专业机构,应对之差真是可以和ZXB相提并论。
银行在这件事情上最大的问题就是能不能让客户只通过姓名就进行挂失,当时,网点负责人信誓旦旦,说允许,结果,记者们马上翻出银行管理制度,上面清楚的标明,挂失需要提供帐号、户名、金额、开户日期等一系列信息,完全满足才能挂失。整个事件给人的感觉,就是银行极端的霸道,而且不规范。其实,作为银行,首先应该讲清楚,在整个挂失操作中,所有的信息也都是全的,实际的问题是,挂失的这些信息是怎么得到的,或者另一个问题,银行允不允许客户只通过姓名就能够查询到帐户的信息。
说起来,这就是制度的不完善之处,人民银行的管理制度中并未明确规定查询这种非金融的业务,因此也给银行业务制度的灵活性提供了方便。在系统中,挂失和查询是两个交易,这两个间完全没有关系,因此挂失并没有违反制度,但是在现实中,这两个动作又是相联系的,查询就是为挂失而做的。问题就在于法无明文,银行就应该提供这种风险很大的功能吗?说句实在话,还真得提供。
上面这个查询功能称为按姓名查户主,其实在银行系统开发时,大家就预感到这个功能的危险性(不但有上面的原因,更有技术风险,这个下面会谈到),所以一直没有提供,但是架不住业务部门的再三要求,终于给提供了。这种功能,既然有这么大的风险,难道业务部门都是官老爷,不清楚吗?其实真正的官老爷是科技部门,大家高高在上,很少去网点,这个功能的提供恰恰是业务的实际需要。
让我们换个角度,就从小王二家的那个事情去考虑,如果我真的丢了存单,如果我确实忘记了帐号(十几位长的数字没人能记住)、金额的细节(不是个整数)、开户日期(这个除非记日记,否则谁也记不住),那么如果不能通过姓名查,我能怎么办,如果这张存单是我的全部家当,我能就这么放弃。上天无路入地无门,我想一个良民变成暴徒的条件,在这种情况下似乎都够了。
这样的事情也许不常碰到,但是并不等于碰不到,银行不是诈骗团伙,也不想成为暴力事件多发地,网点人员对于这种挂失肯定会想方设法去解决。实际上科技部门加入这个功能也是不胜其烦,因为在此之前,每天都会有电话上来,要求按姓名查帐户信息(在科技部门的管理界面中是提供的)。不过这个功能刚被下到网点时并没有人利用它来取别人的钱,却先是印证了开发人员所担心已久的技术风险,真的出事故了。
三
在科技部门眼里,上面这出热闹的阴阳错就如同隔岸观火,烧得再旺也到不了这边。但是业务和技术毕竟都在一个锅里,看别人热闹时,自己最好还是小心点。做程序的都知道,技术错误和业务错误是两码事,程序崩溃在技术上是一级错误,对于业务却毫无影响(程序根本不能用,还到不了业务那块),而有些低级别的技术错误,却能导致极其严重的后果(例如小数点少算了两位,然后日元按美元价给付出去,不过这是另一个故事)。当然最让科技人员担心的,是那种测试中完全没错,上运行环境后却莫明其妙影响效率,甚至造成当机事故的错误,就比如上面提到的按姓名查户主这个功能。
对于开发人员而言,按姓名查户主的业务危险根本不用去考虑,只要业务人员提出并通过需求评定,那么开发人员就没有责任了。迟迟不愿做的原因恰恰是技术考虑,因为本功能可能造成无索引查询引起的锁表问题。在银行系统中,使用频度最高的数据表是对私分户帐,存取款、查询等业务都会用到这张表。系统一般都不会对姓名这样的中文字段加索引,这就意味着按姓名查询是对无索引字段进行查询操作,如果银行不大,分户不多业务量小,这种影响完全没什么,但是如果银行很大,那么,这种查询方式,只能是后果很严重。
只有摔一跤才知道石头有多硬,推演是推演,在没有实际体验前,谁也不知道我们花上千万买的机器是否能横寻千军如卷席。大家决定还是赌一把,当然这次显然 RP不太好,几十分钟后,系统就不负众望地开始阻塞,最后甚至完全停滞下来,然后一起事故就这样在众望所归中诞生了。好在当时系统上线不长时间,错误、修改、再错,这一循环甚至成了我们的工作方式,因此,倒也没有造成什么恶劣的影响——科技的名声已经够差了,并不会因为这种小CASE而增加什么。
这个事故发生已经十多年了,原来以为这只是我们开发过程中的一个小插曲,或者说是成长的代价,但是等离开银行来到公司,才发现自己错了。虽然一个人不应该在同一个地方摔两次,但这并不意味着另一伙人不会在这儿再来上一下。近年来,这样的事故已经见了三次,同样的错误,同样的模式,同样的影响恶劣,甚至连最后解决手法都基本类似(交易包发往备份主机),只是银行不同罢了。
按姓名查户主这个典故经常被我用在和客户交流中作为业务简单技术难做的例证,然而这种事故毕竟还是比较容易解决的,只要停掉这个业务,将相关进程取消,甚至不用重启就可以解决问题。但是随着数据集中的加剧,另一个技术问题却越来越突出,但却绝不能那么简单地一停了之。这个问题,虽然大家都知道它难做,但是却又不得不做,甚至原来一年只做一次,现在必须一年做四次,由此衍生出的问题,甚至超出了技术和纯业务范畴,影响到银行业的一些重组。这个就是银行系统的计息。
银行是通过存贷利息差来获取利润的,因此结息无疑是经营活动中的大事,在几年前,对公结息和对私结息是不同的,企业户结息是每季度最后月的20号,储蓄户则是6月30号,现在,托国家的福,两者统一,都是一年计四次。在单点系统时代,每季度对公结息虽然比不上年终结转(那是银行业的佳年华会),也是除此之外最重大的事件,一般都要干到晚上两点钟。系统集中后,这个工作就收到总部,由系统自动处理,各网点只要第二天来打印计息单就可以了。
不过,系统数据的集中,显然使看来已经轻松的工作重新变为一种负担,特别是储蓄计息变成一年四次更使这一问题尖锐起来。到现在已经不知道听到多少起这种事故,或者说,一直到现在,计息日都是科技人员关注的重点,不但影响到运营系统,甚至影响到管理系统。在这一天,平日里只有十几万条的业务会因为分户计息而充塞进上百甚至千万条(活期分户有多少就有多少条)的结息流水,平日里十分钟运行的程序,如果不加处理3个小时也运行不完。而稍微不注意,计息就有可能一直运行到第二天网点开业时都无法完成,这样又一起影响范围巨大的事故就诞生了。
在今天这个银行业纵横捭阖的时代,这样的事故不但会影响银行的业务,还会被用作一块板砖,砸向任何用的着的地方。玄武湖畔的一只蝴蝶残缺了翅膀,一场将要发生的合并风暴因此而悄然收场,有些事情,曾经让大家想尽办法,却没有想到,结束竟然如此简单。
四
如果对金融股感兴趣的朋友,一定知道这几年什么是银行业最大的事,股改,股改,还是股改。工农中建,四大行,先是不良资产剥离,然后是充实资本金(国家甚至不惜动用外汇储备)。银行的股改为整形行业提供了最光辉灿烂的案例(其实整形进入中国后就已经够灿烂的了,一切皆有可能,不但整人、整车,还能整企业),工行中行建行成了中国最成功的整形美人,俨然跨进世界最好银行的行列。不过说起来,整形总还是有技术限制的,比如一只黑猩猩,你能把它整成美女吗?
在银行体系里,农行就是这么一只猩猩,而且是一只巨型的。虽然拥有众多整形高手,但是国资委看着这只金刚仍然只有摇头的份。集思广义,发挥大家的聪明才智,最后商量出的方案,拆了它。虽然"美的已拆了"就是中国制造,但是长考出的这个结果显然是步臭棋,不知道管理者是不是这么想的,反正这个建议只是在媒体上探了一下头,就给砸了回去。对农行的整形显然超出了现在的技术条件,所以搁置也不失为一种好办法。不过,与此同时,另外一个农字头的银行体系,整形却在热火朝天中,这就是农信。
与农行相比,农信更象是《加勒比海盗》里那群螃蟹,野地里生,野地里长,甚至连保护动物都算不上。但是,既然所有的银行都在整形,农信自然也不能例外。与农行正好相反,农信的整形方案是把螃蟹们组合起来,或者形象一点,就是拿块布包一起。当美容师对着农行比量来比量去时,一群群农信已经纷纷为成立省级联社大动干戈。这样的整形对于农信是好是坏咱还真说不清楚,但是对于金融IT公司那肯定是天上掉金子的美事,不怕做错事,就怕不做事呀。
省联社的目标就是将下属的成百上千的螃蟹变成一个海神,最有效的办法就是统一做套帐务系统,帐收上去了,你想不听也不行了。这个道理大家都懂,虽然大家都喜欢做鸡头,不喜欢做凤尾,但是大多数的农信确实也是没法子,再亏下去恐怕只有去做鸡了。“四大行股份制,城商城信农联社”,这农信系统是最次一档,多和农民打交道,什么种子、化肥之类,出力多却没有多少效益。不过,这些都是通常的情况,如果农信效益好的不得了,这个,合并就有阻力了。
“那个地方是不是穷的只剩下农信了?“,经常有人对农信作区域老大的说法表示怀疑。人呀,有时候总会被自己的固有经验所蒙骗,这个就是一个例子。效益最好的农信不但不在穷地方,而且还在中国最富的地方——长三角的苏州无锡。看一下最新的县域经济排名就知道这个地方的繁荣,前十名中竟然有七个是苏州和无锡的,这已经够让人吃惊的,但如果换一种说法,也许你会更吃惊,那就是苏锡下辖七市全部进入前十。
这些县级市,甚至在北方的地级市面前都是恐龙一样的经济怪物,因此也就不难理解那些地方的农信为什么是效益最好的了,当年所有的银行都在进城,只有农信十分委屈地留下来了,没想到乡镇经济却成就了它们。农信不同于四大行,虽然有个总体的称呼,但是各家信用社都是独立的法人。这也就不免会穷富分化,通过名称就可以看出很多讲究,有叫”农村商业银行“的,有叫”农村合作银行“的,还有仍然叫“农村信用联社”的。这里面那些叫行不叫社的,虽然还是农信,这骨子里已经不太姓农了,就象苏锡地区很多农民已经不种地一样。
苏州无锡的每个县级市都有自己的农信,这些农信都是最高一档,叫作农商行(也有例外,比如宜兴,这个在苏锡地区敬陪末座的城市,农信叫做合作银行,而它也成了省联社在这一地区唯一的收获)。对于这些农商行而言,上海才是他们的根,南京那个省城无疑有些偏远了。他们对于成为这个偏远城市银行下的一家分行毫无兴趣,或者说,其实他们对于成为任何一家银行的分行都没什么兴趣。
但是省农信的合并是一个政治任务,对抗就是自绝于组织,自绝于人民,就是政治错误。政治错误是会死人的,这个已经无数次被中国的历史所证明。当你官做的足够大时,你可以做很多常人不能做的事情,比如贪点钱、受点贿、玩个女人,只要政治正确,但是不能政治错误,一旦政治错误了,那你就完了,一堆罪名会堆到你头上,而且搞笑的是,这时候你的罪名反而全是那些小节,和政治却毫不沾边。
农商行的领导当然知道这些,所以他们也绝对不会傻到象陈*宇那样在会议上拍桌子。省农信风风光光的成立了,然后一家老牌的IT公司也风风光光的为它建立起了自己的系统,这些富裕的诸侯似乎也只有接受王化这一条路了。不过就象温相说的,有一分希望,就要尽百倍努力,政治是不能抗的,因为任何的政治都是态度问题,只有YES和NO两种选择,但是技术不一样,技术是个方法问题,拿把铲子就能挖出一个回路来。当政治不能解决时,就需要技术的力量了。
银行科技部门一直是一个与政治无关的部门,我们的科技老总就一直不是党员,也从来没有入党的兴致,而这并妨碍他在这个位置上呆了八年。虽然一直以来业务人员都对科技人员很尊敬,但是就科技部门的性质而言,这确实只是一个辅助部门,这种尊敬其实与电线短路时对电工师傅的尊敬没太多区别。只是这一次,当各种力量都势均力敌时,科技部门就成了那只最后加把劲就将萝卜拔起来的小老鼠。
农商行为了保证目前的管理水平不会降低,为了保证业务风险降到最低,为了保证新上系统具有最强大的功能,向省行的同仁和公司的对手提出了无数的需求。很多需求是不可能完成的,但是,技术上的不可行不能作为理由,因为农商行手里握着尚方宝剑,这个就又回到了政治层面。当初,省里为了让这些强大的诸侯归顺,曾经答应过,各家系统的合理要求都必须满足,你看,我这些需求里有一个不合理的吗?
虽然农商行的归顺并不顺利,但是其它诸侯的王化却仍然在进行,终于,省农信甚至在无锡也有所斩获(不幸的宜兴农合行),前途已经一片光明,只剩下江南一隅了。一直以为,这场战争已经快要结束了,毕竟政治不是技术能抗过的。没想到,抵制运动竟然成功了,来得很迅速,而且轻松的令人意外,而成功的原因竟然是来自于技术层面,一个在IT系统中最常见的错误,计息的错误。
其实省农信的节节胜利已经为这个错误做出了铺垫,收上来的行越多,数据就越大,而且越是发达地区的行,数据量就越大。当省农信庆祝常州和宜兴上线时,大概没有想到,他们的系统已经悄悄超越了运行的界限。于是,就在这个季度的计息日,计息一直运行到第二天上午,全省的网点都坐等了几个小时,一级事故,与去年交通银行那次一样。
危机结束之后,大家擦汗之余,又将视线对准了这些农商行,无锡两家,苏州六家,估算了一下数据,于是终于泄气了,这是省农信范围内效益最好的几家行,也是数据量最大的几家,还是交易最活跃的几家行。现在的系统都已经搞不定,再加上这几家,还不知道会出什么乱子,算了吧,多一事不如少一事。曾经让众多能人志士耗费脑浆的事情就这么结束了,而这一切,都来自于一次并不太严重的事故。
故事终于讲完了,却发现有些跑题,这场政治秀其实和IT关系不大,还是回到正题,咱们接着说银行的事故。对于IT人员来说,事故其实分两类,前面谈到的可以称为内部事故,天天都会有,经常盯着点,改了也就没事了。最害怕的是另外一类事故,也许影响范围不大,但是损失却是真金白银的,对于科技人员,后果显然更为严重,也更让我们闹心,比如银行卡的各类事故。
五
当初写这个故事,就有点信马由缰,前面写着来劲,下笔千言,但人总有兴尽辞穷的时候,虽然还有很多故事,但却没了兴致往下续了。本来这个坑就已经准备放弃让它变成坟了,但是,网上流行挖坟党,忽然有一天,发现有人曝棺,而且眼熟的很,这下倒又来了兴致,但是究竟是给它填几锹土还是再挖深一点,这个,俺也说不准。
上篇最后提到银行卡,这可又是个很长很长的话题。话说,最早在中国出现的银行卡,应该是上世纪八十年代,中国银行的长城卡。当时这卡名字也叫信用卡,却和现在的信用卡不一样,因为它更象是可以透支的活期帐户,虽然可以透支,但却要按日收透支息,如果不在规定期限内把余额变成正数,就算是还得只剩下-0.1 元,你也会进黑名单。所以到现在这个卡片横飞买白菜都可以刷卡的时代,此种超有个性的史前生物就被尊称为准贷记卡,与之对应的是正被时尚使用具有强大未来穿越能力的信用卡,也被我们称为贷记卡,而那种根本不具穿越功能每个人身上都有n多张的储蓄卡,则被命名为借记卡。
虽然功能比真实的信用卡打了很多折扣,但是在当年,这信用卡和大哥大一样,都是身份显贵的象征,如果某人在饭局之后结帐之时,掏出一张卡来,那绝对可以和枪战之后收尸之时从马仔手里接过大哥大一样有派。信用卡的规定也一样体现着银行的气派,卡丢失了必须即时挂失,挂失一天之内的损失由个人负责。而且,卡族们也不象现在那么容易当,和当时的软卧一样,需要有一定的级别才能去办,如果什么级别也没有,就是一财主,倒也行,先押五万元在帐上,然后你才可以仿处级待遇,花差花差了。
现在提起使用银行卡,马上就会想到ATM、POS之类的东西,知道这卡在那上面一刷,钱就从帐上扣了。很少有人知道,其实早期的信用卡交易都是脱机的,用的是一种叫刷卡机(现在叫压卡机)的设备。如果你要消费,那么商家就用压卡机制单,然后拿着这个单子再到银行去要钱。不知道大家注意到没有,所有的信用卡卡面上的卡号都是凸出来的,而很多储蓄卡却是把卡号印在卡面上的。其实这种设计就是那种最早的信用卡交易方式的遗留。
当然,这样的消费方式已经是十几年前的事了,现在只要是卡消费就会是联机的,都会直接扣帐或者冻结(指预授权的方式),而且各行的卡都可以通用了(感谢银联)。去年做前置系统,总结了一下,银联提供的交易已经有四五十种,涉及到日常生活的方方面面,我们想到的有,想不到的也有。
卡的交易安全体系也十分完善,虽然现在涉及卡的案子是最多的,但是基本都是利用普通人对卡不熟悉来钻一些空子,真正利用卡系统漏洞的,即使是银行内部人员的案子,最近几年也找不到一起。不过,罗马不是一天建成的,现在的卡交易安全体系也是一样经过了很多年才完善。刚开始做卡系统时,确实还是有很多漏洞的,甚至让人给找出来去做案,而且深究起这个漏洞来,还真是一件让科技人员丢脸的事情。
事情发生在当时大连一家挺著名的餐馆。星期六上午,有人到餐馆里来,自称是银行的技术人员检修POS。对于餐馆来说,设备维护这种事情,和网点的人感觉是一样,属于某种特殊的带有神秘色彩的活动,虽然来人是生面孔,倒也并没有多盘问。那人也没呆多长时间,只在POS上按了几下键,然后就走人了,餐馆对这事儿也没放在心上。不过到周一时,不管是银行还是餐馆,大家都明白,出大事了。因为对帐时就发现差了七十多万,再一查,七十多万都到了一个银行卡帐户里,而且取的只剩下十几万。
这事儿,是银行的清算中心发现的,然后就通知了科技部。据说处长当时接到电话后,第一个反应就是传呼处里的几位技术大佬,看到大家都回复了,这心也就放了下来,看来事情还是出在河那边,我们可以在这边仔细地观察一下火势了。然后,当然就是把几位大佬召集到一起分析原因,其实象这样的事情,原因,只要稍微一查也就知道了。
事情说起来很简单,有人冒充银行的技术人员,用商户那儿的POS做了退款交易。POS退款,就是指消费之后发现出错了,再把人消费的钱给退回去,说起来,即使现在这个交易也仍然是一个漏洞,很多信用卡套现的把戏都是通过这个交易完成的。而在当时,漏洞更多,因为退款交易按规定必须是要查原来的交易记录的,退款额也不能大于原交易额。而当时的系统,查原交易流水大概比较麻烦,技术人员就把这步给省了,直接输入退款金额和退款卡号,这样就把退款交易做成了存款交易,只是加了道管理员口令作为限制。
本来,即使这样,其实也不会有太大的问题,因为,如果一个餐馆没消费那么多钱,晚上一对帐,马上就会出错,而且当时我们还有一个规定,当日存入的钱只允许在存钱的网点取,象这种退款的自然就只有第二天才能取。这两者的结合,实际已经将犯罪之路给挡死了。但是,百密总有一疏,当时,正好是银行系统合并初期,对帐是日终流程,属于会计部管,他们周六周日不上班,自然也不做日终,而退款是日常交易,属于信用卡部管,一周七天都可以做。结果,犯事者就利用这重重漏洞,在周六退款存入一个储蓄卡中,周日这一天里,跑了十几个网点,取出了四十多万现金,之所以这么辛苦,则是为了规避银行的大额现金取款必须提前预约的限制。
但是,电脑这东西,其实就那么几招,如果真想做到神鬼不知,还真是很困难(所以我们一看到电影里整电脑就想发笑)。既然已经知道作案的全过程了,找到谁做的案子那也就没什么难的了。能够知道POS的管理员口令的人也就那么几个,而能利用系统漏洞作案的,那就更没有几个了,介个,肯定是内部人员干的。而这小子跑了十几家银行,自然马脚就会露出来,虽然当时网点有监控的并不多,但他跑的几家里恰巧有一家有。
其实当时我们都有些害怕,怕身边某一位突然被带走,但是最后证明,象我们科技人员还是比较正气的。干这事的是信用卡部的员工,在前台作案的是他的铁哥们了。这也真是遇友不淑,两人呆在一起,整天就想着如何弄钱,最后真让他们找出漏洞来。可惜有福得无福享。他的朋友拿到钱之后,就跑路了,到现在也不知所终,不过三十多万即使在那时也不算是什么太大的数目,想过那种花天酒地的生活恐怕是不太可能了,还得整天防着警爷们的出现。而银行里的这位,倒也省心,至少十几年可以不愁吃不愁穿了,据说他有一个很漂亮的女朋友,和他是同事,但有人说,其实他想钱就是因为这位女朋友很能花钱,但是,当他进去之后,女朋友很快就和别人结婚了。
事情过去已经十几年了,但是给我们的教训却很深刻。现在人常说,看了《色戒》知道女人不可靠,看了《投名状》知道兄弟不可靠,看了《集结号》知道组织不可靠。而我们,从这件事情就知道,不但上面的三种都不可靠,即使是我们认为最可靠的电脑也不可靠,任何的一点偷懒都可能被别人所利用。
本帖最后由 河蚌 于 2011-12-23 09:59 编辑
六
银行的任何运营系统都涉及到钱,而且这里的钱还是数字的,加一个零就翻一个数量级,俺有时经常想,抢现金的人真没有技术含量,你即使开着个大卡车来,也不过抢几亿元走,对于玩数字的人来说,不过是一个10位数字而已,这样的损失,其实俺们动一下小手指就能做出来,当然更多时,这样的情况,更多就是一个笔误,好吧,换一个说法,俺们写程序写错了。
在软件开发时,经常说的一句话就是,能够在程序中校验出来的错误不是错误,那只能称作“例外”。真正的错误,是那些你预想不到的,不知道什么时候发作出来的错误,它们充满了偶然,总会出现在你意想不到的地方,而造成的损失,则会让你刻骨铭心,终生永记,因为这些可能都是钱。因此在银行工作期间,总有一种如履薄冰的感觉。
其实银行软件开发时是蛮辛苦的,不知道是什么时候哪位爷(其实我心里更想叫丫孙子)定下的作息时间,一周6天周一到周六,除了白天正常工作外,晚7点到10点要加班,只周三和周六除外。这样坑爹的制度,竟然成了银行软件开发的标准制度,其实很多时候,晚上就是在耗时间。但是工作时间虽长,心情却是轻松的,因为毕竟是在实验阶段,犯了什么错误,都可以重来,即使编了几天的程序忽然没有了,还得强忍着再重写一遍,却也可能因为思路更清晰,写出程序会更快更好。对于银行科技人员来说,真正开始提心吊胆,是从程序上生产机的那一刻开始的。
记得有本编程的书里将软件的错误分为四个级别:崩溃、严重、一般和提示,这四个级别都是用来定义软件的技术错误的,从无法运行到信息提示不对,一级比一级轻。应该说,这样的错误级别设定用来衡量码农的工作质量,不让无证码农蒙混过关酿成追尾事故,是完全足够了。但要说这些技术错误级别就等同造成的损失级别,这咱就不能认同,其实这两者之间,真的没有什么必然的联系,甚至,还可以说是相反的,因为一个无法运行的东西,它想造损失也得有这个能力,是吧。
测试时一切OK但运行时却出错的程序,是每一个银行IT人员的梦魇,应该说,几乎所有的人都能痛说几段不堪回首的往事。比如俺10年前在一家银行做储蓄系统优化时,就曾经在系统上线的头两天,连续三次提交更新程序,当时以为自己就够熊的了,回头一打听,才知道,其实俺这是更新的最少的。俺们的这些程序,可都是经过自己测试过无数遍,又经过近百名业务人员三次大规模业务测试后的结果。现在回想,其实这还真不算太大的错误,毕竟只是定期一本通换折时打不出已经销户的记录,这样的错误只是带来不便,还没有造成直接的损失。但有些错误就没有那么幸运了,当钱已经发到个人手里时,想找回来可没那么容易,尤其是在大批量出错的时候,这就只能算事故了。
在银行的系统中,除了为大家存着钱的主机系统外,还有一个对于外人来说根本看不见的系统也是至关重要的,那就是被命名为渠道接入或者综合前置的交易集中转发系统。这个系统对于银行就如同主神经之于人体,银行的外围系统都是通过它来与主机系统打交道,甚至系统之间的交互也必须通过这个系统来完成。虽然它不存储业务数据,但是银行日常的所有业务几乎都要通过这个系统来上传下达,而如同人的神经一样,这个系统由于联系太过广泛,却极易受到伤害。回首工作经历,俺记忆最深也最感到幸运的,也是这样一个发生在交易转发系统上的错误。
当时,还没有渠道接入系统的概念,我们只是做了一个简单的前置程序,将自助电子设备(ATM、POS)上发生的业务先集中发给这个程序,再转发到主机上。应该说,对于银行的主机来说,所有的外围系统都是客户请求端,而主机系统对于请求可能有三种结果,返回成功、返回失败和无应答。前两种处理起来都很标准,只是最后一种无应答却是很难处理的。
因为你不知道主机到底是什么状态,或者说很多原因都会导致这种情况,可能是业务程序直接出错崩溃了,也可能只是系统处理比较慢。但无论是外围系统还是转发程序都不可能无限期等待,因此,每一个请求都会有一个超时设定,超过这个时间,就会自动返回出错,然后再向主机系统发起一个撤销交易的请求。
上面的过程说起来就比较繁复,真正运行起来,就更为繁复,而且还有个问题需要解决,一笔正常业务没有应答,接着发出的撤销交易请求很大的可能是主机也会处理失败,也就是说,正常交易并不能会被撤销掉。因为这个原因,当时对帐总是不能完全对上,于是项目组中有人就做了一个重复发送撤销交易的程序,将那些无响应的交易找出来重新发一遍撤销请求。
按照原理,这样的程序其实流程并不复杂并不难,但不知道什么原因,反正写程序的将逻辑搞反了,竟然是将所有的成功交易找出来发起撤销,按照这个逻辑,任何人都可以在ATM上随意取款,因为取款成功后,撤销程序就会将账户余额恢复回去,但是银行可没办法让ATM长出手将已经到了客户手中的现金再拿回来。应该说,当时我们的测试还是不完善,这个运行正确但逻辑错误的程序就上了生产机,而且是周五快下班时上的。
研发人员平时并没有运行监控的任务,也都是正常下班。那天,我不知道出于哪门心思,跑到监控室转了一圈,扫了一眼监控屏,马上就意识到不正常,因为交易屏中撤销交易太多了。赶紧让运行人员将前置程序停下来,此时,什么ATM停运多少小时要处罚的规定就顾不上了,那个毕竟是面子问题,现在的这个错误,可是里子,不,是钱的问题。
此时,已经有二百多笔交易出错了。还好,大部分错帐都可以恢复,即使是帐不可恢复,当时的人大多有根脚,问他们要,他们也不会因为几千元钱就给自己找麻烦,当然,最终还是有二笔交易一万多元没法挽回,好在这点损失,对于银行来说,不算太多。
每次回想起这起事故,我都为我无意中去监控室而感到幸运,因为,我们周六周日不上班,而从周五到周日正是卡交易最活跃的时段。指望运行监控人员发现问题是不可能的,当时俺去看时,那帮人也正直着眼睛盯着呢。天知道错误会如何被发现,也许会是某个热心的客户打进来热线,或者干脆是新视点当作奇闻报道之后,俺们才能知道。到那时,就不知道有多少笔错帐,而无法挽回的,恐怕也不会只是区区两笔一万元了。
银行当时正在大搞企业文化,宣扬什么理念和座右铭,其中一句至今还记忆尤新,”我的微小疏忽,可能给客户带来很大麻烦,我的微小失误,可能给银行带来巨大的损失“,诚不吾欺!!
河蚌 发表于 2011-12-22 22:28 static/image/common/back.gif
五
当初写这个故事,就有点信马由缰,前面写着来劲,下笔千言,但人总有兴尽辞穷的时候,虽然还有很 ...
大开眼界,写得真好!{:237:} 好长啊。。。:dizzy::dizzy:
受教了~~~~~~~~~~~~ 以前有部电影,好像叫《偷天神盗》,主人公潜入某金融终端,只看显示屏上数字滚动,钱已经到个人账户中。当时看了,心潮澎湃、口水长流,可惜这活太有技术含量{:204:} 本帖最后由 河蚌 于 2011-12-26 20:35 编辑
西楼客 发表于 2011-12-26 20:24 static/image/common/back.gif
以前有部电影,好像叫《偷天神盗》,主人公潜入某金融终端,只看显示屏上数字滚动,钱已经到个人账户中。当 ...
数字滚动是电影里最坑爹的镜头,在真实的银行汇兑中,无论多少钱,都是一个数字,+*****或者-******。这也是我们最感到如履薄冰的地方,反而是现金,虽然社会影响大,真正损失倒没啥了,给一个人100万,想背走都是件困难的事情。
至于《偷天神盗》,那个作案,仅供一笑吧。 河蚌 发表于 2011-12-22 22:26 static/image/common/back.gif
四
如果对金融股感兴趣的朋友,一定知道这几年什么是银行业最大的事,股改,股改,还是股改。工农中 ...
江苏农信,呵呵;这个事故类比交通银行的事故,好比盲人摸象;同样摸到了圆柱状的物体,一个是鼻子,一个是腿。河蚌兄应该深知这里的水有多深的。 看过前面的几段,原来那个大坑是你挖的!{:192:}
想起了俺当年的程序员生涯,类似的Transaction Rollback实在是很痛苦的。
好看!继续! 好文收藏,有时间慢慢看,呵呵 技术问题绊了政治的腿,哪行都一样啊。 技术问题绊了政治的腿,哪行都一样啊。{:191:} 今年的银行事故NO1,应该是平安连续20多个小时宕机吧,呵呵 大黑蚊子 发表于 2011-12-29 09:35 static/image/common/back.gif
今年的银行事故NO1,应该是平安连续20多个小时宕机吧,呵呵
20小时,这要被银监会指着鼻子乱骂了吧 同行。俺也想想这20多年工作中经历的几次事故,不过跟楼主角度不同,楼主是开发,咱是在基层搞运行加系统管理。
最初我所在的国有行搞全国联行时,数据是明码发送,也就是一个文本文件,里边一条记录含户名账号金额收报方行号账号金额等等,每晚机房操作员把这个文本一级级上送到总行配对,第2天返回对账数据一级级下发到网点,网点会计再根据这个数据确认差错打印报表。问题就在于:数据是明码发送,意味着机房操作员假如良心大大坏了的话,在B行开个账户,然后根据数据结构自己编一条数据插入,网点要等到第2天才能确认轧账不平,一晚时间够那个操作员撒丫子跑到B行开出支票取出钱全国飞了。
所以这个数据操作员的人品是个首先考虑的问题,想来想去,向人事要求是:1老实可靠2要懂点业务3不能计算机专业电脑不能太懂4编制内(编制内外的收入差别,编制外容易心理不平衡);没几天,人事塞过来一个金融中专刚毕业的,工作几个月后,感觉满意。
然后是七八年后,某次跟那人一起酒桌上聊起那时,那人颇有点不解的问我:当时为啥要分配我到科技白混了几年,我又不是学电脑出身的。我借酒意说起这个缘由,那人说:就这点事啊。一晚?你有没有考虑到春节三天,这三天就初一打印报表,而空数据一直送,良心真坏了的话,俩天都够我跑到美国了。
world113 发表于 2012-1-26 21:21 static/image/common/back.gif
同行。俺也想想这20多年工作中经历的几次事故,不过跟楼主角度不同,楼主是开发,咱是在基层搞运行加系统管 ...
做IT的想作案的可能性比较小,想跑美国没那么容易,得有护照,签证。而你只要开办这些东西,就得去单位开证明,而一旦开了证明,那这种密级比较高的就做不成了。关键的问题,你如何将钱转到国外去,而手拿现金,就等着被别人黑吃黑吧。这些销赃途径不解决,一般还真不如老老实实在银行呆着。尤其是编制内的员工,可以说除非是几百万的,否则根本不用想。
一般联行业务,最后发出时,是需要密押的,在手工电汇阶段,是有专门的密押本。而第一个在全国搞电子联行的建行,系统是与HP一起做的,汇划业务到分行这个口时,也是要加密押的。
真正出案子的都是做业务的,比如跑同城交换的,还有贷款的,以及国际业务的。这些业务,如果内外勾结,要很长时间才能发现。我们有个支行做国际业务的,整体去了广发行,然后欺负行长不懂业务,做了一笔无保证金的信用证业务,有80万美元左右,半年时间都没有没发现,等发现时,连带客户一起,都去加拿大了。
页:
[1]
2