MySQL權限及安全管理

mysql權限系統非常重要,但同時又是一個很多開發者或管理者所忽略的。權限分配不但,將會造成難以挽回的悲慘后果。我之前所在一家公司,關于數據庫權限這塊就完全不重視,所有開發者都有線上系統的最高權限。想想看,如果哪天有其中一個人刪庫了,那么多人你知道是誰弄的嗎?所以,大家一定要引起重視。

一般建議最高權限只會給一個人,這個人做為管理者,再去分配其他開發者對應權限。開發階段本地的庫還好些,對于線上的庫,給予權限時要慎重。

權限認證的原理

mysql的權限認證是通過兩個方面來認證的。首先會進行用戶的ip、用戶名及密碼校驗,校驗通過的用戶,才能連接上Mysql。當連上后,用戶進行任何操作時,Mysql都會對其所擁有的權限進行校驗,擁有該權限,才會執行用戶請求的操作。否則,不執行。

Mysql權限分類

MySQL的權限大致分為三類:

  • 對數據的操作,比如增刪改查。

  • 結構的操作,比如創建庫,修改表結構等。

  • 管理方面的權限,比如創建用戶、分配權限等。

Mysql權限分配原則

  • 給予最小權限,比如目前該用戶只需要看的權限且只需要看一個表時,那就不要去分配所有表的讀權限。只限制為一個表的權限,不要怕麻煩就給予所有表的讀權限。

  • 創建用戶時一定要限制ip及設定足夠強度的密碼。

  • 定期清理不需要的用戶,及回收那些不需要的權限。

賬號管理

創建賬號

mysql文檔里創建用戶的語法如下:

CREATE?USER?[IF?NOT?EXISTS] ????user?[auth_option]?[,?user?[auth_option]]?... ????[REQUIRE?{NONE?|?tls_option?[[AND]?tls_option]?...}] ????[WITH?resource_option?[resource_option]?...] ????[password_option?|?lock_option]?...

參數有點多,別急,慢慢來通過例子來看。首先用最少的選項創建一個賬號。

#?創建一個無需密碼即可本地登錄的用戶 mysql>?CREATE?USER?'u1'@'localhost'; Query?OK,?0?rows?affected  #?創建一個需要密碼授權的用戶,但不限制ip mysql>?CREATE?USER?'u2'@'%'?identified?by?'321232'; #?注意,密碼必須使用引號,單引號或雙引號都行,但不加就出錯。  #?如果不想使用明文的密碼,可以使用password mysql>?select?password('111111'); +-------------------------------------------+ |?password('111111')????????????????????????| +-------------------------------------------+ |?*FD571203974BA9AFE270FE62151AE967ECA5E0AA?| +-------------------------------------------+ 1?row?in?set mysql>?CREATE?USER?'u3'@'192.168.1.%'?IDENTIFIED?BY?PASSWORD?'*FD571203974BA9AFE270FE62151AE967ECA5E0AA'; Query?OK,?0?rows?affected

查看用戶列表

系統用戶列表是存放是mysql庫里的user表。

mysql> SELECT user,host,account_locked FROM mysql.user;
+—————+————-+—————-+
| user ? ? ? ? ?| host ? ? ? ?| account_locked |
+—————+————-+—————-+
| root ? ? ? ? ?| localhost ? | N ? ? ? ? ? ? ?|
| mysql.Session | localhost ? | Y ? ? ? ? ? ? ?|
| mysql.sys ? ? | localhost ? | Y ? ? ? ? ? ? ?|
| u1 ? ? ? ? ? ?| localhost ? | N ? ? ? ? ? ? ?|
| u2 ? ? ? ? ? ?| % ? ? ? ? ? | N ? ? ? ? ? ? ?|
| u2 ? ? ? ? ? ?| localhost ? | N ? ? ? ? ? ? ?|
| u3 ? ? ? ? ? ?| 192.168.1.% | N ? ? ? ? ? ? ?|
+—————+————-+—————-+
7 rows in set

刪除用戶

刪除用戶的語法如下:

DROP?USER?用戶名@ip;

現在我們來刪除u2@’%’

mysql>?drop?user?u2@'%'; Query?OK,?0?rows?affected

這樣u2用戶就被刪除了。

修改用戶賬號

語法如下:

rename?user?old@'oldip'?to?new@'newip';

案例如下:

mysql>?RENAME?USER?u1@localhost?to?user1@'127.0.0.1'; Query?OK,?0?rows?affected

授權

學完了如何創建賬號及管理賬號后,我們來看看如何給用戶授權以及如何回收不需要的權限。

用戶授權

給用戶授權語法如下:

GRANT?權限?ON?數據庫名*表名?TO?用戶名@ip;

案例如下:

mysql>?GRANT?SELECT?ON?*.*?TO?'u1'@'localhost'?;? Query?OK,?0?rows?affected?(0.00?sec)? --?全局級別授權??? mysql>?GRANT?ALL?ON?test.*?TO?'u2'@'localhost';? Query?OK,?0?rows?affected?(0.00?sec)? --?數據庫級別授權??? mysql>?GRANT?ALL?ON?test.student?TO?'u3'@'localhost'?WITH?GRANT?OPTION;? --?表級別授權

查看用戶的權限

給用戶授權后,我們來查看用戶是否已經獲得到了這些權限。

回收用戶權限

當發現給與的權限多了,那么就應該及時回收這些權限。回收權限的語法和授權的語法非常像。

REVOKE?權限?ON?數據庫*表?FROM?用戶名@ip地址

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享