MySQL遠程訪問,也就是通過ip訪問MySQL服務,MySQL對於安全的要求是非常嚴格的,需要授權。
grant語法:
grant 權限名(所有的權限用all) on 庫名(*全部).表名(*全部) to ‘要授權的用戶名’@’%’(%表示所有的IP,可以只些一個IP) identified by “密碼”;
身份檢查使用user表(Host, User和Password)3個範圍列執行。服務器只有在user表記錄的Host和User列匹配客戶端主機名和用戶名並且提供了正確的密碼時才接受連接。
在user表Host值的指定方法:
* Host值可以是主機名或IP號,或’localhost’指出本地主機。
* 你可以在Host列值使用通配符字符“%”和“_”。
* Host值’%’匹配任何主機名,空Host值等價於’%’。它們的含義與LIKE操作符的模式匹配操作相同。例如,’%’的Host值與所有主機名匹配,而’%.mysql.com’匹配mysql.com域的所有主機。
1.本地訪問
- GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY 'admin' WITH GRANT OPTION;
- FLUSH PRIVILEGES;
上述命令的意思是爲admin用戶授權,以localhost方式訪問數據庫,密碼爲admin,這是我們推薦的訪問方式,不直接暴露IP,提高數據庫服務器的安全性。
2.遠程訪問
如果數據庫服務器與應用服務器物理層面分割,也就是不在同一臺服務器的時候,我們需要通過ip方式訪問,這個ip就是數據庫服務器主機IP。
- GRANT ALL PRIVILEGES ON *.* TO [email protected] IDENTIFIED BY 'admin' WITH GRANT OPTION;
- FLUSH PRIVILEGES;
當然,這裏授予admin用戶WITH GRANT OPTION權限,欠穩妥!如果一個用戶從遠程登錄修改了數據庫表結構等等,是非常有風險的!
通常不建議授予授予其他用戶權限權力,即:
- GRANT ALL PRIVILEGES ON *.* TO [email protected] IDENTIFIED BY 'admin';
- FLUSH PRIVILEGES;
3.任意訪問
如果不限制ip訪問,授權某個用戶可以以任意ip訪問該服務,可以這樣寫:
- GRANT ALL PRIVILEGES ON *.* TO admin@'%' IDENTIFIED BY 'admin';
- FLUSH PRIVILEGES;
注意單引號!
3.取消授權
當然,有授權,就一定有取消授權:
- REVOKE ALL ON *.* FROM [email protected];
- FLUSH PRIVILEGES;
OK,現在我們可以開始部署我們的應用了!