绑定记录集实时更新存在安全隐患,大家如何避免的
------------------------------------
在客户端进行记录编辑时,可以将字段绑定到控件(比如表格)上,这样用户操作时,只要下移一条记录,则这条记录会实时更新到后台,这本来是非常方便的功能,但是有一个安全性问题不知大家注意到没有,在实际中是如何解决的?
这个安全性是这样的:
假如我操作期间,这个单据执行了审核操作,则理论上是不能再被修改的.但是绑定记录集的情况下,还会修改数据的,因为绑定字段的更新是系统自动的,他不会是验证这个单据是否已经审核过,所以这就是一个安全问题.可能你会问,有这种可能性吗,没改完就审核,我可以负责任的说,完全有可能的.但并不是没做完单据就审核,而是要保证审核后,数据会立即受到保护.
说到这里,不得不说一下我们单位曾经请一个小公司开发的管理程序.这个程序很不严格,假如A用户打开了这个单据,但是有点事出去了,注意,A用户并没有关闭打开的程序.这时B用户从另一台机器打开这个单据进行修改,然后审核.可是过了2个小时,A用户回来了,但是他不知道单据已经改好了.但依然续续修改2小时前打开的单据,这个单据还是可以修改的,因为程序只判断打开单据时的审核状态.
通过我举的例子你可能明白我说的意思了吧.
比如A用户打开修改单据的窗体想对单据进行修改(表格与数据绑定,下移记录便会自动更新),可此时A用户有事出去一下,他并没有关闭已经打开的窗体,这时B用户从自已的机器上修改了A用户没改完的单据,并进行审核.过一会A回来了,他并不知道B已经帮他将单据做好了并审核,就继续修改单据.此时还是可以改的.可见审核操作并没有禁止A用户对记录的修改,这就会造成误操作呀.
实际中如何处理这个安全问题呢?
------------------------------------
在客户端进行记录编辑时,可以将字段绑定到控件(比如表格)上,这样用户操作时,只要下移一条记录,则这条记录会实时更新到后台,这本来是非常方便的功能,但是有一个安全性问题不知大家注意到没有,在实际中是如何解决的?
这个安全性是这样的:
假如我操作期间,这个单据执行了审核操作,则理论上是不能再被修改的.但是绑定记录集的情况下,还会修改数据的,因为绑定字段的更新是系统自动的,他不会是验证这个单据是否已经审核过,所以这就是一个安全问题.可能你会问,有这种可能性吗,没改完就审核,我可以负责任的说,完全有可能的.但并不是没做完单据就审核,而是要保证审核后,数据会立即受到保护.
说到这里,不得不说一下我们单位曾经请一个小公司开发的管理程序.这个程序很不严格,假如A用户打开了这个单据,但是有点事出去了,注意,A用户并没有关闭打开的程序.这时B用户从另一台机器打开这个单据进行修改,然后审核.可是过了2个小时,A用户回来了,但是他不知道单据已经改好了.但依然续续修改2小时前打开的单据,这个单据还是可以修改的,因为程序只判断打开单据时的审核状态.
通过我举的例子你可能明白我说的意思了吧.
比如A用户打开修改单据的窗体想对单据进行修改(表格与数据绑定,下移记录便会自动更新),可此时A用户有事出去一下,他并没有关闭已经打开的窗体,这时B用户从自已的机器上修改了A用户没改完的单据,并进行审核.过一会A回来了,他并不知道B已经帮他将单据做好了并审核,就继续修改单据.此时还是可以改的.可见审核操作并没有禁止A用户对记录的修改,这就会造成误操作呀.
实际中如何处理这个安全问题呢?
再注:A用户是有权限的。但是A用户打开窗体后,在没关闭已打开窗体的情况下出去了一下,就在他出去的同量,B用户在自已的机器上将A用户没做完的事做完了。按理说,A用户不用再做了,可是A并不知道,他回来后继续离开前的操作。
问题的关键是,A用户此时应该没有编辑权了,因为单据已经审核了,但是由于A用户要继续2小时前的工作,而2小时前,记录已经与表格进行绑定了。A用户改过后,照样更新到后台,而不会进行是否审核的验证。
如果要实现每次更新时都要审核,就无法使用绑定记录集的功能呀。
1 由于Ui 上绑定的View数据,即使造成修改,也是对装载View数据的数据集进行修改。当每次提交这些变化后,在BAL判断提交上来的数据的生存周期,是否以当前的一致,不一致就不能修改,并返回提示!
begin
update……
end或者直接
update……where 审核标志位=未审核
begin
update……
end 或者直接
update……where 审核标志位=未审核
如果你不能控制每条写入的判断,可以肯定应该从数据库入手。
约束,写触发器~~
假如我设置成自动更新,即下移一条记录时,就自动更新,如何在更新时可以检测某个标识字段呢?
我确实不知如何实现,注意,是自动更新,不是用代码更新.
谢谢
------------------------------------------------------------------------------------------
如果是数据库本身的自动更新(非代码),就是数据库的刷新,并不会自己去添加数据。(请问你设置的自动更新是什么,数据库?还是软件本身?)如果是软件本身:
软件系统显示界面是用代码编写的,并不是人家在界面加了个什么,数据库就添加了什么,而是别人加了以后再保存到数据库。你说的下移一条数据,就自动更新,其实就是软件系统在下移的时候添加了更新数据库的代码。如果你还是不理解,你可以看看数据显示框下移一条数据时的代码,或者把代码发上来。
----------------------------------------------------------------------------------------
反之,你想想,如果是数据库自己更新软件系统界面的数据,自己把那些数据添加进来,那不是还没等人修改完,它就已经保存了!如果是那样的话,干脆,只让人看得了!说白了,你这系统要解决这缺点的方法多了,就是权限方面麻烦;我公司用的ERP系统就是用标示来锁定数据的,限制为只能一个人修改某条数据(已审核的数据只有特定权限(管理员)才能修改),不能多人同时修改一条数据(或已审核的数据)。虽然是VB系统,慢了点,但权限还是设置的可以的,尚未出现你说的这种情况,各人做各人的,互不干扰!
所谓 自动更新 包括数据库在内,都是用代码写出来的,只是写这代码的软件不同而已!你可以先用楼上说的去试试,不行的话再过来说不行!