当前位置: 首页 > 科技观察

误删数据库案例及建议

时间:2023-03-23 10:13:45 科技观察

案例分享误删数据表本来接管了一个部门所有的数据库,但是少了一个,也没人告诉我,所以我不知道有这个数据库。一天,一位程序员误按了一个按钮,删除了大量数据。找到我后,他发现数据库没有存档,也没有备份。结果程序员补了几天数据,奖金直接浪费了。不小心删除了一个刚做DBA的用户,却已经犯了一个让我终生难忘的错误。本来想在测试环境中删除一个用户。由于桌面上打开了多个窗口,我把用户XXX级联掉了,直接在正式环境下掉了一个用户。我刚按回车,感觉很奇怪。我觉得不行!!它并不着急。还好用户的信息是从另一台服务器同步过来的,不然就死定了。以后做任何动作都习惯看是在哪个DB,在哪个server上,别搞错了。不小心删除表数据在之前的公司,有一个程序员写的脚本,一个实现者执行。该脚本包含delete*fromxxx;犯罪;并且没有备份或存档。于是,我司全体员工被调动起来,拿着笔记本电脑和台式电脑,到北京市某区县各机关单位,进行为期一周的人事信息记录。至今记忆犹新。不小心删除了数据表。从测试环境导出的脚本包含一个drop语句。结果连看都没看就直接在生产环境做了。料台一下子消失了,整条生产线都停了下来。后来恢复了,丢了很久。数据。经验教训:必须仔细检查执行的脚本。参考建议1.通过触发器约束或禁止特定的DDL操作对于TRUNCATE等高危数据库DDL操作,可以考虑通过触发器禁止,防止非授权操作破坏数据。很多不经意的数据灾难都来自Truncate,类似于系统级rm命令的破坏性,DDL无法回滚,即使发现也来不及了。因此,出于安全考虑,我们建议用户考虑使用DDL触发器禁用Truncate等危险操作。2.基于最小权限原则的授权过度授权是为数据库埋下安全隐患。在对用户进行授权时,必须遵循最小授权原则,避免过度授权带来的安全风险。3.明确用户责任。应明确不同数据库用户可用于的工作范围。如果应该使用普通用户的身份,那么绝对不应该使用DBA的用户身份。只有权限相称,才能避免失误。即使是具有管理员职责的用户,也应该遵循以不同身份执行不同任务的习惯。例如,应该区分和定义SYS和SYSTEM用户的使用。4.在任何数据损坏之前进行备份。在截断或删除数据表之前,做好备份,并养成备份的习惯,以免误操作后措手不及。5.使用重命名而不是删除。不管是操作系统层面还是数据库层面的删除操作,尽量使用重命名而不是删除,比如重命名数据表,重命名数据文件,经过一段时间的观察和确认后再彻底删除。Oracle10g中引入的回收站功能就是将我们执行的DROP操作改为重命名保护。当我们发现错误的时候,可以通过回收站找回,但是要注意回收站保存对象的时间和空间。空间不足,对象会自动释放。在我们的管理中借用这个回收箱的想法对我们很有帮助。6、尽量争取足够的时间,不要小看任何简单的保养操作,因为一次意外就可能大大延长你的保养时间。因此,尽量争取足够的时间,包括做好充分的准备,加快执行不相关的步骤,减少不必要的时间消耗。你拥有的时间越多,你处理可能出现的故障的时间就越多。7.审核你的剪贴板许多错误都是由于粘贴剪贴板的内容造成的,所以当你要将你看不到的东西粘贴到窗口或命令行时,提高警惕。在Windows上,有很多剪贴板增强工具可以帮助我们记录和显示剪贴板的内容,可以考虑。检查您的剪贴板以确保它符合您的预期。8.切勿执行未经仔细阅读的脚本。对于DBA来说,如果你从来没有仔细阅读和理解过一个脚本,就不要执行它。脚本中的错误可能会导致严重的数据灾难。我们遇到过脚本变量错误导致所有数据文件被删除的情况,这是一个惨痛的教训。如果实在无法审计脚本的内容,那么在进行重要操作前请先备份数据。