作者
黄忠,阿里云数据库技术专家
数据库的一些非常不错的企业级功能都是“养兵千日,用兵一时”,比如Oracle 10g中的回收站(Recycle Bin)功能,可以在特殊情况下发挥特种兵的功能,比如当你删除一个表空间、一个用户(Schema)时,可能会删除很多的表,包括你不想删除的一些表。
这种例子还是很多的,早些年很多的DBA使用图形工具来访问数据库,所连接的用户权限又比较高,当查询大量数据引起图形工具短暂失去响应时,很容易多打几下键盘或者多点几下鼠标,等到图形工具响应过来,发现些表或某些用户已经不见了。
前面讲的是无心之过,还可以看到一些有心的恶意操作,比如因员工和公司的关系不够友善引起的破坏性操作。这时就可以检查一下Oracle数据库回收站中是否还有被删除的表。
AliSQL是阿里云RDS MySQL团队精心打造的一个分支,在性能、功能、稳定性上都有极大的提升和突破。在2019年12月份发布的版本中也带了Recycle Bin功能,只需要设置一个参数就可以开启:
mysql> set global recycle_bin=on;
Query OK, 0 rows affected (0.00 sec)
mysql> show global variables like 'recycle_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| recycle_bin | ON |
+---------------+-------+
1 row in set (0.00 sec)
mysql> use test;
Database changed
mysql> create table t_recycle_bin_demo (col1 int not null);
Query OK, 0 rows affected (0.01 sec)
mysql> insert into t_recycle_bin_demo values (1),(2);
Query OK, 2 rows affected (0.00 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from t_recycle_bin_demo;
+------+
| col1 |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)
mysql> drop table t_recycle_bin_demo;
Query OK, 0 rows affected (0.01 sec)
mysql> call dbms_recycle.show_tables();
+-----------------+---------------+---------------+--------------------+---------------------+---------------------+
| SCHEMA | TABLE | ORIGIN_SCHEMA | ORIGIN_TABLE | RECYCLED_TIME | PURGE_TIME |
+-----------------+---------------+---------------+--------------------+---------------------+---------------------+
| __recycle_bin__ | __innodb_1073 | test | t_recycle_bin_demo | 2020-02-27 06:48:24 | 2020-03-05 06:48:24 |
+-----------------+---------------+---------------+--------------------+---------------------+---------------------+
1 row in set (0.00 sec)
mysql> select * from `__recycle_bin__`.`__innodb_1073`;
+------+
| col1 |
+------+
| 1 |
| 2 |
+------+
2 rows in set (0.00 sec)
mysql> select * from `__recycle_bin__`.`__innodb_1073`;
ERROR 1142 (42000): SELECT command denied to user 'test'@'localhost' for table '__innodb_1073'
mysql> call dbms_recycle.purge_table('__innodb_1073');
ERROR 1142 (42000): DROP command denied to user 'test'@'localhost' for table '__innodb_1073'
可以看到通过AliSQL的回收站功能,以及精心规划的权限管理机制,可以有效地处理表被意外或恶意删除的问题,确保你的数据安全。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。