SKYXY客服
x
就說千萬不要從用戶端直接存取資料庫,講都講不聽! | skyxy
快速建站
︿
TOP
首頁 > 高級技能 > 文章內容
就說千萬不要從用戶端直接存取資料庫,講都講不聽!
8/8/2016
瀏覽數:3579
空見
許多初入門遊戲開發者並不知道,一般IT專案的用戶端程式都不會直接連上資料庫存取資料,遊戲專案也是如此,理由很簡單:「安全」。
連接資料庫需要各種連接參數,最基本的有資料庫位址(IPDomain)、資料庫與資料表名稱、登入資料庫的帳號密碼等,這些參數都得放在要連接資料庫的程式裡,也就是「用戶端」程式,而這些程式平常就在用戶的設備中執行,任何人都可以輕易取得,透過簡單的反向工程就可以獲得這些參數,因此,有經驗的工程師不但不會直接由用戶端程式連接資料庫,甚至還會用防火牆保護,不讓駭客有機會直接存取資料庫。
遊戲程式在駭客手中,就沒有機密可言
那麼,遊戲程式要如何存取資料庫呢?
最好的方法就是透過遊戲伺服器
許多開發者很不願意碰觸遊戲伺服器,因為一聽到遊戲伺服器這幾個字就頭皮發麻,所以才會想要直接存取資料庫,加上遊戲引擎連接資料庫的程式並不難寫,網路上的教學很多,但是我們還是要告訴您這個殘酷的事實,學會了也不能用,因為太危險了,除非的遊戲只是做好玩的。

如果遊戲開發者只能夠透過遊戲伺服器存取資料庫,因為用戶存取權限設計的關係,安全性便可獲得一定程度的保障,只是現今的遊戲伺服器軟體,都沒有提供資料庫整合存取的功能,非常可惜。
沒有遊戲伺服器怎麼辦
專業的工程師會自己做資料庫安全性整合的遊戲伺服器,大多數的遊戲公司就是這麼做的;如果沒有能力開發遊戲伺服器,買一套有外掛插件(plug-in)功的遊戲伺服器軟體,自己寫插件程式來存取資料庫也是一種選擇,不過這類的插件程式也不好寫,非一般遊戲程式師所能負荷。

雲端時代來臨,許多號稱是雲端遊戲伺服器的產品,都沒有資料庫存取或與自定義插件的功能,最後還是得回歸到遊戲伺服器軟體,目前已知只有arcalet可以有資料庫功能,也可以自己開發分散式插件,只不過資料庫並不是自定義的資料庫,而是arcalet本身專為遊戲開發所需而提供的資料庫功能。
使用arcalet雲端服務
用過arcalet的開發者會發現,在存取arcalet的資料庫,如Item、Leaderboard、Guild、Mailbox….等等,都需要已經完成連線的ArcaletGame物件,當遊戲用戶端程式透過api向資料庫系統要求讀寫資料時,雲端介面會立刻檢查用戶是否在線,確認用戶身份與權限,這些複雜的動作在api的用戶端與伺服器端完成。

下次您在規劃一個新的遊戲企畫案時,別再忘記:

「千萬不要再從用戶端直接存取資料庫了!」
您也可能喜歡這些文章
留言給作者
不公開此留言     登入即可留言
讀者留言
載入更多留言