MySQL 使用者管理是資料庫安全基石。本文系統梳理從建立帳號、分級授權、密碼變更、權限回收到帳號刪除的完整操作鏈路,採用現代 CREATE USER + GRANT 模式,並說明舊版 INSERT INTO user 的棄用原因,附贈常用查詢指令速查表。
-- 登入 root
mysql -u root -p
-- 建立帳號,指定認證插件與密碼策略
CREATE USER 'phplamp'@'localhost' IDENTIFIED BY '1234';
-- 或支援遠端連線
CREATE USER 'phplamp'@'%' IDENTIFIED BY '1234';
-- 驗證登入
mysql -u phplamp -p
優勢:語法清晰、自動處理 mysql.user 表複雜欄位(SSL、資源限制、密碼過期等),避免手動插入導致欄位缺失或版本不兼容。
-- 建立業務庫
CREATE DATABASE phplampDB CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- 全權限授權(僅限該庫)
GRANT ALL PRIVILEGES ON phplampDB.* TO 'phplamp'@'localhost';
-- 細粒度授權範例(僅讀寫)
GRANT SELECT, INSERT, UPDATE, DELETE ON phplampDB.* TO 'phplamp'@'localhost';
-- 讓使用者能將自己的權限轉授他人(謹慎使用)
GRANT ALL PRIVILEGES ON phplampDB.* TO 'phplamp'@'localhost' WITH GRANT OPTION;
-- 立即生效
FLUSH PRIVILEGES;
| 層級 | 語法範例 | 說明 |
|---|---|---|
| 全域 | GRANT ALL ON *.* TO 'u'@'%'; | 所有庫所有表,含管理權限 |
| 資料庫 | GRANT ALL ON db.* TO 'u'@'%'; | 指定庫內所有物件 |
| 資料表 | GRANT SELECT,INSERT ON db.tbl TO 'u'@'%'; | 指定表特定操作 |
| 欄位 | GRANT SELECT(id,name) ON db.tbl TO 'u'@'%'; | 欄位級存取控制 |
| 程序 | GRANT EXECUTE ON PROCEDURE db.sp TO 'u'@'%'; | 存儲過程執行權限 |
常用權限關鍵字:ALL PRIVILEGES、SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、INDEX、ALTER、EXECUTE、RELOAD、SHUTDOWN、PROCESS、FILE、GRANT OPTION、REPLICATION SLAVE、REPLICATION CLIENT。
-- 修改自身密碼
SET PASSWORD = 'newpass';
-- root 修改他人密碼
ALTER USER 'phplamp'@'localhost' IDENTIFIED BY 'newpass';
-- 或
SET PASSWORD FOR 'phplamp'@'localhost' = 'newpass';
FLUSH PRIVILEGES;
舊版 UPDATE mysql.user SET authentication_string=PASSWORD('newpass') WHERE User='phplamp' AND Host='localhost'; 在 8.0 中 PASSWORD() 已移除,authentication_string 儲存雜湊值,不建議直接操作。
-- 顯示當前使用者權限
SHOW GRANTS;
-- 顯示指定使用者權限
SHOW GRANTS FOR 'phplamp'@'localhost';
-- 列出所有使用者
SELECT User, Host, plugin FROM mysql.user;
-- 回收特定權限
REVOKE INSERT, UPDATE ON phplampDB.* FROM 'phplamp'@'localhost';
-- 回收所有權限
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'phplamp'@'localhost';
-- 刪除帳號(8.0+ 自動清理權限記錄)
DROP USER 'phplamp'@'localhost';
-- 刪除關聯資料庫(謹慎!)
DROP DATABASE phplampDB;
FLUSH PRIVILEGES;
| 操作 | 指令 |
|---|---|
| 列出資料庫 | SHOW DATABASES; |
| 切換資料庫 | USE `db_name`; |
| 列出資料表 | SHOW TABLES; |
| 顯示表結構 | DESCRIBE `table_name`; / SHOW CREATE TABLE `table_name`; |
| 刪除資料庫 | DROP DATABASE `db_name`; |
| 刪除資料表 | DROP TABLE `table_name`; |
*.* + WITH GRANT OPTION。'user'@'10.0.0.%' 或具體 IP,避免 '%' 通配。validate_password 元件,強制長度、複雜度、過期輪換。SELECT User, Host FROM mysql.user WHERE User NOT IN ('root','mysql.sys',...) 清理殭屍帳號。掌握 CREATE USER/GRANT/REVOKE/DROP USER 現代管理鏈路,配合最小權限與定期審計,即可構建合規、可控的 MySQL 存取治理體系。