2025澳门开彩结果历史记录-2025澳门开彩结果-2025澳门开彩查询记录-2025澳门聚宝盆-2025澳门九点半一肖一码-2025澳门精准资料免费全览

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

SaaS多租戶應用程序與數據庫數據隔離方案設計與選擇

admin
2025年1月25日 9:10 本文熱度 1780

?
     什么是SaaS    
?

軟件即服務 (Software as a service,SaaS) 是一種通過互聯網按需交付軟件應用程序的方法,通常采用訂閱方式。借助 SaaS,云服務提供商 (CSP) 可以托管和管理應用程序軟件和底層基礎設施,保證系統的可靠性。用戶可以通過手機或電腦上的網絡連接到應用程序。

通俗地講,就是將用戶的服務器相關硬件、操作系統、應用程序搬到云上,讓軟件提供商來維護。SaaS的優勢多用于ToB的業務,將客戶本地部署的系統遷移到云上,方方便客戶的同時,軟件提供商也創新了盈利模式。

SaaS對客戶來說有什么優勢呢?

  • 降低IT成本。減少硬件軟件的投入、降低了維護成本、降低了人員成本。

  • 快速部署與更新。開箱即用,無需復雜流程。自動升級,及時發布和修復功能。

  • 高安全性。企業提供標準的安全防護能力、容災恢復能力。

  • 彈性擴展。不擔心硬件資源不足及系統訪問瓶頸。

  • 隨時隨地訪問。通過網絡連接,實現多設備或異地辦公。


?
  多租戶數據隔離   
?

客戶本地數據遷移到云上或者直接訂閱使用云上產品,不可避免需要關注數據的安全隔離。使用單租戶模式還是實現多租戶數據共存與訪問,企業在系統設計之初必須規劃多租戶的架構解決方案。

我們了解下租戶概念:

  • 單租戶: 每個數據庫僅存儲來自一個租戶的數據,數據隔離性好。

  • 多租戶: 每個數據庫都存儲來自多個獨立租戶的數據,數據隔離性相對差。

相信大家也有個疑問,在多租戶場景中,為什么要進行用戶數據隔離?操作數據時加條件篩選不也可以嗎?如下查詢:

SELECT * FROM orders WHERE tenant_id = '88888888';

如果開發者在某個地方漏掉 tenant_id 條件,可能出現以下問題:

  • 用戶 A 能看到用戶 B 的訂單數據。

  • SQL注入可以繞過 tenant_id 條件訪問其他租戶數據。

通過數據隔離,上述問題就可以完全避免。盡管在操作數據時加條件在一定程度上可以實現多租戶數據的隔離,但它存在明顯的安全問題。在實際場景中,數據隔離通常是通過物理或邏輯上的手段綜合實現的,具體包括分庫分表、分區、租戶標識符控制等方式。

多租戶場景之所以要數據隔離,完全是出于數據安全與隱私保護。數據隔離可以降低數據泄露潛在風險、增強用戶對企業系統的信任、符合隱私法規(如GDPR、CCPA等)。


?
   多租戶架構方案   
?

多租戶的架構中,最常見的方案主要有四種:

  1. 單租戶模式,應用程序與數據庫完全隔離。

  2. 單租戶模式,應用程序共享系統資源,數據庫完全隔離。

  3. 多租戶模式,應用程序和數據庫資源共享,數據庫采用schema隔離。

  4. 多租戶模式,應用程序和數據庫資源共享,schema共享,數據采用行級隔離。

接下來,我簡單介紹這幾種方案的優劣情況和使用場景。

  • 單租戶模式,應用程序與數據庫完全隔離

優點:

  • 高隔離性:每個租戶有獨立的應用程序和數據庫,安全性和隱私性最高。

  • 可定制性:針對不同租戶可以自由定制應用程序和數據庫配置。

  • 性能獨立:一個租戶的負載不會影響其他租戶。

缺點:

  • 高成本:需要為每個租戶提供單獨的資源,資源利用率低。

  • 運維復雜度高:多個服務和實例帶來的部署、更新和維護成本較高。

  • 擴展性差:當租戶數量增加時,難以快速擴展。

場景:

  • 安全性要求極高的業務場景,如金融、醫療等。

  • 少量租戶但需求差異較大的情況,如大客戶的企業級服務。


  • 單租戶模式,應用程序共享系統資源,數據庫完全隔離

優點:

  • 高隔離性:每個租戶使用獨立的數據庫,數據安全性強。

  • 資源利用率較高:應用程序層共享資源,相比上一個方案成本較低。

  • 性能獨立:數據庫的隔離性保證了不同租戶之間的性能互不干擾。

缺點:

  • 中等運維復雜度:需要管理多個數據庫實例。

  • 擴展成本較高:當租戶數量增加時,仍需為每個租戶配置數據庫資源。

場景:

  • 中小型企業或中等數量租戶的場景,不適合小微企業。

  • 數據隔離要求較高但對成本有一定限制的應用。


  • 多租戶模式,應用程序和數據庫資源共享,數據庫采用 schema 隔離

優點:

  • 資源利用率高:應用程序和數據庫實例共享資源,節約成本。

  • 管理相對簡單:相比單租戶模式,維護一個數據庫實例而多個 schema 更加輕量化。

  • 隔離性中等:schema 提供了一定的邏輯隔離。

缺點:

  • 安全性較低:如果數據庫的權限管理或隔離機制不足,可能導致數據泄露。

  • 性能隔離性有限:高負載的租戶可能影響同一實例中的其他租戶。

  • 復雜的權限管理:需要通過 schema 進行精細的權限劃分。

場景:

  • 中小型 SaaS 產品,租戶數量較多,但對數據隔離性和安全性要求適中。

  • 對成本敏感的企業級應用。


  • 多租戶模式,應用程序和數據庫資源共享,schema 共享,數據采用行級隔離

優點:

  • 成本最低:所有租戶共享應用程序和數據庫資源,資源利用率極高。

  • 管理最簡單:統一的數據庫架構,無需維護多個 schema。

  • 高擴展性:可以輕松增加租戶數量,適合大規模擴展。

缺點:

  • 最低隔離性:租戶間完全共享表結構,隔離性最低,容易受到數據泄露和誤操作的風險。

  • 性能瓶頸:當租戶數量或負載過高時,資源爭搶可能導致性能下降。

  • 復雜的邏輯控制:需要在應用層實現租戶級的行級權限管理,增加開發復雜度。

場景:

  • 對隔離性要求不高的大規模 SaaS 應用,如消費級互聯網產品。

  • 對成本控制敏感,且需要支持海量小租戶的場景。


?
  多租戶數據庫設計  
?

在設計有效的多租戶數據庫時,必須仔細平衡數據隔離、可擴展性、性能和安全性。對于成功運行的多租戶系統,每一個要素都至關重要。隨著租戶數量的增加,數據庫需要具有可擴展性,以便處理增加的負載。為了保證數據庫能夠快速有效地訪問數據,性能至關重要。對于這些應用程序,需要考慮實時數據訪問。

租戶數據庫的設計方案,需要結合自身的業務選型。在數據庫方面,實現數據隔離主要有數據庫、schema、行級這三種。當然也有分區模式和混合模式。

這三個方案會面臨的問題,我簡單總結如下:

通常SaaS場景下的單個租戶數據量不會太大,一般從幾十MB至幾十GB。新方案初期難確定容量大小,當服務器性能無法滿足時,再新增服務器分配新租戶來使用。因此設計數據庫的時候,需要一個專門存儲租戶信息的數據庫,該數據庫用于管理租戶、同時也記錄該租戶數據所在的數據庫連接信息。

如果明確租戶增長不會太大,且業務功能的使用也不同(較多表可能存在數據傾斜),數據量都是幾十GB的,推薦使用數據庫隔離模式。我們可以將幾十個數據庫放在同一個實例中,有效利用計算資源。數據庫隔離模式也適合schema隔離模式,當然需要考慮上面提到面臨的問題。

當租戶數量達成千上萬的時候,或者未來租戶數能達到這個量級,數據庫隔離模式就不必再考慮了,schema隔離模式確實可以考慮。能使用schema模式的常見關系型數據庫,如Oracle、SQL Server、PostgreSQL,但如果使用 PostgreSQL 的多schema隔離模式,autovacuum 可能會頻繁執行,將是比較大的性能問題!

當上萬的租戶、或者數據量少的租戶,推薦使用行級隔離。行級隔離的基本原理是,當用戶操作數據庫表時,系統判斷是否是某個租戶的數據,必須在連接會話中獲取能識別租戶的信息,如租戶賬號、租戶ID等。獲取到的信息需要與表中的行數據進行篩選匹配,如匹配表中字段tenant_id中的值,這樣操作的數據只能是該連接的租戶數據。

行級隔離不是簡單地加where條件篩選指定的租戶,因為無法不免有漏掉條件的可能。使用行級別安全(Row Level Security,RLS),即使不加租戶相關條件,租戶也只能操作自己的數據,達到租戶之間的數據安全隔離。目前Oracle、SQL Server、PostgreSQL 等都支持行級別安全。

使用RLS也可能存在數據傾斜,導致數量差異大的租戶操作SQL的執行計劃不準確,該如何處理呢?前面提到過混合場景和分區方案就是其中的解決方案。數據庫少的租戶可使用RLS方案,數據量大的租戶可以使用數據庫或schema方案。另外還可以使用分區方案,分區方案只是輔助RLS解決數據傾斜問題,不作為正式的租戶隔離方案。對于數據量大的租戶,可以將表進行分區,一個或多個分區存儲大租戶的數據,另一個分區存儲數據量少的租戶。


?
 多租戶實戰案例  
?

我這里介紹兩種案例:

  • SQL Server 使用視圖進行“行級隔離”

  • PostgreSQL使用行級安全(RLS)功能進行隔離

  • SQL Server 使用視圖進行行級隔離

SQL Server有真正的行級隔離方案,但這里我介紹的是另一種非正式的隔離方案,可以說也是一種通用方案,在其他數據庫都可以實現。

該方案在視圖中添加where條件,識別當前上下文環境的登錄用戶ID,到表中進行篩選。以下是一個完整的簡單示例。

-- 創建測試表CREATE TABLE dbo.demo_tab(	id uniqueidentifier NOT NULL DEFAULT (newsequentialid()),	tenant_id varbinary(85) NOT NULL DEFAULT (suser_sid()),	order_id bigint NOT NULL,	CONSTRAINT pk_demo_tab PRIMARY KEY CLUSTERED (tenant_id ASC,id ASC))GO-- 創建視圖CREATE VIEW dbo.v_demo_tabASSELECT * FROM dbo.demo_tab WHERE tenant_id = SUSER_SID()GO-- 插入5行數據(DML 只操作自己的數據)INSERT INTO dbo.demo_tab(order_id) select round(rand()*1000,0)GO 5
/*UPDATE dbo.v_demo_tab SET order_id = 1GODELETE FROM dbo.v_demo_tabGO*/SELECT * FROM dbo.v_demo_tab -- SELECT * FROM dbo.demo_tab
--添加字段后刷新視圖ALTER TABLE dbo.demo_tab ADD order_name VARCHAR(10)GOEXEC sp_refreshview 'dbo.V_DemoTab';GO
-- 也可以切換為指定用戶進行操作EXECUTE AS USER = 'huang';GOSELECT SUSER_SID(),SUSER_NAME()GO

應用程序只操作視圖,每張視圖背后都對應一張表。由于視圖已經隔離了用戶數據,任何用戶都不可能操作其他用戶的數據。如果表結構發生變化,可以通過存儲過程sp_refreshview刷新視圖定義。這是我以前公司用的一種租戶隔離方案,類似RLS。當前你也可以使用SQL Server 官方真正的“行級別安全性(RLS)”設計租戶隔離。

  • PostgreSQL使用行級隔離RLS

另一個實際的案例就是PostgreSQL的“行級安全策略(RLS)”。每張表都存在字段tenant_id,存儲租戶id,租戶id的管理可以從平臺數據庫中獲取。

# 創建容器環境docker run -d --name pg5401 -e POSTGRES_PASSWORD=123456 -p 5401:5432 postgres:latestapt install postgresql-client
# pg管理員登錄創建測試數據庫及用戶psql -h 127.0.0.1 -p 5401 -U postgres -W -d postgrescreate database mydb with encoding = 'utf8';create user myrole password 'myrole' login;\c mydbgrant all privileges on all tables in schema public to myrole;grant all on schema public TO myrole;

# pg用戶登錄,創建對象及啟用行級安全psql -h 127.0.0.1 -p 5401 -U myrole -W -d mydb
create table product(tenant_id varchar(50) not null,id int,name varchar(50));
insert into product values('10000',1,'10000'),('10001',2,'10001'),('10002',3,'10002'),('10003',4,'10003'),('10004',5,'10004'),('10000',6,'10000'),('10000',7,'10000'),('10002',8,'10002'),('10000',9,'10000'),('10004',10,'10004');
select * from product;
-- 針對表啟用行級安全策略alter table product enable row level security;
-- 針對表創建策略drop policy if exists product_tenant_isolation_policy on product;create policy product_tenant_isolation_policy on product using(tenant_id = current_setting('app.tenant_id'));\d product
-- 強制所有用戶使用 RLS,否則表 Owner 的用戶會繞過行安全性alter table product force row level security;
-- 具有該屬性的超級用戶和角色 BYPASSRLS 在訪問表時始終繞過行安全系統 (指定用戶繞過 RLS,可訪問全表數據)-- alter user my_admin with bypassrls;  
-- 重新連接操作psql -h 127.0.0.1 -p 5401 -U myrole -W -d mydbselect * from product;-- ERROR:  unrecognized configuration parameter "app.tenant_id"
set app.tenant_id = '10000';show app.tenant_id;-- reset app.tenant_id;
insert into product(tenant_id,id,name)values('10004',99,'kk');update product set name='kk';-delete from product;
# 或者直接命令行操作export PGPASSWORD='myrole'env PGOPTIONS="-c app.tenant_id=10000" psql -h 127.0.0.1 -p 5401 -U myrole -d mydb -c "select * from product;"

我們定義策略參數app.tenant_id,當租戶連接數據庫時,需要設置app.tenant_id的值。當訪問表的時候,rls策略將獲取上下文信息app.tenant_id的參數值,相當于將“tenant_id=?” 拼接到where條件中,與前面的“SQL Server 使用視圖進行行級隔離”有相似之處。


?
   總結  
?

數據庫級別與schema級別的數據隔離比較好理解,對租戶來說隔離性好,但不適合大量租戶的情況。一個企業的租戶數據量差異比較大,這就需要考慮產品是否真的符合租戶的業務場景。也就是說,企業內部需要對發布多個版本或多個產品滿足不同的客戶需求,在多租戶的數據庫設計方面也評估使用不同的數據隔離方案。

我們除了在數據庫選型、租戶架構選型之外,也要考慮云資源成本。客戶獲取成本、 客戶生命周期價值、月度經常性收入、 客戶流失率 是SaaS提供商特別關注的一些關鍵績效和業務指標。這些指標對于業務優化和增長至關重要,并且它們提供了SaaS公司財務狀況的全面概覽。針對租戶資源的成本占比、租戶均值成本等,評估租戶開銷是否超出了計劃。


閱讀原文:https://mp.weixin.qq.com/s/Ba_KqWY5a_SAKN4RvPqH5Q


該文章在 2025/1/25 9:13:25 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

主站蜘蛛池模板: 红姐统一彩色印刷图库(官方)网站 | 香港2025全年资料免费看 | 2025澳门斯诺克大师赛 | 澳门今期正版四不像图片今晚 | 2025澳门今晚开奖记录 | 澳门跑狗376969资料最新版 | 天中图库独送一注 | 2025新澳天天开好彩大全 | 管家婆2025正版资料 | 香港特码诗提供(2025已更新 | 澳门今晚上开什么号码了 | 今期跑狗图高清自动更新 | 2025年正版资料免费大全挂牌 | 看香港精准资料免费公开 | 4949最快开奖结果澳门 | 新澳2025管家婆资料 | 管家婆一码一肖资料大 | 今晚开什么特马2025年3 | 三五图库大全 | 管家婆一肖一码最准资料 | 管家婆今期免费资料大全 | 澳门彩今晚必中一肖一码 | 2025澳门天天六开彩开奖结果 | 澳门管家婆app免费下载安装 | 香港宝典六库图下载 | 2025年香港6合开奖结 | 新澳天天免费好彩六肖 | 香港数据中心市场规模将突破40亿美元 | 2025澳门精准正版免费绿色版 | 水果奶奶心水主论坛 | 2025年新澳门正版资料大全免费 | 正版免费全年资料大全 | 2025年澳门六开彩开 | 香港免费宝典资料大全游戏大厅下 | 2025管家婆资料正版大全澳门 | 49图库最新版下载v4.4.6 | 2025香港管家婆一肖一码100正确 | 2025新澳门天天开奖攻略 | 澳门六开彩天天正版资料2025年 | 新澳门资料大全免费安装 | 香港正版全年资料,天下图 香港正版全年免费资料官方网站ios |