Postgresql

在使用多模式設計支持多租戶時處理使用者登錄

  • September 8, 2014

我正在創建一個將由組織及其員工使用的 Web 應用程序(在 PHP 和 PostreSQL 中),我想使用多個schemas來支持多租戶。將有一個數據庫,我希望與組織 A 相關的所有數據都儲存在名為的模式A中,組織 B 的所有數據都儲存在名為B等的模式中。

令我困惑的是如何處理使用者登錄。假設 Amy 是組織 A 的成員,Ben 是組織 B 的成員。當 Amy 訪問 example.com 訪問我的 Web 應用程序時,她會看到一個登錄表單,該表單要求她輸入使用者名和密碼。現在,Amy 的使用者名和密碼儲存在users模式表中,A但是 Web 應用程序如何知道在哪裡查找以驗證她的身份?

我以前從未在 Web 應用程序中使用過多個模式,所以過去我會創建一個固定的使用者名,即為webapp應用程序創建一個使用者名,該使用者名將登錄並檢查 Amy 提供的憑據與儲存在public.users表中的數據(在public哪裡PostgreSQL 創建的預設模式),但根據我正在考慮使用的設計,無法判斷 Amy 屬於哪個模式,因此,要找到正確的users表來驗證她的身份並不容易。

一種方法是停止使用users表進行身份驗證,並為每個使用者創建一個role具有LOGIN數據庫權限的表,然後只授予該使用者與適當模式互動的權限。這是我見過的解決方案,但不是我真正想使用的解決方案。我認為有更好的方法,但我只是無法找到它。

因此,總而言之,我想要的只是讓使用者能夠通過 Web 界面登錄到我的應用程序,並被限制在他們所屬組織的架構中。什麼是完成此任務的最佳方式,請記住我打算從長遠來看擁有多個組織和使用者。

感謝所有幫助。提前致謝。

您的選擇是:

  • 使用角色,並SET search_path在每個角色上查找相應組織的架構。雖然從數據庫的角度來看,在許多方面是最簡潔的方法,但在授予組織管理自己使用者的權利時,這是一種痛苦。
  • 要求使用者在登錄時指定他們的組織,可能使用 user@domain 樣式登錄,或使用 mycompany.myhostedapp.com 樣式 URL。然後在針對該組織對使用者進行身份驗證之前,通過 @domain 後綴查找該組織。這大概就是我會做的。
  • 創建一個合併所​​有公司使用者表的視圖並在其中查找使用者。可能是一場性能噩夢,您將如何處理重複項?
  • 為所有使用者表創建父表,使所有使用者表繼承,查詢父表。只是視圖方法的稍微高效的版本,不推薦。

我強烈建議一種身份驗證設計,其中包含使用者的公司身份以及他們的登錄請求。

引用自:https://dba.stackexchange.com/questions/75941