权限管理、用户权限系统、开源用户权限系统、信息化建设标准基础数据管理平台
代码改变世界

通用用户权限管理系统组件V3.8功能改进说明 - 对用户表BaseUser的拆分优化

  通用C#系统架构  阅读(1517)  评论(4编辑  收藏  举报

      最近维护公司的数据库,用户表里的数据有1000多万条,对用户表的并发处理非常多,用户表甚至成了整个系统的瓶颈,经过这次优化维护经验,深深体会大用户表的职责不能过多,应该拆分的需要拆分;虽然写程序需要处理起来很痛苦,但是下定决心还是突破一下常规的设计。

     1:用户名,密码尽量不要保存在一起,就算用户表被客户攻破了,也不知道密码在哪里。
     2:导入导出数据时,尽量不要把用户名、密码全导出出来。
     3:没有权限的人就是可以看用户表,也不能操作密码表。
     4:可以按每个账户设置是否进行IP地址访问限制。
     5:可以按用户设置,是否允许账户多用户同时登录,还是只能是单用户登录系统。
     6:用户表,不要太庞大,方便别人扩展,例如你已经有N多列了,别人都不敢扩展了,字段太超级多了也不好。
     7:用户安全管理组件,方便集成,不要修改原来的用户表过多信息,可以增加一个表,对原来用户表的变动不要太多,方便集成。
     8:用户表需要事务处理的部分与其他非事务处理的部分可以分开了,数据库的瓶颈、压力分散了,特别是跟一些金额相关的处理部分。

     信息系统建设,随着经验的增长,不断的有表被拆分,合并,只有经得起修改的表,才是设计合理的,有生命力的表;随着信息化系统建设的规模,并发的压力第表的设计也有很多苛刻的要求,当然要要充分考虑数据安全因素。

     设计良好的系统底层变了,业务逻辑不用变,底层变了调用的部分不变,经得各种折磨的基础框架才是良好的框架。这是最近几年对通用权限管理系统组件做的最大的一次改动,使得系统有了能支持千万级别用户的数据压力的牢固基础。

      若不喜欢增强的信息管理部分,直接删除掉,也影响不大,稍微修改一下,系统也可以平滑运行了,想怎么改就可以怎么改。一个系统是否好用看他是否有足够的重复利用的价值,也看他是否经得起各种业务系统的需求考验。代码是否值得长期维护改进、是否将来也有利用的价值,参考的价值。

  现在拆成2个个表了,可以模仿加表,也可以省事加字段,不会有很邪恶的感觉了,应为在已经有很多字段的表上再加字段,太邪恶了。

     增加表的SQL参考如下:

USE [UserCenterV38]
GO
 
SET ANSI_NULLS ON
GO
 
SET QUOTED_IDENTIFIER ON
GO
 
CREATE TABLE [dbo].[BaseUserLogOn](
    [Id] [int] NOT NULL,
    [UserFrom] [nvarchar](50) NULL,
    [UserPassword] [nvarchar](100) NULL,
    [AllowStartTime] [smalldatetime] NULL,
    [AllowEndTime] [smalldatetime] NULL,
    [LockStartDate] [smalldatetime] NULL,
    [LockEndDate] [smalldatetime] NULL,
    [FirstVisit] [smalldatetime] NULL,
    [PreviousVisit] [smalldatetime] NULL,
    [LastVisit] [smalldatetime] NULL,
    [ChangePasswordDate] [smalldatetime] NULL,
    [CommunicationPassword] [nvarchar](100) NULL,
    [SignedPassword] [nvarchar](100) NULL,
    [PublicKey] [nvarchar](200) NULL,
    [MultiUserLogin] [int] NULL,
    [LogOnCount] [int] NOT NULL,
    [PasswordErrorCount] [int] NOT NULL,
    [UserOnLine] [int] NOT NULL,
    [CheckIPAddress] [int] NOT NULL,
    [IPAddress] [nvarchar](50) NULL,
    [MACAddress] [nvarchar](50) NULL,
    [OpenId] [nvarchar](50) NOT NULL,
    [Question] [nvarchar](50) NULL,
    [AnswerQuestion] [nvarchar](200) NULL,
    [CreateOn] [smalldatetime] NULL,
    [CreateUserId] [nvarchar](20) NULL,
    [CreateBy] [nvarchar](20) NULL,
    [ModifiedOn] [smalldatetime] NULL,
    [ModifiedUserId] [nvarchar](20) NULL,
    [ModifiedBy] [nvarchar](20) NULL,
 CONSTRAINT [PK_BaseUserLogOnInfo] PRIMARY KEY CLUSTERED
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
 
GO
 
ALTER TABLE [dbo].[BaseUserLogOn] ADD  CONSTRAINT [DF_BaseUserLogOn_MultiUserLogin]  DEFAULT ((0)) FOR [MultiUserLogin]
GO
 
ALTER TABLE [dbo].[BaseUserLogOn] ADD  CONSTRAINT [DF_BaseUserLogOn_CheckIPAddress]  DEFAULT ((0)) FOR [CheckIPAddress]
GO
 
ALTER TABLE [dbo].[BaseUserLogOn] ADD  CONSTRAINT [DF_BaseUserLogOn_OpenId]  DEFAULT (newid()) FOR [OpenId]
GO

 

    把原先表里的数据导入大这个表里,然后把重复的字段删除就可以了。这样原先的用户表变得轻巧了很多,心里也舒坦了,安全性也提高了N多,好爽。、用户名与密码没保存在同一个表里,应该是不符合很多人习惯,但是大家多思考一下,就可以慢慢都接纳了,非常不错的打破传统思维的一个小创新。

 

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2011-04-22 繁多的新技术让我这个老IT也感觉到很压抑,需要学会放弃学会放松自己,不能跟自己过不去了
2010-04-22 走火入魔.NET快速开发平台架构与老外的开源架构PK与老外一比高低
2009-04-22 控制菜单访问权限的2种思想


C# ASP.NET 通用权限设计、通用权限管理、通用权限组件、单点登录、集中式权限管理、统一授权体系、分级管理分级授权


微信扫一扫加好友



点击右上角即可分享
微信分享提示