大家好~我好久沒回來了(←自以為有人在看XD)
今天來分享一個我自己前不久所遇到的問題~~
就是遠端的電腦(伺服器Server)要如何連結並存取本機(伺服器Server)的MySQL(資料庫)。
如果你已經覺得不知道我在講甚麼了,就別看這篇了吧~~~
常在寫網頁後台的朋友們,
應該都知道如何用PHP連結後台Server上的某一個資料庫~
連結的寫法有很多種,我自己是習慣這樣寫:
看起來相當合理,也沒有任何的問題!
但是~~這僅限於本機端(localhost)互相存取,也就是localhost的做法~~~
我遇到的問題是...
我的新客戶基於某種需求,需要把他們的部分資料藉由轉借方式存取到我這邊的資料庫裡。
但又不讓我動他們公司的資料庫....
所以我只能開放我這裡的資料庫給他們...但感覺超危險的= =
不過為了"客戶需求"權宜之下不得不這麼做~~~
反正網站做完之後架到他們的地方去,我就要刪帳號關權限了....
有些人可能很天真,想說不就在PHP那$db_server那改IP不就好了嘛~~~
別傻了~~~
如果這麼簡單大家飯都不用吃了~~
總之...如果MySQL帳號是root而且host是對應到localhost的話,
再怎麼改IP關防火牆~~~
做到死都是無法連到~~
在這裡我用的方法就是新增MySQL的帳號並且賦予權限,可以參考一下:
1. 新增使用者,並允許用某特定ip登入,不需用localhost
mysql> use mysql
mysql> GRANT ALL ON *.* TO new_account_name@IP identified by 'new_account_passward';
mysql> FLUSH PRIVILEGES;
2. 新增使用者,並允許用某特定ip登入,不需用localhost,且限定僅能連結單一資料庫(db_name)。
mysql> use mysql
mysql> GRANT ALL ON db_name.* TO new_account_name@IP identified by 'new_account_passward';
mysql> FLUSH PRIVILEGES;
3. 新增使用者,並允許用任何ip登入,不須用localhost,且限定僅能連結單一資料庫(db_name)。
mysql> use mysql
mysql> GRANT ALL ON db_name.* TO new_account_name@'%.%.%.%' identified by 'new_account_passward';
mysql> FLUSH PRIVILEGES;
§ 以上的這些命令碼我是在MySQL Command Line Client打的 (如果是裝AppServ的話,會在"所有程式→AppServ→MySQL Command Line Client")
§ 進入後先輸入root密碼Enter Passward:(root passward)
之後就直接打紅字的部分,一行就一個enter。
※完成後記得重啟MySQL和Apache。
我是只做了第3個,就是新增一個帳號,這個帳號在所有的IP上都能連結存取,不過僅限定它只能動到某特定的資料庫。
"在所有的IP上都能連結存取"這的確是蠻危險的,但因為我現在在製作網站的位置跟客戶公司完全不同,所以只能完全開放讓他試!
但如果到時網站做好、確定網站要架在哪後,就可以使用限定IP的方式開帳號:
例如網站也架在他們公司的話,那IP前面應該都一樣,
GRANT ALL ON tthealthgo.* TO new_account_name@'%.%.%.%' identified by 'new_account_passward'; 這行就可以吧'%.%.%.%'改成'192.168.101.%'之類來限定。
這樣就會比較安全喔!!!
◎經過以上的帳號新增與權限設定之後,PHP連結的寫法也可以寫一樣,但資料庫位置、名稱、管理者帳號、密碼就都可以改成你剛剛新增的了!(不用再localhost、root了~~耶)
之後把這個檔案放到別台Server之中,你會很奇妙的發現~
可以連線了耶!!!!
P.S.如果還是無法連線請檢查下防火牆,有可能是被防火牆給擋了~~~
- Jouko 2013/11/3