簡體   English   中英

多租戶數據架構-共享架構-安全

[英]Multi-Tenancy Data Architecture - Shared Schema - Security

我們正在啟動的新項目需要MultiTenancy。 在存儲級別,這可以通過幾種方法來完成。 (單獨的數據庫/單獨的模式/共享的模式)

為了降低運營成本,我們認為“共享模式-共享表”是繼續的最佳方法。 因此,所有租戶將在同一數據庫/模式架構上共享同一表。

但是,一個約束條件是提供良好的租戶隔離和安全性。 為此,我們可以使用加密。 如果我們能夠為每個租戶提供一個自己的密鑰對,那么我們將提供良好的安全性和良好的隔離性。 每個租戶只能讀取自己的數據,我們也不必在每個表上添加一個鑒別符字段。

我們如何從技術上實現這一目標? 如果查詢您的表,我們將獲得很多我們無法解密的數據(來自其他租戶的數據)。 同樣在Joins等中,由於其他記錄在數據庫中,因此具有更高的負載。

我已經閱讀了MSDN上的幾篇文章,並觀看了一些演示,但是它們保持了很高的層次和抽象。 有什么想法嗎? 像上面描述的那樣可能嗎? 我以為您可以在Amazon RDS上做點什么? 是否可以提供一些示例-例如在github上?

根據您共享的內容,以及各行之間的一些閱讀,我對此方法持謹慎態度。 就共享租用架構本身而言,它是用於多租戶的非常合理的設計。 我發現問題在於建議使用加密。

盡管PostgreSQL支持加密,但是它是通過pgcrypto模塊中的函數完成的。 RDS作為PostgreSQL的托管服務,還增加了輕松配置加密卷的功能,但是對於數據庫用戶/開發人員來說,它看起來幾乎一樣。

如果您只需要加密不需要過濾或加入的數據的小子集,則文檔建議使用pgcrypto-但不清楚要加密的數據量是多少。 如果只有少數幾列並且不需要對其進行過濾,則可能會起作用。 否則,請重新考慮-廣泛使用pgcrypto函數將使幾乎所有標准數據庫操作都無法實現低效率。 where子句將要求解密該列,進而需要掃描/解密整個表; 索引的使用將為零。 您的表現將很快變得緩慢。

您尚未提供的主要考慮因素是您如何提供訪問權限-例如,在Web應用程序中,您在其中完全通過一個受信任的帳戶來中介訪問權限? 還是允許客戶直接連接到數據庫? 在前一種情況下,您的代碼無論如何都將管理所有訪問,並且始終需要訪問所有密鑰。 為什么要產生開銷? 在后一種情況下,您可能會使數據庫對客戶不可用,因為所有標准查詢工具都將難以使用。

從更廣泛的角度來看,以我的經驗,每租戶架構方法可以在隔離,效率和開發開銷之間提供良好的平衡。 通過在PostgreSQL中明智地使用角色,您可以強制實施合理的訪問控制以進行直接訪問(您可以對行執行相同的操作,盡管我認為這需要更多的開銷才能正確管理)。

看一下一些常用的應用程序框架以了解更多信息:Rails提供了Apartment gem( https://github.com/influitive/apartment ); Django具有django-tenants庫( http://django-tenants.readthedocs.io/en/latest/ ); Hibernate具有可插入的租戶框架(例如, https : //docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/ch16.html

希望這可以幫助。

暫無
暫無

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

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