在使用多模式設計支持多租戶時處理使用者登錄
我正在創建一個將由組織及其員工使用的 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 後綴查找該組織。這大概就是我會做的。
- 創建一個合併所有公司使用者表的視圖並在其中查找使用者。可能是一場性能噩夢,您將如何處理重複項?
- 為所有使用者表創建父表,使所有使用者表繼承,查詢父表。只是視圖方法的稍微高效的版本,不推薦。
我強烈建議一種身份驗證設計,其中包含使用者的公司身份以及他們的登錄請求。