SaaS是Software-as-a-Service(軟體即服務)的簡稱,這邊具體的解釋不介紹。 多租戶的系統可以應用這種模式的思想,將思想融入到系統的設計之中。 一、多租戶的系統,目前在資料庫存儲上,一般有三種解決方案: 1.獨立資料庫 2.共用資料庫,隔離數據架構 3.共用資料庫,共用數據架構 ...
SaaS是Software-as-a-Service(軟體即服務)的簡稱,這邊具體的解釋不介紹。
多租戶的系統可以應用這種模式的思想,將思想融入到系統的設計之中。
一、多租戶的系統,目前在資料庫存儲上,一般有三種解決方案:
1.獨立資料庫
2.共用資料庫,隔離數據架構
3.共用資料庫,共用數據架構
這裡我就系統的實際需求情況,選擇了第二種解決方案,下麵簡單介紹下
二、資料庫我選用的是SqlServer,因為SqlServer自帶的Schema剛好符合這種需求。至於Mysql,Oracle的Schema應該是有不同的設計,不同於SqlServer,這裡我就只針對SqlServer而言。
如果你百度SqlServer的Schema方面的知識介紹,會有不少的Schema的語法介紹,但是很少有一套sql腳本針對多租戶設計的,我在這裡做個整理。
1.創建資料庫
create database
SingleDbMultipleSchema
go
2.切換到目標資料庫
use SingleDbMultipleSchema
go
3.創建用戶並綁定登錄名並賦予預設schema
create login UserTemp with password = N'admin@123'
create user UserTemp for login UserTemp with default_schema = UserTempSchema
go
4.創建schema並授權預設用戶
create schema UserTempSchema authorization UserTemp
go
5.補充建表許可權(PS:這句sql找的好苦。。。)
grant create table to UserTemp
go
6.給用戶分配schema許可權(使用到存儲過程的許可權分配時,使用schema分配此類許可權)
GRANT INSERT, SELECT, UPDATE, DELETE, EXECUTE, REFERENCES
ON SCHEMA:: UserTempSchema
TO UserTemp
go
7.最後附上常用刪除Sql語句(格式如下)
drop table schtable
drop user [User_tmp]
drop user testuser2
drop login [User_tmp]
drop login testlogin2
drop schema User_tmpSchema
以dbo用戶(sa登錄名)新建一張表table_1,預設產生dbo.table_1,並插入一條數據,如下圖
切換用戶,使用剛剛創建的用戶UserTemp登錄,新建一張表table_1,產生UserTempSchema.table_1,並插入一條數據,如下圖
以UserTemp用戶,測試查詢語句,結果如下,很顯然雖然selcet語句沒指定Schema,但是查詢到了我們想要的結果
切換到dbo用戶(sa登錄名),測試查詢語句,結果如下,雖然沒指定schema名稱,但是依舊是我們想要的結果
上面的sql腳本按步驟執行,執行1-5即可,後面的sql可根據自己的需求額外使用。
本篇暫時只做一個多租戶系統在資料庫存儲層次上的設計(SqlServer下“單資料庫多Schema模式”)的環境搭建事例
(● ̄(エ) ̄●)。。。。。。