1. MySQL 使用者概述
MySQL 的使用者管理對於資料庫的安全性與運行至關重要。透過適當的使用者管理,可以防止未經授權的存取,並透過適當的權限設定提升運行效率。本文將詳細解釋 MySQL 如何儲存使用者資訊,以及如何顯示使用者列表。
1.1 MySQL 使用者管理的重要性
由於資料庫通常存有機密資訊,因此適當的使用者管理不可或缺。透過針對每位使用者細緻設定存取權限,可以加強安全性並確保資料的完整性。
2. MySQL 中使用者資訊的儲存位置
MySQL 的使用者資訊儲存在 mysql
資料庫內的 user
資料表中。該資料表包含與使用者相關的多種資訊,例如使用者名稱、主機名稱、密碼(經過加密)、身份驗證外掛等。
2.1 mysql.user
資料表的結構
mysql.user
資料表包含許多欄位,每個欄位存放與使用者相關的資訊。以下是該資料表的主要欄位:
Host
: 使用者可存取的主機名稱User
: 使用者名稱Password
: 加密後的密碼plugin
: 身份驗證外掛類型- 其他與安全性相關的設定
要存取此資料表,需要擁有 root
權限或對 mysql.user
擁有 SELECT
權限。
3. 如何取得 MySQL 使用者列表
要檢視 MySQL 內部的使用者列表,可以使用 SQL 指令查詢 mysql.user
資料表。以下範例展示如何獲取完整的使用者列表:
SELECT User, Host FROM mysql.user;
此查詢將會回傳所有使用者及其對應的主機名稱。例如:
+--------+-----------+
| User | Host |
+--------+-----------+
| root | localhost |
| admin | % |
| user01 | 192.168.% |
+--------+-----------+
這表示 root
帳戶僅能從本機登入,而 admin
帳戶可以從任何 IP 連線(%
表示所有 IP)。
3.1 過濾特定使用者
若要檢索特定使用者,例如篩選出名稱為 “admin” 的帳戶,可以使用以下 SQL 指令:
SELECT User, Host FROM mysql.user WHERE User = 'admin';
3.2 檢查使用者權限
若要檢查某個使用者擁有哪些權限,可以使用 SHOW GRANTS
指令。例如,檢查 admin
使用者的權限:
SHOW GRANTS FOR 'admin'@'%';
回傳結果可能如下:
+---------------------------------------------------+
| Grants for admin@% |
+---------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' |
| GRANT USAGE ON *.* TO 'admin'@'%' |
+---------------------------------------------------+
這表示 admin
帳戶擁有所有資料庫的權限。
4. 加強 MySQL 安全性的最佳實踐
為了確保 MySQL 伺服器的安全性,建議遵循以下最佳實踐:
4.1 限制 root 帳戶的存取
為了避免攻擊者透過 root 帳戶獲取最高權限,建議僅允許 root 從本機登入:
UPDATE mysql.user SET Host='localhost' WHERE User='root';
然後重新載入權限:
FLUSH PRIVILEGES;
4.2 停用匿名使用者
MySQL 預設可能會有匿名使用者帳戶。這些帳戶應該被刪除,以防止未經授權的存取:
DELETE FROM mysql.user WHERE User='';
並重新載入權限:
FLUSH PRIVILEGES;
4.3 使用強密碼
確保所有使用者帳戶都使用強密碼,可以使用以下 SQL 指令來變更密碼:
ALTER USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY 'StrongP@ssw0rd!';
4.4 啟用 MySQL 日誌監控
建議啟用 MySQL 的查詢日誌,以監控不尋常的存取行為。例如,可以開啟一般查詢日誌:
SET GLOBAL general_log = 'ON';
這將會記錄所有的 SQL 查詢,方便進行審計。
透過這些安全性強化措施,可以有效保護 MySQL 伺服器,防止未經授權的存取和潛在的安全漏洞。
5. 管理 MySQL 使用者帳戶
除了取得使用者列表外,管理 MySQL 使用者帳戶也是維護資料庫安全的重要工作。以下是一些關鍵的管理方法。
5.1 新增使用者
可以使用 CREATE USER
指令來建立新的 MySQL 使用者。例如,新增一個名為 developer
並允許從本機登入的帳戶:
CREATE USER 'developer'@'localhost' IDENTIFIED BY 'DevPass123!';
5.2 指派權限
新增使用者後,必須明確指派適當的權限。例如,允許 developer
帳戶對 project_db
資料庫進行所有操作:
GRANT ALL PRIVILEGES ON project_db.* TO 'developer'@'localhost';
變更權限後,需重新載入權限設定:
FLUSH PRIVILEGES;
5.3 移除使用者
如果某個帳戶不再需要,可以使用 DROP USER
指令來刪除它。例如,刪除 developer
帳戶:
DROP USER 'developer'@'localhost';
請確保刪除帳戶後,立即刷新權限:
FLUSH PRIVILEGES;
5.4 修改使用者密碼
若需修改現有使用者的密碼,可以使用 ALTER USER
指令。例如,變更 admin
帳戶的密碼:
ALTER USER 'admin'@'%' IDENTIFIED BY 'NewStrongP@ss!';
6. 監控與審計 MySQL 使用者行為
為了進一步加強安全性,應該定期監控 MySQL 使用者的活動,並記錄存取紀錄。
6.1 啟用 MySQL 日誌
可啟用 MySQL 的一般查詢日誌來記錄所有執行的 SQL 指令:
SET GLOBAL general_log = 'ON';
日誌檔案的位置可以使用以下指令查詢:
SHOW VARIABLES LIKE 'general_log_file';
6.2 檢視最近的登入記錄
MySQL 8.0 及更新版本支援 performance_schema
,可用來查詢最近的登入記錄:
SELECT * FROM performance_schema.accounts;
7. 結論
透過本指南,我們學習了如何在 MySQL 中取得使用者列表、管理帳戶以及強化安全性。以下是本文的重點:
- 使用
mysql.user
資料表查詢 MySQL 使用者列表。 - 利用
SHOW GRANTS
指令來檢查使用者權限。 - 新增、刪除、修改 MySQL 使用者帳戶的方法。
- 強化 MySQL 安全性的最佳實踐,例如限制 root 存取、刪除匿名帳戶及設定強密碼。
- 透過日誌與監控機制來追蹤使用者行為,確保系統安全。
透過這些措施,可以有效地管理 MySQL 使用者,確保資料庫的安全性與穩定運行。