-- MySQL 5.7
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
-- MySQL 8.0+ (推薦)
CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mypass';
-- 或 caching_sha2_password (8.0 預設)
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
主機名說明:localhost (本地 socket)、127.0.0.1 (本地 TCP)、% (任意 IP)、192.168.1.% (網段)。
DROP USER 'jeffrey'@'localhost';
-- 同時刪除其所有權限
-- 全庫全表所有權限 + 授權權限
GRANT ALL PRIVILEGES ON *.* TO 'jeffrey'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
-- 單庫讀寫
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app'@'192.168.1.%' IDENTIFIED BY 'pass';
-- 僅查詢
GRANT SELECT ON *.* TO 'readonly'@'%';
-- 回收特定權限
REVOKE INSERT ON *.* FROM 'jeffrey'@'localhost';
-- 回收所有權限含授權權限
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'jeffrey'@'localhost';
RENAME USER 'jeffrey'@'localhost' TO 'jeff'@'127.0.0.1';
-- 修改當前用戶密碼
SET PASSWORD = PASSWORD('newpass');
-- 或 8.0+
ALTER USER USER() IDENTIFIED BY 'newpass';
-- root 修改他人密碼
SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('newpass');
-- 8.0+
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'newpass';
-- 所有用戶
SELECT host, user, authentication_string FROM mysql.user;
-- 特定用戶權限
SHOW GRANTS FOR 'jeffrey'@'localhost';
-- 當前用戶權限
SHOW GRANTS;
validate_password 元件,強制複雜度| 層級 | 權限範例 | 適用對象 |
|---|---|---|
| 全域 | ALL PRIVILEGES, SUPER, RELOAD, SHUTDOWN | *.* |
| 資料庫 | SELECT, INSERT, CREATE, DROP | db.* |
| 資料表 | SELECT, UPDATE, DELETE, ALTER, INDEX | db.table |
| 欄位 | SELECT (col1, col2), UPDATE (col1) | db.table(col) |
| 程序/函數 | EXECUTE, ALTER ROUTINE | PROCEDURE db.proc |