• 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模式”)的环境搭建事例

          (● ̄(エ) ̄●)。。。。。。

    你的山楂能分点给我吗?
  • 相关阅读:
    网站建设问题
    14.2.2.1 InnoDB Lock Modes
    14.2.2 The InnoDB Transaction Model and Locking InnoDB 事务模型和锁定
    Python_编程特色
    Python_编程特色
    Tk日志查看程序
    Linux_进程管理&计划任务
    Linux_进程管理&计划任务
    严重: StandardWrapper.Throwable
    Java导出Excel三表头
  • 原文地址:https://www.cnblogs.com/Txy-Net/p/SingleDbMultipleSchema01.html
Copyright © 2020-2023  润新知