<< 返回文章列表

DBA生存警示:主备环境误操作案例及防范建议

2017年12月4日
盖国强
1566

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


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


案例分享

生产与测试环境错误

开了两个PL/SQL DEVELOPE窗口,一个生产的,一个非生产的,同名用户,同表空间名,结果非生产的建用户脚本在生产中跑了一下,非生产是grant limit table space to XXX的,在生产中跑了以后,生产中的用户变成LIMIT了,结果程序出错,表空间不足。导致应用出错半个小时后才处理好。 这个太惨痛了,建议所有的使用多个环境的人,并且操作多个PL/SQL DEVELOPE的人尽量只开一个窗口操作,或者是操作生产的时候,用只读的查询用户。


生产与测试环境错误

自己电脑装了ORACLE数据库,平时操作都在自己创建的库上........经常删除用户,重新导最新的数据进去。 那天也是快下班了........急,直接删除用户,删除的时候还在想就算是正式库权限不够没关系,看也没看就敲回车了.......后来不说了,两个字,郁闷。


生产与测试环境错误

我有一次本来要删除测试库的,结果差点删除生产库的一个表的所有数据,还好强行ctrl_alt_delete,最后回滚了,哈哈,居然一条数据都没有删除。确实是快下班,比较累。以后不能在心急的时候维护数据库。


生产与测试环境错误

也是开了多个窗口,一个窗口建库,另一个窗口是生产的库。搞错了,在生产的服务器上直接shutdown了,立刻电话就上来了。好在没有造成太大影响,也是提心吊胆的。多窗口危险很大。


生产与测试环境错误

尤记得那年我还很冲动,测试环境中发现表空间不够了,就加了一个文件。一会有人打电话说生产库总报一个提示。 马上去看,发现我的数据文件竟然加在生产库上!而且路径类似windows的,非常奇怪,冷汗!靠,原来写错tns串了,见鬼的是测试环境和生产环境网络竟然是互通的!生产环境是RAC,裸设备,9i......后来只好把这个本地文件脱机,数据倒没有丢失,但总有个删不掉的脱机文件!后来找个理由升级成10g了,我心里的石头才算放下了。 从此以后我再也没有犯错。


误删除生产环境数据

有一次在測試庫drop掉一個表,drop完發現把生產庫中的表給DROP了,1000多万筆紀錄啊。當時產線就停了,最後一級生產事故。偶公開檢討。教訓:不能同時打開兩個以上的庫。



防范建议

1.测试环境和生产环境应当处于不可互通的物理网络

互通就意味着同时可以访问,也就可能带来很多意想不到的安全风险,企业应当将测试环境和生产环境部署于不可互通,或者不可同时访问的网络环境中,避免因为错误连接而发生的数据库灾难。 分离部署一方面可以降低误操作的可能性,也可以屏蔽一些无关的访问可能,从而从网络链路上保证数据安全。


2.在执行任务之前确认连接访问的数据环境

通过查询数据库的视图(V$INSTANCE,V$DATABASE)就可以获得数据库的主机、实例名称等信息,在任何重要任务执行之前,都应当明确确认连接到的环境是正确的。 SQL>select instance_name,host_name from v$instance; 这应当成为DBA的习惯。


3.避免打开过多的窗口以致操作错误

在执行任务时,保持尽量少的打开窗口,我经常见到工程师桌面打开众多凌乱的窗口,混乱与错误同行,尤其是在通宵加班等环境下。 保持简介清晰的工作界面,是一个工程师应当具备的基本素质。


4.在执行重要任务时应保持良好的状态

良好的状态是高效率和高质量工作的保障,如果是夜间工作,应该保障充足的睡眠,以清醒的头脑面对重要的工作;并且一定要避免在疲劳状态下连续工作,疲劳作战是对自己和数据的不负责任。


5.避免匆忙之下进行重要的工作或决定

很多误操作都是因为急着下班,急着回家,临门一脚导致的失误,所以当我们去执行一项工作时,应当保持平和的心态,避免仓促紧急的决定。从来匆忙和仓促都不是一个正确的方法。


6.测试环境和产品环境密码设置不能相同

有些测试环境或者非产品环境是利用产品环境恢复得到的,DBA在建立了测试环境后,就没有修改数据库用户的登录密码;经常性的,DBA也习惯在所有环境中设置通用的密码;这些习惯为系统带来了很多风险和不确定性。 我们建议用户在不同环境中采用不同的密码设置,这是因为一方面产品环境和测试环境面对的访问用户不同,密码设置相同则意味着产品环境的安全性完全得不到保障;另一方面,DBA登录到不同的数据库需要使用不同的密码,这进一步减低了DBA在错误的环境下执行命令的可能性。


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

000.jpg