一、MySQL-5.7 修改密碼和連接權限設置
修改密碼語法
注意:root@localhost 和 root@192.168.56.% 是兩個不同的用戶。在修改密碼時,兩個用戶的密碼是各自分別保存,如果兩個用戶密碼設置不一樣則登陸時注意登陸密碼
GRANT ALL PRIVILEGES ON *.* TO 'user'@'host' IDENTIFIED BY 'passwd';
語法參數說明:
命令部分 | 作用 |
---|---|
GRANT ALL PRIVILEGES | 授予所有權限,授予用戶 所有權限(包括 SELECT、INSERT、UPDATE、DELETE、CREATE、DROP 等,ALL PRIVILEGES 是 MySQL 中權限的最高級別,允許用戶操作所有數據庫和表。) |
ON *.* | 作用于所有數據庫和表,第1個 * 表示所有數據庫。第2個 * 表示所有表。 |
TO 'root'@'192.168.56.%' | 允許192.168.56.0/24網段內所有IP 連接 |
IDENTIFIED BY 'Engin2019123456' | 設置密碼 |
操作步驟
步驟 1:創建用戶并設置密碼
如果用戶 'root'@'192.168.56.%'
不存在,需先創建用戶:
CREATE USER 'root'@'192.168.56.%' IDENTIFIED BY 'password';
步驟 2:授予權限
授予該用戶所有權限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.56.%';
步驟 3:刷新權限
確保權限立即生效:
FLUSH PRIVILEGES;
完整sql實現方法
-- 創建用戶并設置密碼
CREATE USER 'root'@'192.168.56.%' IDENTIFIED BY 'passworld';-- 授予所有權限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.56.%';-- 刷新權限
FLUSH PRIVILEGES;
驗證用戶是否存在
查看 MySQL 數據庫root用戶和允許連接的主機(host)信息的語法:
SELECT User, Host FROM mysql.user WHERE User = 'root';
查看 MySQL 數據庫中所有用戶的用戶名和允許連接的主機(host)信息的語法
SELECT user, host FROM mysql.user;
mysql> SELECT user, host FROM mysql.user;
+---------------+--------------+
| user | host |
+---------------+--------------+
| root | 192.168.56.% |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+---------------+--------------+
4 rows in set (0.03 sec)
- 參數說明:
User | Host | 說明 |
---|---|---|
root | 192.168.56.% | 允許從 192.168.56.0/24 網段內的任意 IP 地址連接 MySQL,用戶名為 root 。% 表示通配符,匹配同一網段的所有 IP。 |
mysql.session | localhost | MySQL 內置的只讀用戶,用于維護會話相關的系統功能,通常不需要手動操作。 |
mysql.sys | localhost | MySQL 內置用戶,用于訪問 sys 數據庫(系統監控和診斷工具),通常不需要手動操作。 |
root | localhost | 本地管理員賬戶,僅允許從本機(localhost )連接 MySQL,用戶名為 root 。這是最常見的管理員賬戶。 |
關鍵概念說明
-
user
和host
的組合
MySQL 中,用戶賬戶由user
和host
共同唯一標識。例如:root@localhost
和root@192.168.56.%
是兩個不同的用戶。在修改密碼時,兩個用戶的密碼各自分別保存,如果兩個用戶密碼設置不一樣則登陸時注意登陸密碼host
字段支持通配符(如%
表示任意主機,localhost
表示本機)。
-
root@192.168.56.%
的用途- 允許從
192.168.56.0/24
網段內的任意 IP 連接 MySQL(例如192.168.56.1
、192.168.56.100
等)。 - 通常用于遠程管理 MySQL 數據庫(需確保防火墻開放對應端口)。
- 允許從
-
localhost
的特殊性localhost
表示本地連接(通過 Unix 套接字或本地 TCP/IP 連接)。- 與 IP 地址
127.0.0.1
不同,localhost
優先使用 Unix 套接字文件(而非 TCP/IP 協議)。
-
內置用戶(
mysql.session
和mysql.sys
)mysql.session
:用于系統內部維護會話狀態,權限受限,通常不可刪除。mysql.sys
:用于訪問sys
數據庫(包含性能視圖和監控工具),權限受限。
二、 常見操作建議
1. 查看用戶權限
如果需要查看某個用戶的權限,可以執行:
SHOW GRANTS FOR 'root'@'localhost';
2. 修改用戶權限
如果需要限制 root@192.168.56.%
的權限,可以使用 REVOKE
或 GRANT
命令。例如:
REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'192.168.56.%';
3. 刪除用戶
如果不再需要某個用戶,可以刪除:
DROP USER 'root'@'192.168.56.%';
4. 刷新權限
修改用戶或權限后,需執行以下命令使更改生效:
FLUSH PRIVILEGES;
三、 安全提示:
- 最小化權限:避免為
root
用戶分配不必要的權限(尤其是遠程訪問)。 - 限制
host
范圍:如果不需要遠程連接,建議刪除root@192.168.56.%
或將其host
限制為具體 IP。 - 禁用匿名用戶:確保沒有
''@'%'
或''@'localhost'
的匿名賬戶(可通過SELECT User, Host FROM mysql.user WHERE User = '';
檢查)。
常見問題排查
1. 如果用戶已存在
- 刪除舊用戶(謹慎操作):
DROP USER 'root'@'192.168.56.%';
- 重新執行上述創建和授權步驟。
2. 如果報錯 ERROR 1396 (HY000)
- 確保 MySQL 版本支持
CREATE USER
(MySQL 5.7+)。 - 如果使用舊版本(如 MySQL 5.6),改用以下語法:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.56.%' IDENTIFIED BY 'passwd';
3. 如果登錄失敗
- 檢查密碼是否正確(注意大小寫和特殊字符)。
- 確保客戶端連接使用的主機名匹配
192.168.56.%
(例如192.168.56.1
)。