2016-03-03 74 views
0

我正在使用master數據庫爲所有事務構建saas應用程序,併爲每個租戶使用用戶羣和分離數據庫。每個租戶都有一個唯一的子域,並在此基礎上,將正確的數據庫指向租戶。 Web應用程序使用php構建,MySQL用於數據存儲。SaaS通過master數據庫訪問多個數據庫和用戶身份驗證機制的方法

我有幾個問題,並開始;

  1. 當用戶訪問租戶主頁(例如Sub.abc.com)時,將會有一個登錄功能可用。由於用戶名密碼和用戶羣位於主數據庫中,我將如何驗證用戶?是通過主數據庫的單獨數據庫連接還是通過web apis?什麼是最好的方法?

  2. 將會有租戶創建的角色。因此,假設通過調用web api檢索特定租戶的員工,並將角色與用戶標識一起存儲在租戶數據庫中。這是否是正確的方向,因爲沒有直接的外鍵映射,並且一旦用戶被檢索到,我應該存儲在租戶數據庫中還是將其保存在內存中?

  3. 如果企業主想要一份關於每個租戶數據庫的具體內容的報告,那麼從每個單獨的租戶數據庫中獲取所有數據的最佳方法是什麼?

  4. 我們如何捕捉每個租戶的數據庫使用情況,文件存儲和顯示在超級管理員中?

回答

3

我將如何驗證用戶?是通過主數據庫的單獨數據庫連接還是通過web apis?什麼是最好的方法?

小心「最好的方式」的問題 - 這將指出這個問題是偏離主題作爲意見的基礎。

如果你的應用程序是完全封閉的源碼(我認爲它是),那麼它並不重要。如果您願意,您可以直接訪問您的主數據庫,因爲您的所有客戶端實現都將成爲整個軟件包的一部分。

這就是說,對於可伸縮性和可維護性來說,構建身份驗證API接口並使用它可能是一個更好的主意,因此您不需要管理客戶端軟件的數據庫連接組件。

...該角色與用戶標識一起存儲在租戶數據庫中。這是否是正確的方向,因爲沒有直接的外鍵映射,並且一旦用戶被檢索到,我應該存儲在租戶數據庫中還是將其保存在內存中?

這很好。用戶對所有實現都很常見,但角色對於每個客戶端實現都是唯一的。這表明您接近它的方式是正確的,因爲您先進行身份驗證,然後在登錄後將該客戶端的角色分配給用戶。您應該檢查本地數據庫(顯然),然後將其分配給用戶的會話它會在訪問期間堅持到來。

如果企業主想要一份關於每個租戶數據庫的具體內容的報告,那麼從每個個人租戶數據庫中獲取所有數據的最佳方法是什麼?

這太寬泛無法回答。在這裏你也應該小心,因爲客戶的數據可能不是你的報告!

我們如何捕獲每個租戶的數據庫使用情況,文件存儲和在超級管理員中顯示?

再次,相當廣泛,但我相信,你可以通過查詢每個客戶端數據庫上的數據庫統計信息MySQL服務器通過查詢承載客戶端的文件服務器實現這樣的事情,並做文件存儲相同。


我希望這會有幫助,如果您想要更具體的幫助,請將您的問題再縮小一點。

+1

「這裏你也應該小心,因爲客戶的數據可能不是你的報告!」千真萬確。除了使用指標之外,幾乎沒有人會在其數據中使用主機窺探。它甚至可能會根據數據類型導致法律問題。 –

+0

謝謝@拉馬先生我知道你在這裏的意思。基本上數據不是個人的,但我想沒有必要,因爲我們將所有事務存儲在主數據庫以及用戶中。 –

0

小心「最好的方式」的問題 - 這將指出這個問題是脫離主題作爲意見的基礎。

如果你的應用程序是完全封閉的源代碼(我想它是 是),那麼它並不重要。如果您願意,可以直接訪問主數據庫 ,因爲您的所有客戶端實施 都將成爲整個軟件包的一部分。

話雖這麼說,可擴展性和maintainabilty它可能是一個 更好的想法,建立一個認證API接口和使用,所以 你不需要管理 客戶端軟件的數據庫連接組件。

同意。看到這種情況是很難找到答案,特別是在多租戶。

你是什麼意思封閉源?

如果我可以通過身份驗證API從主數據庫中檢索數據,那麼我將如何以某種方式託管它,只有在應用程序內授予訪問權限並且外部各方無法訪問它?稍後我們還需要向外部用戶提供服務。在這種情況下,從現在開始揭露這種情況還是稍後在單獨的服務上工作會更好?除了NuSOAP以外,你知道哪些最好的PHP Web服務庫?

這很好。用戶對於所有實現都很常見,但這些角色對於每個客戶端實現都是唯一的。這表明 您接近它的方式是正確的,因爲您首先驗證 ,然後在登錄後將客戶端的角色分配給用戶。您 應該根據您的本地數據庫檢查(顯然),然後將其分配給 它用戶的會話,因此他們會在 訪問期間持續。

這是正確的!這些用戶對所有實現都很常見,它存儲在主數據庫中,而不是存儲在個人租戶數據庫中。就我而言,根據每個租戶應用程序的角色,租戶可以創建租戶應用程序中的角色,例如帳單元,帳戶,前臺等等。所以這些user_id和role_id存儲在租戶的數據庫中。這就是爲什麼我問,因爲user_id沒有直接映射到主數據庫的用戶表,如果沒關係。

這太寬泛無法回答。您在這裏也應該小心,因爲 客戶的數據可能不是您的報告!

現在讓我們假設超級管理員想知道每個租戶的角色。在這種情況下,我將如何從所有租戶數據庫檢索數據?我們是使用Views還是因爲我們使用的是MySQL,我怎麼能實現這個呢?

再次,相當廣泛,但我相信,你可以通過查詢每個 客戶數據庫的數據庫統計信息與MySQL服務器實現類似 這一點,並通過查詢承載 服務器做文件存儲相同客戶的文件。

非常抱歉。我們基本上想跟蹤租戶數據庫的使用情況,看看它們是否超出我們達成一致的數量。這就是爲什麼。我希望有一種方法可以實現這一點。

此外,對於站點圖像,將BLOB存儲在硬盤或數據庫中更好嗎?每天結束之前,我們需要考慮可伸縮性以及圖像加載時帶寬消耗較少的方式?

相關問題