进销存系统数据隔离
需要隔离的表
中文名 | 英文名 | 是否需要隔离 | 原因 |
---|---|---|---|
基础数据操作记录表 | databasechangelog | 是 | 用户不能看到和自己毫无关系的数据 |
基础数据操作锁定记录表 | databasechangeloglock | 是 | 各用户锁定自己相关的数据 |
账户信息表 | jsh_account | 是 | 每个用户主体都应该是独立的账户 |
财务主表 | jsh_accounthead | 是 | 每个用户主体都应该是独立的财务账户 |
财务子表 | jsh_accountitem | 是 | 每个用户主体都应该是独立的财务账户 |
应用表 | jsh_app | 是 | 支持每个用户扩展定制自己的应用 |
资产记录表 | jsh_asset | 是 | 暂时无用,但也需要隔离 |
资产类型表 | jsh_assetcategory | 是 | 暂时无用,但也需要隔离 |
资产信息表 | jsh_assetname | 是 | 暂时无用,但也需要隔离 |
仓库表 | jsh_depot | 是 | 各自的仓库是独立的 |
单据主表 | jsh_depothead | 是 | 每个用户都有自己的订单 |
单据子表 | jsh_depotitem | 是 | 每个用户都有自己的订单详情 |
功能模块表 | jsh_functions | 是 | 功能定制个性化 |
收支项目表 | jsh_inoutitem | 是 | 和用户相关 |
操作日志 | jsh_log | 是 | 和用户相关 |
产品表 | jsh_material | 是 | 和用户相关 |
产品类型表 | jsh_materialcategory | 是 | 和用户相关 |
产品扩展字段表 | jsh_materialproperty | 是 | 和用户相关 |
经手人表 | jsh_person | 是 | 和用户相关 |
角色表 | jsh_role | 是 | 和用户相关 |
供应商 客户信息表 | jsh_supplier | 是 | 和用户相关 |
系统参数表 | jsh_systemconfig | 是 | 和用户相关 |
多单位表 | jsh_unit | 是 | 和用户相关 |
用户表 | jsh_user | 是 | 和用户相关 |
用户 角色 模块关系表 | jsh_userbusiness | 是 | 和用户相关, 支持用户模板 |
序列号表 | jsh_serial_number | 是 | 和用户相关 |
sequence 表 | tbl_sequence | 否 | 全局统一,便于查询 |
机构表 | jsh_organization | 是 | 和用户相关 |
机构用户关系表 | jsh_orga_user_rel | 是 | 和用户相关 |
隔离的方式
每一张表都会有一个租户 id,每一次操作都会写入对应的租户 id,以保证数据的隔离识别性。
-- ----------------------------
-- 时间:2019年3月18日
-- version:1.0.11
-- 此次更新
-- 1、批量增加大部分表的tenant_id租户字段
-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
-- ----------------------------
alter table jsh_account add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_accounthead add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_accountitem add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_asset add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_assetcategory add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_assetname add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_depot add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_depothead add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_depotitem add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_inoutitem add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_log add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_material add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_materialcategory add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_orga_user_rel add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_organization add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_person add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_role add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_serial_number add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_supplier add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_systemconfig add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_unit add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_user add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
-- ----------------------------
-- 时间:2019年4月24日
-- version:1.0.14
-- 此次更新
-- 1、批量增加部分表的tenant_id租户字段
-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
-- ----------------------------
alter table databasechangelog add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table databasechangeloglock add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_app add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_functions add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_materialproperty add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_userbusiness add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
注册时初始化
注册时需要给注册用户创建一个独立的空间(数据初始化)。
需要初始化的数据
中文名 | 英文名 | 需要初始化的原因 |
---|---|---|
应用表 | jsh_app | 支持每个用户扩展定制自己的应用 |
功能模块表 | jsh_functions | 功能定制个性化 |
产品扩展字段表 | jsh_materialproperty | 和用户相关,每个用户可以修改 |
角色表 | jsh_role | 角色模板定义 |
用户表 | jsh_user | 注册用户信息写入 |
用户 角色 模块关系表 | jsh_userbusiness | 调用用户模板 |
注册时验证登录名和用户名是否存在
登录名保持全局唯一,不然两个公司的员工用相同的登录名无法识别。
用户名同一个租户范围内内唯一
添加新用户需要对新用户进行数据范围界定
添加用户数据范围界定
添加新用户时,该用户可以使用的数据空间需要做一个界定,最大范围一定是创建该用户的租户所能达到的范围,但最小范围是什么呢?
中文名 | 英文名 | 需要初始化的原因 |
---|---|---|
用户表 | jsh_user | 和添加该用户的用户相同的租户 id |
添加新用户登录名和用户名校验
登录名保持全局唯一,不然两个公司的员工用相同的登录名无法识别。
用户名同一个租户范围内内唯一
sequence 表
sequence 表中用于生成单据编号的 depot_number_seq 取值范围为 -9223372036854775808 - 9223372036854775807
在这样的大数量级下,可以不做隔离,但是用户多起来之后会达到 mysql 的写入性能瓶颈,在那种情况下就需要考虑用特殊的方式去维护。
对于数据隔离,我感觉所有的数据都应该隔离,每一个注册的用户都是独立一片空间,所有的数据都不会和其他注册的用户相交叉