首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 用戶管理實戰:建立、授權、密碼變更、刪除完整指令集

     編輯:MySQL 綜合教學

MySQL 用戶管理實戰:建立、授權、密碼變更、刪除完整指令集

MySQL 權限系統基於「用戶@主機」模型。本文整理生產環境常用用戶管理操作,含 8.0 新語法與舊版兼容寫法。

一、查看現有用戶

SELECT Host, User, authentication_string FROM mysql.user;
-- 8.0 欄位為 authentication_string,5.7 為 Password

二、建立用戶(兩種方式)

方式一:CREATE USER + GRANT(推薦,8.0 標準)

-- 建立用戶
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass123!';
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPass123!';
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'StrongPass123!';

-- 授權
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'%';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;

方式二:GRANT 隱式建立(5.7 及舊版,8.0 需開啟 NO_AUTO_CREATE_USER 關閉才可用)

GRANT ALL PRIVILEGES ON ec.* TO 'cockpit'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;

三、權限授權細粒度控制

權限說明典型角色
ALL PRIVILEGES該庫所有權限DBA、擁有者
SELECT查詢唯讀帳號、報表
INSERT/UPDATE/DELETE增刪改應用帳號
CREATE/DROP/ALTERDDL 操作開發、遷移工具
INDEX建立/刪除索引DBA、優化工具
EXECUTE執行存儲過程/函數應用帳號
REPLICATION SLAVE主從複寫複寫專用帳號
SUPER超級權限(KILL、CHANGE MASTER 等)僅 DBA

主機通配符說明

  • 'user'@'%':任意主機(含遠程),不含 localhost
  • 'user'@'localhost':本機 Unix Socket 連線
  • 'user'@'127.0.0.1':本機 TCP 連線
  • 'user'@'192.168.1.%':特定網段
⚠️ %' 不匹配 localhost,需單獨建立 'user'@'localhost' 否則本機 Socket 連線會被匿名用戶攔截導致拒絕存取。

四、修改密碼

8.0+ 標準語法

ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewStrongPass123!';
-- 或
SET PASSWORD FOR 'root'@'localhost' = 'NewStrongPass123!';

5.7 相容語法

UPDATE mysql.user SET authentication_string=PASSWORD('NewPass') WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;

密碼過期策略(8.0+)

ALTER USER 'app_user'@'%' PASSWORD EXPIRE INTERVAL 90 DAY;
ALTER USER 'app_user'@'%' PASSWORD HISTORY 5;  -- 禁止重用近 5 次密碼

五、刪除用戶

標準方式(推薦)

DROP USER 'test'@'localhost';
DROP USER 'test'@'%';

手動清理(不推薦,易殘留權限表記錄)

DELETE FROM mysql.user WHERE User='test' AND Host='localhost';
DELETE FROM mysql.db WHERE User='test';
FLUSH PRIVILEGES;

六、常見問題排查

CREATE USER 'u'@'%' ...; GRANT ...; firewall-cmd --add-port=3306/tcp
現象原因解決
本機 root 免密登入auth_socket 外掛 / 匿名用戶設定密碼、刪除匿名用戶 DELETE FROM mysql.user WHERE User='';
遠程連線拒絕無 user@% / 防火牆 / bind-address
權限不生效未執行 FLUSH PRIVILEGES / 快取FLUSH PRIVILEGES; 或重新連線
主機名解析慢skip-name-resolve 未開啟skip-name-resolve=1 在 my.cnf

七、安全基線清單

  • 刪除匿名用戶:DELETE FROM mysql.user WHERE User='';
  • 禁止 root 遠程登入:DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';
  • 移除 test 資料庫:DROP DATABASE test; DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
  • 強制密碼複雜度:安裝 validate_password 元件
  • 定期審計權限:SHOW GRANTS FOR 'user'@'host';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved