root 或具備 CREATE USER、GRANT OPTION 權限的管理帳號CREATE USER / GRANT 語法,舊版 INSERT INTO mysql.user 已棄用-- 1. 登入管理端
mysql -u root -p
-- 2. 建立用戶(指定認證插件與密碼策略)
CREATE USER 'phplamp'@'localhost' IDENTIFIED WITH mysql_native_password BY 'StrongPass123!';
-- 3. 刷新權限(5.7+ 通常自動生效,但習慣執行)
FLUSH PRIVILEGES;
常見主機匹配模式:
| 主機值 | 含義 |
|---|---|
localhost | 本機 Unix socket 連線 |
127.0.0.1 | 本機 TCP/IP 連線 |
192.168.1.% | 允許 192.168.1.0/24 網段 |
% | 允許任意主機(生產慎用) |
-- 1. 建立目標資料庫
CREATE DATABASE phplampDB CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 2. 授予該庫所有權限
GRANT ALL PRIVILEGES ON phplampDB.* TO 'phplamp'@'localhost';
-- 3. 授予特定權限(最小權限原則)
GRANT SELECT, INSERT, UPDATE, DELETE ON phplampDB.* TO 'phplamp'@'192.168.1.100';
-- 4. 授予全庫所有權限(超級管理員,極度慎用)
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'10.0.0.1' WITH GRANT OPTION;
-- 5. 刷新生效
FLUSH PRIVILEGES;
| 權限 | 作用範圍 | 典型操作 |
|---|---|---|
| SELECT | 表/欄 | 查詢資料 |
| INSERT | 表/欄 | 新增資料 |
| UPDATE | 表/欄 | 修改資料 |
| DELETE | 表/欄 | 刪除資料 |
| CREATE | 庫/表/索引 | 建立物件 |
| DROP | 庫/表/視圖 | 刪除物件 |
| INDEX | 表 | 建立/刪除索引 |
| ALTER | 表 | 修改表結構 |
| REFERENCES | 表/欄 | 建立外鍵 |
| CREATE VIEW | 視圖 | 建立視圖 |
| SHOW VIEW | 視圖 | 查看視圖定義 |
| TRIGGER | 表 | 建立觸發器 |
| EXECUTE | 存儲程序/函數 | 執行程序 |
| LOCK TABLES | 表 | 鎖表操作 |
管理類權限(僅全域 *.* 生效): RELOAD, SHUTDOWN, PROCESS, FILE, CREATE USER, SUPER, REPLICATION SLAVE/CLIENT 等。
-- 唯讀帳號(報表、BI)
GRANT SELECT ON *.* TO 'readonly'@'10.0.%.%' IDENTIFIED BY 'ReadOnlyPass!';
-- 開發帳號(特定庫 DDL+DML)
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,INDEX,ALTER ON dev_db.* TO 'dev'@'%' IDENTIFIED BY 'DevPass123!';
-- 遷移同步帳號(需 REPLICATION SLAVE)
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.0.1.%' IDENTIFIED BY 'ReplPass456!';
-- 監控帳號(僅 PROCESS, REPLICATION CLIENT)
GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'monitor'@'10.0.0.%' IDENTIFIED BY 'MonPass789!';
-- 查看用戶權限
SHOW GRANTS FOR 'phplamp'@'localhost';
-- 撤銷特定權限
REVOKE DELETE ON phplampDB.* FROM 'phplamp'@'localhost';
-- 撤銷所有權限並刪除用戶
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'phplamp'@'localhost';
DROP USER 'phplamp'@'localhost';
GRANT ALL ON *.*validate_password 元件,設定長度、複雜度、過期週期'user'@'%',改用具體 IP/網段SELECT user, host FROM mysql.user; 掃描無用帳號GRANT ... REQUIRE SSL 加密傳輸