MySQL資料庫的安全性一般包括以下幾個方面:
- 安全的一般性因素:包括使用較大強度的密碼,禁止給用戶分配不必要的權限,以防止 SOL 受到攻擊,
- 安裝步驟的安全性:確保安裝 MySQL 時指定的資料檔案、日志檔案、程式檔案均被存盤在安全的地方,未經授權的用戶無法讀取或寫入資料,
- 訪問控制安全:包括在資料庫中定義賬戶及相關權限設定,
- MySQL網路安全:僅允許有效的主機可以連接服務器,并且需要賬戶權限,
- 資料安全,確保已經對 MySQL 資料庫檔案、組態檔、日志檔案進行了充分且可靠的備份,完善的備份機制是資料安全的前提條件,

MySOL 資料庫系統能夠進行連接、查詢以及其他操作,主要取決于訪問控制串列,MySQL 權限串列如表 1 所示,
表 1 MySQL的權限及作用
| 權 限 | 作 用 |
|---|---|
| CREATE | 創建資料庫、資料表和索引的權限 |
| DROP | 創建資料庫、資料表和視圖的權限 |
| GRANT OPTION | 允許為其他賬戶添加和洗掉權限 |
| LOCK TABLES | 允許用戶使用該陳述句鎖定資料表 |
| EVENT | 執行EVENT的權限 |
| ALTER | 修改資料的權限 |
| DELETE | 洗掉資料記錄的權限 |
| INDEX | 創建洗掉索引的權限 |
| INSERT | 向資料表中插入資料的權限 |
| SELECT | 對資料庫進行資料查詢的權限 |
| UPDATE | 更新資料記錄的權限 |
| CREATE TEMPOPARY TABLES | 創建臨時表的權限 |
| TRIGGER | 執行觸發器的權限 |
| CREATE VIEW | 創建視圖的權限 |
| SHOW VIEW | 執行SHOW CREATE VIEW的權限 |
| ALTER ROUTINE | 修改或洗掉存盤程序的權限 |
| CREATE ROUTINE | 創建存盤程序的權限 |
| EXECUTE | 執行存盤程序或函式的權限 |
| FILE | 賦予讀寫服務器主機檔案的權限 |
| CREATE TABLESPACE | 創建表空間的權限 |
| CREATE USER | 創建修改MySQL賬戶的權限 |
| PROCESS | 顯示服務器運行行程資訊的權限 |
| RELOAD | 允許用戶使用FLUSH陳述句 |
| REPLICATION CLIENT | 允許使用 SHOW MASTER STATUS 以及 SHOW SLAVE STATUS |
| REPLICATION SLAVE | 允許從服務器連接當前服務器 |
| SHOW DATABASES | 允許使用SHOW DATABASES查看資料庫資訊 |
| SHUTDOWN | 允許用戶關閉MySQL服務 |
| SUPER | 允許執行關閉服務器行程之類的管理操作 |
| ALL | 代表所有可用的權限 |
所有的賬戶及密碼均被保存在 MySQL 資料庫中的 user 資料表中,因此可以通過 mysqladmin 或使用 SQL 陳述句添加、洗掉、修改用戶與密碼資訊,需要注意的是,MySQL 賬號訪問資訊需要包含主機資訊,如默認 root 是不允許通過遠程主機登錄的,
- 創建一個 username 用戶,該用戶可以通過本機連接 MySQL 資料庫,賬號密碼設為 User*123,創建 username 用戶的命令如下:
mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'User*123'
其中,各個引數的含義為:
-
username 指創建的用戶名,
-
host 指定該用戶在哪個主機上可以登錄,如果是本地用戶可用 localhost,如果想讓該用戶可以從任意遠程主機登錄,可以使用通配符 %,
-
IDENTIFIED BY 指定用戶的登錄密碼,
-
User*123 為該用戶的登錄密碼,密碼可以為空,如果為空,則該用戶可以不需要密碼登錄服務器,
出現如下內容時表明用戶創建成功:
Query OK, 0 rows affected(0.70 sec)
注意,在為 username 用戶設定密碼時需要遵循密碼設定規則,即需要同時有大小寫字母、特殊符號、數字,另外密碼必須是 8 位,
- 為 username 用戶授予權限,命令如下:
mysql> GRANT ALL ON test1.* TO 'username'@'localhost';
如果想讓該用戶可以給其他用戶授權,使用以下命令即可:
mysql> GRANT ALL ON test1.* TO 'username'@'localhost' WITH GRANT OPTION;
其中,各部分的含義為:
- ALL 表示操作權限,如 SELECT,INSERT,UPDATE 等,如果要授予所有權限則使用 ALL,
- ON 用來指定權限針對哪些庫和表,
- test1表示資料庫的名稱,
- *表示表名,如果要授予該用戶對所有資料庫和表的相應操作權限,則可用 * 表示,如 .,
- TO 表示將權限賦予某個用戶,如“username'@'localhost”表示username用戶,@ 后面接限制的主機,可以是 IP、IP 段、域名以及 %,% 表示任何地方,
- IDENTIFIED BY 指定用戶的登錄密碼,該項可以省略,
- WITH GRANT OPTION 表示該用戶可以將自己擁有的權限授權給別人,
注意,如果在創建操作用戶的時候不指定 WITH GRANT OPTION 選項,則該用戶不能使用 GRANT 命令創建用戶或者給其他用戶授權,
GRANT 命令的授權操作常用方法如表 2 所示,
表 2 GRANT命令的授權操作常用方法及作用
| 方 法 | 作 用 |
|---|---|
| GRANT 權限 ON 資料庫名.資料表名 TO 用戶名@主機名 | 對特定資料庫中的特定表單賦予權限 |
| GRANT 權限 ON 資料庫名.* TO 用戶名@主機名 | 對特定資料庫中的所有表單賦予權限 |
| GRANT 權限 ON. TO 用戶名@主機名 | 對所有資料庫中的所有表單賦予權限 |
| GRANT 權限1,權限2 ON 資料庫名.* TO 用戶名@主機名 | 對特定資料庫中的所有表單賦予多個權限 |
| GRANT ALL PRIVILEGES ON . TO 用戶名@主機名 | 對所有資料庫中的所有表單賦予全部權限 |
還可以使用 GRANT 重復給用戶添加權限,例如:先給用戶添加一個 select 權限,然后又給用戶添加一個 insert 權限,那么該用戶就同時擁有了 select 和 insert 權限,
授予用戶權限的規則,權限控制主要是出于安全因素,因此需要遵循以下原則:
- 僅賦予用戶所能滿足需要的最小權限,例如:用戶需要洗掉操作,那就只給 deletet 權限,不需要再給用戶賦予 update、insert 或者 select 權限,
- 創建用戶的時候限制用戶的登錄主機,一般是限制成指定 IP 或者內網 IP 段,
- 初始化資料庫的時候洗掉沒有密碼的用戶,安裝完資料庫的時候會自動創建一些用戶,這些用戶默認沒有密碼,
- 為每個用戶設定密碼復雜度較大的密碼,
- 定期清理不需要的用戶,回收權限或者洗掉用戶,
- 查看用戶權限,如圖 3 所示,

查看某個用戶的權限如圖 4 所示,

- 更改用戶名和密碼,命令如下:
mysql> rename user 'username'@'localhost' to 'user'@'localhost';
mysql> SET PASSWORD FOR 'user'@'localhost' = PASSWORD('123456');
- 洗掉賦予用戶的權限如圖下所示:
mysql> REVOKE ALL ON test.* FROM 'user'@'localhost';
Query OK, 0 rows affected(0.12 sec)
注意,ALL、test1.*需要和授權部分一致,
- 洗掉用戶,使用命令如下:
mysql> DROP USER 'user'@'localhost';
? 以上就是良許教程網為各位朋友分享的對MySQL資料庫的安全進行的詳述,
本文由博客一文多發平臺 OpenWrite 發布!
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/253353.html
標籤:其他
