大家好~我好久沒回來了(←自以為有人在看XD)

今天來分享一個我自己前不久所遇到的問題~~

就是遠端的電腦(伺服器Server)要如何連結並存取本機(伺服器Server)的MySQL(資料庫)。

如果你已經覺得不知道我在講甚麼了,就別看這篇了吧~~~

 

常在寫網頁後台的朋友們,

應該都知道如何用PHP連結後台Server上的某一個資料庫~

連結的寫法有很多種,我自己是習慣這樣寫:

sshot-1  

看起來相當合理,也沒有任何的問題!

但是~~這僅限於本機端(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了~~耶)

sshot-2  

 

之後把這個檔案放到別台Server之中,你會很奇妙的發現~

可以連線了耶!!!!

P.S.如果還是無法連線請檢查下防火牆,有可能是被防火牆給擋了~~~

 

- Jouko 2013/11/3

arrow
arrow

    ECS 發表在 痞客邦 留言(5) 人氣()