MySQL 通過 user 表的 User 和 Host 兩列確定用戶身份。同一用戶名可對應不同 Host,權限各異。
localhost > 192.168.1.1 > 192.168.% > %'')| 函數 | 含義 |
|---|---|
USER() | 客戶端連接時指定的 用戶@主機 |
CURRENT_USER() | 實際匹配到的 mysql.user 記錄,決定權限 |
mysql.usermysql.dbmysql.tables_priv、列級 mysql.columns_privmysql.procs_privGRANT SELECT ON *.* TO ''@'%' IDENTIFIED BY '123'; -- 匿名用戶
GRANT SELECT,CREATE ON *.* TO 'bruce'@'10.20.0.232' IDENTIFIED BY '123'; -- 精確 IP
GRANT SELECT,CREATE,DELETE ON *.* TO 'bruce'@'%' IDENTIFIED BY '123'; -- 通配符
mysql -ubruce -p -h10.20.0.231
SELECT USER(), CURRENT_USER();
-- USER() = bruce@10.20.0.232
-- CURRENT_USER() = bruce@10.20.0.232 -- 命中精確 IP
DELETE FROM mysql.user WHERE user='bruce' AND host='10.20.0.232';
FLUSH PRIVILEGES;
-- 再次登入
SELECT USER(), CURRENT_USER();
-- USER() = bruce@10.20.0.232
-- CURRENT_USER() = bruce@% -- 命中通配符
DELETE FROM mysql.user WHERE user='bruce' AND host='%';
FLUSH PRIVILEGES;
-- 再次登入
SELECT USER(), CURRENT_USER();
-- USER() = bruce@10.20.0.232
-- CURRENT_USER() = @% -- 命中匿名用戶,僅擁有 SELECT 權限
''@'%'),安全風險極高localhost,減少通配符 % 使用mysql.user 表,清理無用賬號SHOW GRANTS FOR 'user'@'host'; 核實實際權限