天天看點

【MySQL】如何最大程度防止人為誤操作MySQL資料庫?這次我懂了!!

在mysql指令加上選項-U後,當發出沒有WHERE或LIMIT關鍵字的UPDATE或DELETE時,MySQL程式就會拒絕執行。那麼,我們基于MySQL提供的這項設定,就可以輕松實作如何最大程度防止人為誤操作MySQL資料庫了。什麼?你不信?不信我們就從MySQL的幫助說明說起,一起來看看如何基于MySQL的-u選項實作如何最大程度防止人為誤操作MySQL資料庫。

MySQL幫助說明

[root@binghe~]# mysql --help|grep dummy      
 -U, --i-am-a-dummy Synonym for option --safe-updates, -U.
i-am-a-dummy      FALSE      

在mysql指令加上選項-U後,當發出沒有WHERE或LIMIT關鍵字的UPDATE或DELETE時,MySQL程式就會拒絕執行。

指定-U登入測試

[root@binghe~]# mysql -uroot -proot -S /data/3306/mysql.sock -U
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.7.24-log MySQL Community Server (GPL)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> delete from oldboy.student;
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
mysql> quit
Bye      

提示:不加條件無法删除,目的達到。

指定别名

我們可以将操作MySQL的指令做成别名,防止他人和DBA誤操作資料庫,将操作MySQL的指令做成别名也非常簡單,這裡,我們直接上示例了,如下所示。

[root@binghe~]# alias mysql='mysql -U'
[root@binghe~]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 15
Server version: 5.7.24-log MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> delete from oldboy.student;
ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
mysql> delete from oldboy.student where Sno=5;
Query OK, 1 row affected (0.02 sec)
mysql> quit
Bye      

在指令行會話設定alias mysql='mysql -U'之後,隻能在目前會話有效,關閉目前連接配接伺服器的指令行之後,會話失效,則别名設定也會随之失效。如果想關閉連接配接伺服器的會話終端,别名設定仍然有效,或者多個會話都能夠使用這個别名來操作資料庫,則我們可以将設定别名的指令添加到/etc/profile系統環境變量中,如下所示。

[root@binghe~]# echo "alias mysql='mysql -U'" >>/etc/profile
[root@binghe~]# . /etc/profile
[root@binghe~]# tail -1 /etc/profile
alias mysql='mysql -U'      

這樣,當我們退出目前連接配接伺服器的會話終端,MySQL的别名設定依然有效,每次連接配接伺服器時,不必在目前會話中重新設定MySQL的指令别名,直接使用即可。

總結

在mysql指令加上選項-U後,當發出沒有WHERE或LIMIT關鍵字的UPDATE或DELETE時,MySQL程式拒絕執行。

重磅福利

關注「 冰河技術 」微信公衆号,背景回複 “設計模式” 關鍵字領取《深入淺出Java 23種設計模式》PDF文檔。回複“Java8”關鍵字領取《Java8新特性教程》PDF文檔。回複“限流”關鍵字擷取《億級流量下的分布式限流解決方案》PDF文檔,三本PDF均是由冰河原創并整理的超硬核教程,面試必備!!