簡體   English   中英

多租戶多客戶端多個數據庫,一個源代碼-PHP

[英]Multi Tenancy Multiple Client Multiple Database, One Source Code - PHP

我的任務是創建一個現有的多租戶項目,因為該應用程序有很多客戶,所以我們決定這樣做。

我們已經合並了源代碼以與任何數據庫一起使用,所有客戶端的所有源代碼都是相同的。

現在,較早的數據庫連接是通過使用每個腳本中包含的一個配置文件進行的。

但是,正如您所知,源現在有多個數據庫不同的客戶端,因此我們被困於用客戶端管理數據庫。

最初,

http:// localhost / workspace / client / ->這是給客戶端的URL,現在我使用htaccess將其重定向到index.php並基於client /我知道此程序包將使用哪個客戶端。

有不同的客戶端, http:// localhost / workspace / clien1 / http:// localhost / workspace / clien2 / http:// localhost / workspace / client3 /

等等..

現在,在index.php頁面中重定向到login.php,但是未根據客戶端為DB設置配置。

如果有人處理過,請幫助我。

提前致謝。

在建議的設置中,數據庫連接參數(服務器地址,數據庫用戶名/密碼和數據庫名稱)是用戶或客戶(用戶的組織)的屬性。

我猜您將通過在公用數據庫中查找用戶,然后使用password_verify()驗證密碼來驗證用戶身份,當您知道自己有有效的用戶時,可以

  • 從用戶數據庫中檢索數據庫連接參數
  • 將它們存儲在php會話變量中
  • 使用php的安全會話cookie方案,使您的用戶的瀏覽器可以識別適當的會話。
  • 重定向后或在后續Web請求上,打開會話變量中提到的數據庫

確保您放置的cookie不包含嵌入其中的數據庫參數,否則網絡罪犯將找出如何更改cookie以獲得未經授權的訪問。

但是, 專業提示:眾所周知,為每個客戶創建新數據庫都是不可擴展的。 如果發生什么情況

  • 您的項目成功了,有一天您發現自己增加了1000個新客戶? 那天您將不得不添加一千個數據庫。
  • 您有500次活躍會話嗎? 他們每個人都有自己的dbms連接,這使得php的連接池方案無用。 連接池對於良好的Web應用程序性能至關重要。
  • 您是否需要執行一些涵蓋所有客戶的報告操作? 您必須分別為每個客戶運行報告,並弄清楚如何在報告程序中將它們合並在一起。 那很難。

多租戶在線應用程序的一個好習慣是將客戶ID或用戶ID值放在每個數據記錄上,並使用WHERE customer_id = ?類的查詢子句WHERE customer_id = ? (當前客戶)以按用戶分隔數據用戶。

希望現在重新考慮使用多個數據庫的設計決定還為時不晚。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM