本文基於 SUSE Linux + MySQL 5.6 實測,系統整理用戶創建、授權、密碼修改、權限回收、用戶刪除全生命周期操作,附完整權限表供查閱。
OS: SUSE Linux
MySQL: 5.6
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
| 參數 | 說明 | 範例 |
|---|---|---|
| username | 用戶名 | zpc |
| host | 允許連線來源:localhost(本機)、192.168.1.%(IP 段)、%(任意遠程) | % |
| password | 密碼,可為空 | 123456 |
-- 本機用戶
CREATE USER 'zpc'@'localhost' IDENTIFIED BY '123456';
-- 指定 IP
CREATE USER 'zpc'@'192.168.1.101' IDENTIFIED BY '123456';
-- 任意遠程
CREATE USER 'zpc'@'%' IDENTIFIED BY '123456';
-- 無密碼(不推薦生產)
CREATE USER 'zpc'@'%' IDENTIFIED BY '';
CREATE USER 'zpc'@'%';
GRANT privileges ON db_name.tbl_name TO 'username'@'host' [WITH GRANT OPTION];
| 參數 | 說明 |
|---|---|
| privileges | SELECT, INSERT, UPDATE, DELETE 等,ALL 代表全部權限 |
| db_name.tbl_name | *.* 表示所有庫所有表 |
| WITH GRANT OPTION | 允許該用戶再授權給他人 |
-- 特定表權限
GRANT SELECT, INSERT ON test.user TO 'pig'@'%';
-- 全庫全表最高權限(含授權權)
GRANT ALL ON *.* TO 'zpc'@'%' WITH GRANT OPTION;
-- 查看指定用戶權限
SHOW GRANTS FOR 'zpc'@'%';
-- 列出所有用戶
SELECT DISTINCT CONCAT('User: ''', user, '''@''', host, ''';') AS query FROM mysql.user;
-- 標準語法(MySQL 5.7+ 推薦 ALTER USER)
SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');
-- 當前登入用戶
SET PASSWORD = PASSWORD('newpassword');
-- 兼容舊版本(直接操作 mysql.user 表)
UPDATE mysql.user SET authentication_string=PASSWORD('123456') WHERE user='zpc';
FLUSH PRIVILEGES;
注意:MySQL 5.7+ password 欄位改名為 authentication_string,且推薦使用 ALTER USER 'user'@'host' IDENTIFIED BY 'pwd';。
REVOKE privilege ON db_name.tbl_name FROM 'username'@'host';
精確匹配原則:授權時用 test.user,回收必須同樣指定 test.user;用 *.* 授權,回收 test.user 不生效。務必先 SHOW GRANTS 確認再操作。
DROP USER 'username'@'host';
| 權限 | 允許操作 |
|---|---|
| ALTER | ALTER TABLE |
| CREATE | CREATE TABLE / DATABASE / INDEX / VIEW / ROUTINE |
| DROP | DROP TABLE / DATABASE / VIEW |
| SELECT / INSERT / UPDATE / DELETE | 對應 DML |
| INDEX | CREATE/DROP INDEX |
| EXECUTE | 執行存儲過程/函數 |
| FILE | SELECT ... INTO OUTFILE / LOAD DATA INFILE |
| LOCK TABLES | LOCK TABLES(需配合 SELECT) |
| PROCESS | SHOW FULL PROCESSLIST |
| RELOAD | FLUSH 操作 |
| REPLICATION SLAVE / CLIENT | 主從複製相關 |
| SHOW DATABASES | SHOW DATABASES |
| SHUTDOWN | mysqladmin shutdown |
| SUPER | CHANGE MASTER / KILL / SET GLOBAL / PURGE BINLOG / 額外連線 |
| CREATE USER | CREATE/DROP/RENAME USER / REVOKE ALL |
| USAGE | 僅允許連線,無實質權限 |
host 盡量限定具體 IP/網段,避免 %。SELECT user, host FROM mysql.user; 排查無用/弱密碼賬號。validate_password 插件,強制複雜度與過期輪換。mysqldump mysql user db tables_priv columns_priv procs_priv proxies_priv > grants_backup.sql。