编辑手记:对于资深的老DBA们,他们在漫长的职业生涯中养成了很多稀奇古怪的守则,以在复杂多变的环境中“幸存”,这源于无数血泪的教训,我曾经在《数据安全警示录》一书收录了大量现实案例,现在整理分享给大家,共为警示。


在数据库日常管理过程中,有些威胁来自数据库外部,而有些威胁则来自数据库内部,对于数据库外部,破坏性的操作有rm,而在数据库内部,同样有破坏性操作,如Truncate。

案例分享


误删除数据表

原来接手一个部门的所有数据库,结果漏了一个,也没人告诉我,所以我不知道这个数据库存在。一天一个程序人员误按了一个按钮,把大量的数据全部删除,找到我后,发现数据库没有归档,也没有任何备份。结果是程序人员补了几天的数据,我的奖金也直接泡汤。

误删除用户

刚从事DBA不久,可已经犯了个让我终生难忘的错误。原本是要将测试环境的一个user给删掉,由于桌面上开了多个窗口,结果drop user XXX cascade,直接将正式环境的一个user给drop了,刚按下enter,就感觉怪怪的,心想不会吧!!已经来不急了,还好这个user的信息是从另外一台服务器上同步过来的,要不然死定了。以后做什么动作我都习惯先看看是在哪个DB上那个服务器上,千万别搞错了。

误删除表数据

以前公司,有一个程序员写好的脚本,一个实施人员去执行,脚本里面带了 delete * from xxx; commit; 啥备份,归档都没有。结果我们公司全部人员出动,抱着笔记本,台式机,去北京某区县所有的机关单位上门录了一星期人员信息。至今记忆犹新。

误删除数据表

测试环境导出的腳本中包含drop語句,結果看都沒看就直接在生產環境中做了,一下子物料表就沒了,整个生产停线,后来做了恢复,丢了半天的数据。教训:执行的脚本一定要认真检查。

防范建议


1.通过触发器约束或禁用特定的DDL操作

对于TRUNCATE等高风险的数据库DDL操作,可以考虑通过触发器进行禁用,防止未授权的操作损害数据。 很多轻忽的数据灾难都来自于Truncate,这个类似于系统级别的rm命令极具破坏性,而且DDL不可以回退,即便发现已经为时过晚。所以我们建议用户可以考虑使用DDL触发器来禁用Truncate之类的危险操作,以达到安全防范的目的。

2.以最小权限原则进行授权

过度授权即是为数据库埋下安全隐患,在进行用户授权时一定要遵循最小权限授予原则,避免因为过度授权而带来的安全风险。

3.明确用户职责

应当明确不同的数据库用户能够用于的工作范围,应当使用普通用户身份的,就绝对不应该使用DBA的用户身份,只有职权相称,才能够避免错误。 即便是拥有管理员职责的用户,也应当遵循以不同身份执行不同任务的习惯,比如SYS和SYSTEM用户的使用就应当进行区分和界定。

4.在任何数据破坏之前进行备份

在进行数据表的截断、删除之前,进行备份,将备份养成一种习惯,这样才能够避免误操作之后的措手不及。

5.以重命名代替删除操作

不论操作系统级别还是数据库级别的删除操作,尽量以重命名替代删除,如重命名数据表,重命名数据文件,然后通过一段时间的观察和确认后再彻底删除。 Oracle10g中引入的回收站功能,就是将我们执行的DROP操作变更为重命名进行保护,当我们发现了失误之后,可以通过回收站找回,但是注意回收站保存对象的时间和空间有关,如果存储空间不足,对象会被自动释放。 我们在管理中借鉴这个回收站思想是很有帮助的。

6.尽量争取充足的时间

不要低估任何一次简单的维护操作,因为一个意外就可能大幅延长你的维护时间。所以,应当尽量争取充足的时间,包括做好充足的准备工作,加快无关紧要步骤的执行,减少不必要的时间消耗,时间越充裕,你用来应对可能出现的故障的时间就越多。

7.审核你的剪贴板

很多错误是由于粘贴剪贴板的内容引起的,所以,当你准备向一个窗口或者命令行粘贴你看不到的内容时,提高你的警惕性。在Windows上,有很多剪贴板增强工具,可以帮助我们记录和展现剪贴板的内容,可以考虑选用。 审核你的剪贴板,确保其中的内容是你期望的。

8.没有认真看过的脚本就绝不要执行

对于DBA来说,如果一个脚本你从来没有认真读取了解过,就不要去执行,脚本中的一个错误就可能导致严重的数据灾难。我们遇到过案例,由于脚本中的一个变量错误,导致所有数据文件被删除,教训惨痛。 如果实在无法审核脚本的内容,那么在进行重要操作之前,备份你的数据。

以上内容摘录自盖国强《OracleDBA手记4数据安全警示录》。


文章转自数据和云公众号,原文链接

DBA生存警示:防范频发的数据误删除操作相关推荐

  1. DBA生存警示:保护现场不要让事情更糟

    张乐奕 云和恩墨副总经理 Oracle ACE 总监 ITPUB Oracle数据库管理版版主.Oracle高可用版版主.ACOUG联合创始人 今天收到一个发过来请求帮助的 case,Oracle 数 ...

  2. mysql 闪回_MySQL数据误删除的快速解决方法(MySQL闪回工具)

    概述 Binlog2sql是一个Python开发开源的MySQL Binlog解析工具,能够将Binlog解析为原始的SQL,也支持将Binlog解析为回滚的SQL,去除主键的INSERT SQL,是 ...

  3. Oracle 11g 数据恢复 数据误删除后的恢复 0、执行 select log_mode from v$database;查看是否为归档模式 1、确定删除时间和被删除的表 04-23,GR

    Oracle 11g 数据恢复 数据误删除后的恢复 0.执行 select log_mode  from v$database;查看是否为归档模式 1.确定删除时间和被删除的表 04-23,GRDA0 ...

  4. 如何恢复录音删除的录音文件_硬盘分区数据误删除如何恢复?文件删除不用急...

    硬盘分区数据误删除如何恢复?相信很多人在安装系统或者重装电脑时,往往也都会对电脑原有数据的卷大小进行调整,以此来满足我们日常使用的需求.然而对于一些新手来说,在操作时也都容易不小心把整个硬盘的分区给删 ...

  5. 移动硬盘数据误删除怎样恢复?图文教学

    移动硬盘数据删除了可以恢复吗?移动硬盘是啥?移动硬盘是一个数据"保险柜",可存放大量的文件数据,其空间容量在存储工具(U盘.内存卡等)中数一数二.移动硬盘数据误删除怎样恢复? 移动 ...

  6. 电脑硬盘文件数据误删除/格式化为什么可以恢复? 怎么恢复?谈谈文件删除与恢复背后的原理

    Hello 大家好, 我是元存储~ 主页:元存储的博客_CSDN博客-深入理解SSD:固态存储特性与实践,深入浅出SSD:固态存储原理与特性,深入理解Flash:闪存特性与实践领域博主 1. 硬盘数据 ...

  7. 数据中心操作运营贴士:确保生命安全

    毫无疑问,对于处理企业任何关键任务的数据中心而言,其最为关键的组件并不是数据处理服务器的容量或UPS电池的类型;而是保障数据中心操作运营人员生命财产安全的相关措施.通常情况下,在发生火灾事件期间,火灾 ...

  8. nodejs操作sqlserver数据_pyspark操作MySQL、SQLServer数据库进行数据处理操作

    欢迎访问本人的CSDN博客[Together_CZ],我是沂水寒城. https://yishuihancheng.blog.csdn.net 在大数据处理领域里面,Hadoop和spark可以说是最 ...

  9. mysql每组随机一条_MySql分组后随机获取每组一条数据的操作

    思路:先随机排序然后再分组就好了. 1.创建表: CREATE TABLE `xdx_test` ( `id` int(11) NOT NULL, `name` varchar(255) DEFAUL ...

最新文章

  1. 生信服务器 | 更改 CentOS/RHEL 6/7 中的时区
  2. python3 pillow使用测试
  3. Reverse Sort 思维
  4. python代码质量检查工具_python代码检查工具pylint 让你的python更规范
  5. delphi socket 怎样把接收到的二进制数据转换成字符串显示_广东qp用户数据免费咨询...
  6. Netty 总结与面试答疑
  7. redhat6.4安装nginx
  8. 谷歌 recaptcha_在Spring Boot应用程序中使用Google reCaptcha
  9. [css] 说说sass有哪些你认为很棒的特性
  10. linux安装mysql5.6
  11. 单机安装oracle,单机安装oracle系统
  12. python图标的演变_把Python脚本生成exe文件并添加版本信息和自定义图标
  13. 北京金融局、通州区政府与蚂蚁金服战略合作 共防系统性金融风
  14. 小米9来袭 雷军微博疯狂暗示:有望MWC亮相?
  15. 分布式模块之间的调用_分布式事务
  16. 你了解HTTPS,但你可能不了解X.509
  17. 启明星辰天玥网络安全审计系统手册
  18. linux的软件源修改
  19. 为什么计算机能读懂 1 和 0
  20. 【011】Excel宏编程相关封装模块(新建文件、关闭文件、新增/删除工作薄)_004_#VBA

热门文章

  1. Redis Flushall 命令
  2. js判断软键盘是否开启弹出
  3. SqoopFlume、Flume、HDFS之间比较
  4. 嵌入式无法使用QAudioDeviceInfo类
  5. Servlet实现文件上传
  6. curl和file_get_contents 区别以及各自的优劣
  7. datetime方法
  8. Nhibernate3.3.3 GA使用初探
  9. 【微软亚洲研究院院长洪小文专访---谈大学生实习就业】
  10. 格密码教程(三):基础域概念,体积等;阿达马不等式,行列式