mysql.user 表中 Host 欄位限制登入來源,預設 root@localhost 僅允許本機。
mysql -u root -p
USE mysql;
UPDATE user SET Host = '%' WHERE User = 'root';
FLUSH PRIVILEGES;
SELECT Host, User FROM user;
將 Host 改為 % 允許任意 IP。
-- 允許 myuser 從任意 IP 以 mypassword 登入所有庫
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
-- 限定特定 IP
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.6' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
-- 限定特定庫
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'192.168.1.6' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
my.cnf [mysqld] 加 skip-grant-tablesmysql
USE mysql;
UPDATE user SET authentication_string=PASSWORD('newpass') WHERE User='root';
FLUSH PRIVILEGES;
skip-grant-tables,重啟FLUSH PRIVILEGES; 不生效authentication_string,非 passwordskip-grant-tables 期間任何人可無密碼登入,務必最短時間完成並移除日常用 授權法 最規範;忘記密碼用 跳過授權表法;老舊系統快速改用 改表法。生產環境嚴禁 root@%,建立專用帳號、限定 IP、最小權限。