大家好,最近在做一个系统,关于报名缴费的。具体流程是:用户在银行柜台交费,银行通过socket向我服务器发送数据包,通知我哪个订单号已经缴费,服务器收到通知后更新本地数据库相应字段的信息。现在是通过一个用户角色来操作数据库的,这个用户具有读和写的权限。但有个问题,因为这个用户具有写数据的权限,就会担心数据库的数据安全问题,怕这个数据库会被非法篡改,所以提出了一个方案,就是再建一个中间表,创建一个新的用户,所有和银行的数据结果都先在这个中间表中进行,然后再将这个数据结果更新到原始表中。中间表的新用户对原始表只有读的权限,而原始表的用户对中间表具有读和写的权限,这样就可以保障原始表的数据安全。
目前我对这个思路都不是搞的很明白,即使建了这个中间表,创建一个新用户,所有的交易数据都存在这个中间表里,那么我什么时候更新原始表,通过什么方法更新?中间表写触发器,然后用原始表的用户来更新原始表?我都晕了,我都搞不清楚这到底属于那方面的技术,网上搜解决方案都不好搜,希望有人的指点一下,谢谢大家了。
如果需要实时同步数据,可以用触发器实现;你提供的思路,理论上应该可以做到数据安全了。相当于采用了一个隔离机制。
你这个需求,应该分两步来考虑:
第一步:服务器接收银行的数据请求,使用“新用户”访问数据库(该用户只有写“中间表”的权限),并将数据保存到本地数据库中的“中间表”中,这个环节要通过前前台应用来实现。
第二步:将中间表的数据同步到“原始表”中,新建用户和角色,该用户和角色只有读“中间表”和写“原始表”权限,此处我想到有两种方法:
1、通过数据库自身的机制进行数据同步,比如Oracle的JOB,建一个JOB,定时将“中间表”数据同步到“原始表”中。
2、通过前台应用实现数据同步,比如Java的定时器,或者多线程等等技术,定时同步数据,访问数据库时,使用上面的用户。
不知思路对否,请楼主参考。