SaaS模式应用之多租户系统开发(单数据库多Schema设计)
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模式”)的环境搭建事例