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

  • 相关阅读:
    java图片裁剪原理
    代码整洁之道
    vue.js devtools安装
    Convert DateTime To Varchar with multiple Styles
    Sql Server为数值变量添加删除前导后缀(翻译)
    asp.net ckeditor 3.6.2 + ckfinder 2.1 上传图片
    转摘 IE6 动态创建 iframe 无法显示的 bug
    sql server output parameter
    windows7 无法删除文件夹 提示需要SYSTEM权限
    Kooboo 全文索引研究
  • 原文地址:https://www.cnblogs.com/xujie520/p/12343633.html
Copyright © 2020-2023  润新知