[英]Secure multi-tenancy in MySQL application
我有一個JSP / MySQL Web服務 ,用戶可以在其中與“流程”進行交互-他們可以為給定流程上傳數據,配置,查看報告等。 他們還可以創建新流程或運行比較多個流程的報告。
當前,進程ID是在URL(GET參數)中指定的,因此任何用戶都可以與任何進程進行交互。 我被要求為該服務添加安全性和多租戶。 為簡單起見,假設每個租戶都可以完全訪問一組進程,但是多個租戶可以訪問這些進程。
我的首選方法:
我的老板認為這不足以滿足外部代碼審核的安全。 他擔心一個任性的開發人員仍然會編寫一個查詢,將一個客戶的數據暴露給另一個客戶或其他對象。
他希望我也使用ANSI SQL內置的ROLES(該應用程序必須與DB無關)為每個用戶創建一個db角色。 該角色將詳細說明該角色可以訪問哪些表,共享表中的哪些行,等等。通過這種方式,登錄后,Connection將是“安全的”,並且任何開發人員錯誤都不會引起問題。
這是我為具有單個數據庫的MySQL多租戶所做的操作,以確保數據是私有的:
由於應用程序正在使用租戶的mysql用戶,因此他們沒有機會意外獲取另一租戶的數據。
我能夠在周末以最小的更改將大型的單租戶mysql應用程序轉換為多租戶。 我在這里記錄了設計: https : //opensource.io/it/mysql-multi-tenant/
我們就多租戶安全性和處理此類問題的要求進行了類似的討論。 簡而言之,我認為在會話中存儲tenantID是一個巨大的安全風險。 用戶可以從一個租戶轉到另一個租戶,並且tenantID將保持不變,也不應通過URL發送tenantID。
請改用PostgreSQL,因為它支持真實的架構,與MySQL不同
如果必須使用MySQL,請執行以下操作:
tenant
VARCHAR(16)NOT NULL 現在,用戶只能看到他們自己的租戶信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.