CN118035985A - 一种基于数据模块化的mis系统 - Google Patents
一种基于数据模块化的mis系统 Download PDFInfo
- Publication number
- CN118035985A CN118035985A CN202410434695.8A CN202410434695A CN118035985A CN 118035985 A CN118035985 A CN 118035985A CN 202410434695 A CN202410434695 A CN 202410434695A CN 118035985 A CN118035985 A CN 118035985A
- Authority
- CN
- China
- Prior art keywords
- authority
- user
- rights
- acl
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000012795 verification Methods 0.000 claims abstract description 102
- 230000014509 gene expression Effects 0.000 claims abstract description 92
- 238000007726 management method Methods 0.000 claims description 90
- 238000004458 analytical method Methods 0.000 claims description 79
- 238000012545 processing Methods 0.000 claims description 43
- 230000004044 response Effects 0.000 claims description 35
- 230000007246 mechanism Effects 0.000 claims description 32
- 238000000034 method Methods 0.000 claims description 32
- 230000008569 process Effects 0.000 claims description 23
- 238000011068 loading method Methods 0.000 claims description 17
- 230000003068 static effect Effects 0.000 claims description 13
- 239000000284 extract Substances 0.000 claims description 12
- 230000004048 modification Effects 0.000 claims description 12
- 238000012986 modification Methods 0.000 claims description 12
- 238000012217 deletion Methods 0.000 claims description 11
- 230000037430 deletion Effects 0.000 claims description 11
- 230000008859 change Effects 0.000 claims description 10
- 238000007689 inspection Methods 0.000 claims description 9
- 238000013507 mapping Methods 0.000 claims description 7
- 230000006399 behavior Effects 0.000 claims description 6
- 238000006243 chemical reaction Methods 0.000 claims description 6
- 238000003672 processing method Methods 0.000 claims description 4
- 230000008275 binding mechanism Effects 0.000 claims description 3
- 238000004364 calculation method Methods 0.000 claims description 3
- 238000004806 packaging method and process Methods 0.000 claims description 3
- 239000002253 acid Substances 0.000 claims 1
- 238000001914 filtration Methods 0.000 description 7
- 230000006870 function Effects 0.000 description 7
- 230000005540 biological transmission Effects 0.000 description 6
- 238000010586 diagram Methods 0.000 description 6
- 230000000670 limiting effect Effects 0.000 description 5
- 230000008520 organization Effects 0.000 description 5
- 239000000306 component Substances 0.000 description 4
- 230000000694 effects Effects 0.000 description 4
- 238000012550 audit Methods 0.000 description 3
- 238000000586 desensitisation Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000002955 isolation Methods 0.000 description 3
- 238000005457 optimization Methods 0.000 description 3
- 230000000644 propagated effect Effects 0.000 description 3
- 230000002829 reductive effect Effects 0.000 description 3
- 238000003860 storage Methods 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 125000002015 acyclic group Chemical group 0.000 description 2
- 230000002776 aggregation Effects 0.000 description 2
- 238000004220 aggregation Methods 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000011156 evaluation Methods 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 230000002688 persistence Effects 0.000 description 2
- 230000002085 persistent effect Effects 0.000 description 2
- 241000508269 Psidium Species 0.000 description 1
- 239000000956 alloy Substances 0.000 description 1
- 229910045601 alloy Inorganic materials 0.000 description 1
- 230000003542 behavioural effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000008094 contradictory effect Effects 0.000 description 1
- 239000008358 core component Substances 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000029087 digestion Effects 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000011049 filling Methods 0.000 description 1
- 238000003780 insertion Methods 0.000 description 1
- 230000037431 insertion Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000036961 partial effect Effects 0.000 description 1
- 238000000899 pressurised-fluid extraction Methods 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000035945 sensitivity Effects 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2246—Trees, e.g. B+trees
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2255—Hash tables
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
- G06F21/74—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information operating in dual or compartmented mode, i.e. at least one secure mode
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Databases & Information Systems (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Computer Security & Cryptography (AREA)
- Computational Linguistics (AREA)
- Storage Device Security (AREA)
Abstract
本申请公开了一种基于数据模块化的MIS系统,包括:基于RBAC模型配置基础数据,并为每个需要控制权限的对象创建访问控制列表ACL;采用哈希表和树结构组织和索引元数据;接收用户的访问请求,获取访问请求中的用户ID和操作类型,根据访问请求对应的对象的ACL和用户的权限条目,结合权限表达式中定义的规则和约束条件,判断用户是否具有相应权限;根据权限校验结果,允许或拒绝用户的访问请求;对允许执行的访问请求,根据请求类型和权限规则生成SQL语句;在生成的SQL语句中,根据权限规则添加相应的条件和过滤器,以限定用户只能访问和操作被授权的数据;针对现有技术中MIS系统中权限配置不灵活的问题,本申请提高了权限配置的灵活性。
Description
技术领域
本申请涉及数据处理技术领域,特别涉及一种基于数据模块化的MIS系统。
背景技术
随着信息技术的快速发展和企业信息化的不断深入,管理信息系统(MIS)已广泛应用于企业的生产、管理、决策等各个方面。MIS通过对企业内部各种数据和信息的采集、存储、处理和分析,为企业的运营管理提供了有力的支持和保障。然而,在MIS的应用过程中,权限管理一直是一个关键而又棘手的问题。
传统的MIS系统中,权限管理通常采用基于用户和角色的权限控制模型(RBAC),将用户划分为不同的角色,每个角色赋予一定的权限。用户通过被分配到特定角色来获得相应的权限。然而在RBAC模型下,一旦用户的角色发生变化,就需要重新配置用户的权限。当用户数量较大,角色种类较多时,权限的重新配置将是一项非常繁琐和耗时的工作。此外,角色和权限之间的关系通常是静态的,无法根据实际情况动态调整。
在相关技术中,比如中国专利文献CN115422575A中提供了一种实现MIS系统行数据权限控制的方法,通过系统自带的元数据管理模块,管理需要控制权限的表或索引的基本信息;再利用系统权限规则管理功能配置权限控制对象和被控制对象的规则关系;在插入或删除表数据时,首先根据当前登录用户的信息包括用户、角色、组织查询权限控制对象的权限规则,生成该数据的条件操作语句,然后填充到具体的操作语句的条件中;建立权限关系数据表。但是该方案中,通过系统权限规则管理功能来配置权限控制对象和被控制对象之间的规则关系。这种配置方式是预先定义的,缺乏动态性和灵活性。当需要添加新的权限控制对象或修改现有的规则关系时,需要对系统进行修改和重新配置。
发明内容
1.要解决的技术问题
针对现有技术中存在的MIS系统中权限配置不灵活的问题,本申请提供了一种基于数据模块化的MIS系统,通过RBAC模型和ACL相结合的方式等,提高了权限配置的灵活性。
2.技术方案
本申请的目的通过以下技术方案实现。
本说明书实施例提供一种基于数据模块化的MIS系统,包括:管理模块,基于RBAC模型配置基础数据,并为每个需要控制权限的对象创建访问控制列表ACL,在ACL中为权限控制对象分配权限;将配置的基础数据和ACL存储到权限数据库中;其中,基础数据包含用户、角色和权限;缓存模块,采用哈希表和树结构组织和索引元数据,其中,元数据包含用户、角色、权限、ACL和权限表达式;在系统启动时,从权限数据库中加载元数据,并将加载的元数据缓存到内存中;当管理模块更新权限配置时,缓存模块从权限数据库中增量加载更新后的元数据;其中,权限表达式用于定义权限规则和约束条件;校验模块,接收用户的访问请求,获取访问请求中的用户ID和操作类型,根据访问请求对应的对象的ACL和用户的权限条目,结合权限表达式中定义的规则和约束条件,判断用户是否具有相应权限;根据权限校验结果,允许或拒绝用户的访问请求;执行模块,对允许执行的访问请求,根据请求类型和权限规则生成SQL语句;在生成的SQL语句中,根据权限规则添加相应的条件和过滤器,以限定用户只能访问和操作被授权的数据;执行模块执行生成的SQL语句,并将执行结果返回给用户。
其中,RBAC模型是一种基于角色的访问控制模型。在RBAC模型中,权限与角色相关联,用户通过被分配适当的角色来获得对应的权限。RBAC模型简化了权限的管理和分配,通过对角色的定义和用户与角色的关联,实现了对用户权限的集中控制。RBAC模型包含用户(User)、角色(Role)、权限(Permission)三个基本要素,以及用户-角色关联(User-RoleAssignment)和角色-权限关联(Role-Permission Assignment)两种关系。RBAC模型支持角色继承和角色层次,提供了更灵活的权限管理机制。
其中,ACL是一种基于对象的访问控制列表。ACL定义了对特定对象(如文件、目录、数据库表等)的访问权限。每个对象都有一个关联的ACL,用于控制对该对象的访问。ACL由一组访问控制项(Access Control Entry,ACE)组成,每个ACE定义了一个主体(如用户或角色)对对象的访问权限(如读、写、执行等)。当主体请求访问对象时,系统会检查对象的ACL,根据ACE的定义判断主体是否具有相应的权限。ACL提供了细粒度的访问控制,可以针对不同的对象设置不同的权限规则。
其中,哈希表和树结构是两种常用的数据组织和索引方式,用于快速查找和访问数据。哈希表使用哈希函数将键(Key)映射到表中的特定位置,通过键的哈希值可以直接定位到对应的值(Value)。哈希表提供了平均O的查找时间复杂度,适用于快速查找和访问数据。在权限管理中,可以使用哈希表来组织和索引用户、角色、权限等元数据,通过用户ID、角色ID、权限ID等作为键,快速获取对应的元数据信息。树结构是一种层次化的数据组织方式,常见的树结构有二叉树、平衡树、B树等。树结构通过父子关系将数据组织成树状结构,每个节点可以有零个或多个子节点。树结构提供了高效的查找、插入、删除操作,时间复杂度通常为O(logn)。在权限管理中,可以使用树结构来组织和索引ACL、权限表达式等层次化的数据,通过树的遍历和查找,快速定位和访问所需的权限信息。
其中,增量加载是一种数据加载策略,用于在数据发生变化时,只加载变化的部分数据,而不是重新加载整个数据集。增量加载可以提高数据加载的效率,减少不必要的数据传输和处理。在权限管理中,当管理模块更新权限配置时,缓存模块可以采用增量加载的方式,只从权限数据库中加载更新后的元数据,而不是重新加载所有元数据。增量加载可以通过比较数据的时间戳、版本号等标识,确定需要更新的数据范围,从而最小化数据加载的开销。
其中,权限数据库是存储权限相关数据的专用数据库。它存储了系统的用户信息、角色信息、权限信息、ACL、权限表达式等元数据。权限数据库提供了权限数据的持久化存储,确保权限数据的安全性和一致性。管理模块通过权限管理接口,将配置的基础数据和ACL存储到权限数据库中。缓存模块在系统启动时,从权限数据库中加载元数据,并将其缓存到内存中,以提高权限验证的效率。权限数据库可以使用关系型数据库(如MySQL、Oracle等)或NoSQL数据库(如MongoDB、Cassandra等)来实现。
其中,过滤器是一种数据过滤机制,用于根据特定条件对数据进行筛选和过滤。在权限管理中,过滤器用于限定用户只能访问和操作被授权的数据。执行模块在生成SQL语句时,根据权限规则添加相应的条件和过滤器,对查询结果进行过滤。过滤器可以基于用户属性、角色属性、数据属性等多个维度进行定义,例如只允许用户访问自己创建的数据、只允许经理角色查看销售数据等。过滤器通过在SQL语句的WHERE子句中添加限制条件,或在查询结果中进行后置过滤,来实现对数据的访问控制。
其中,权限条目是ACL中的一个基本单位,用于定义主体对对象的访问权限。每个权限条目包含主体标识(如用户ID、角色ID)、对象标识(如数据库表名、文件路径)以及相应的权限(如读、写、执行等)。权限条目定义了主体和对象之间的权限关系,决定了主体对对象的访问能力。在权限验证过程中,校验模块根据访问请求对应的对象的ACL和用户的权限条目,判断用户是否具有相应的权限。权限条目可以通过权限管理接口进行配置和管理,存储在权限数据库的ACL表中。
进一步的,管理模块,包括:用户管理单元,管理用户账户的创建、修改和删除,并将用户信息存储到权限数据库的用户表中;角色管理单元,管理角色的创建、修改和删除,并将角色信息存储到权限数据库的角色表中;权限管理单元,管理权限的创建、修改和删除,权限包含对数据对象的操作权限和对功能模块的访问权限,并将权限信息存储到权限数据库的权限表中;访问控制列表ACL单元,为每个需要控制权限的对象创建ACL,并在ACL中为权限控制对象分配权限;ACL中定义了主体对客体的访问权限,主体包含用户、角色或实体;客体包含数据对象、功能模块或资源;将配置的ACL存储到权限数据库的ACL表中;用户角色分配单元,将用户分配给一个或多个角色,角色用于对用户进行分类和管理;相同角色的用户配置相同的权限;将用户与角色的关联关系存储到权限数据库的用户角色表中;角色权限分配单元,将权限分配给一个或多个角色,角色通过权限获得对资源的访问和操作;将角色与权限的关联关系存储到权限数据库的角色权限表中。
其中,角色与权限的关联关系定义了角色拥有的权限集合,决定了角色对资源的访问和操作能力。在RBAC模型中,权限不直接分配给用户,而是分配给角色。用户通过被分配适当的角色,继承角色所拥有的权限,从而获得对资源的访问和操作权限。通过角色权限表,角色权限分配单元可以高效地管理和维护角色与权限的关联关系。当角色的权限发生变化时,角色权限分配单元会更新角色权限表中的记录,确保权限配置的持久化和一致性。在权限验证过程中,校验模块会根据用户所属的角色,查询角色权限表,获取用户继承的权限集合。通过角色与权限的关联关系,校验模块可以判断用户是否具有访问和操作资源的权限,从而实现基于角色的权限控制。
进一步的,为每个需要控制权限的对象创建ACL,包括:根据预定义的ACL模板生成ACL数据结构,并为ACL数据结构分配唯一的标识;其中,ACL数据结构包含主体、客体和权限规则;配置权限的规则属性,规则属性包含主体类型、主体标识、客体类型、客体标识、权限类型和约束条件;将配置的权限转换为权限表达式,将权限表达式关联到生成的ACL数据结构中;为ACL数据结构中的主体和客体创建唯一标识,并将创建的唯一标识关联到ACL数据结构中;将主体和客体按照预定义的类型进行分类,得到主体和客体的层次关系;其中,层次关系采用有向无环图DAG表示,图中父节点表示上级对象,子节点表示下级对象。
其中,主体是指访问和操作系统资源的实体,通常指代用户、角色或其他可以发起访问请求的对象。在权限控制中,主体是权限管理的核心对象之一,权限规则定义了主体对资源的访问和操作权限。主体可以是个人用户,也可以是代表一组用户的角色或组。每个主体都有一个唯一的标识,如用户ID、角色ID等,用于在权限验证过程中识别和区分不同的主体。主体的属性和层次关系可以用于实现更细粒度和灵活的权限控制。
其中,客体是指被访问和操作的系统资源,如数据对象、功能模块、文件、设备等。在权限控制中,客体是权限管理的另一个核心对象,权限规则定义了主体对客体的访问和操作权限。每个客体都有一个唯一的标识,如数据表名、文件路径等,用于在权限验证过程中识别和定位特定的资源。客体的类型和层次关系可以用于实现更细粒度和灵活的权限控制,如对不同类型的数据对象应用不同的权限规则。
其中,权限规则是指定义主体对客体的访问和操作权限的规则。权限规则由主体、客体、权限类型和约束条件组成,用于控制主体对客体的访问和操作能力。权限规则可以基于主体的属性(如角色、部门等)、客体的属性(如数据类型、所有者等)以及其他约束条件(如时间、地点等)来定义。权限规则通过权限表达式来表示,并关联到ACL数据结构中。权限规则的配置和管理由权限管理单元负责,存储在权限数据库的权限表中。
其中,权限表达式是一种用于表示权限规则的形式化语言。权限表达式以简洁和结构化的方式描述了主体对客体的访问和操作权限,以及相关的约束条件。权限表达式通常包含主体标识、客体标识、权限类型、逻辑运算符和约束条件等元素,例如:“”user.role=='manager'ANDobject.type=='sales_data'ANDpermission=='read'“”。权限表达式可以使用变量、函数、逻辑运算符等构造复杂的权限规则,提供了灵活和强大的权限控制能力。权限表达式与ACL数据结构关联,用于在权限验证过程中快速评估权限规则。
其中,层次关系是指主体或客体之间的上下级关系。在权限控制中,主体和客体可以按照预定义的类型进行分类,形成层次化的结构。层次关系可以用于实现权限的继承和传播,简化权限的管理和配置。例如,在组织架构中,部门之间存在上下级关系,上级部门的权限可以继承给下级部门。再如,在文件系统中,目录之间存在父子关系,父目录的权限可以传播给子目录和文件。层次关系可以使用有向无环图(DAG)来表示,体现了主体和客体之间的包含和从属关系。
其中,有向无环图(DAG)是一种用于表示层次关系的数据结构。在DAG中,节点表示主体或客体,有向边表示节点之间的上下级关系。在权限控制中,DAG可以用于表示主体和客体的层次关系。通过在DAG中定义节点之间的边,可以表示主体或客体之间的继承和包含关系。例如,在角色层次中,父节点表示高级角色,子节点表示低级角色,高级角色的权限可以继承给低级角色。再如,在数据对象层次中,父节点表示数据集,子节点表示数据表,数据集的权限可以传播给数据表。DAG提供了一种灵活和高效的方式来表示和管理主体和客体的层次关系。通过遍历DAG,可以快速确定主体或客体之间的上下级关系,实现权限的继承和传播。同时,DAG的无环性保证了层次结构的合理性和一致性,避免了权限传播中的循环依赖问题。
进一步的,为每个需要控制权限的对象创建ACL,还包括:定义权限类型,并为权限类型分配唯一的位掩码,将分配的位掩码关联到ACL数据结构中;根据主体和客体之间的层次关系,根据传播算法,生成下级对象的ACL;其中,传播算法用于控制权限在层次关系中的继承和传播的深度;根据权限修改请求,采用事务处理机制ACID,对ACL数据结构进行更新;将生成和更新的ACL数据结构存储到权限数据库的ACL表中,并为ACL表生成唯一的版本号;当ACL表变更时,采用增量同步机制更新版本号。
其中,传播算法是指在层次关系中,根据上级对象的ACL自动生成下级对象ACL的算法。传播算法用于控制权限在层次关系中的继承和传播的深度,确保下级对象继承上级对象的相应权限。传播算法通常基于以下规则:继承规则:下级对象默认继承上级对象的权限,除非显式指定不继承。覆盖规则:下级对象可以通过显式配置来覆盖从上级对象继承的权限。阻断规则:在某个层次上设置阻断标志,可以阻止权限继续向下传播。传播算法根据这些规则,遍历层次关系中的对象,自动生成下级对象的ACL。传播算法可以递归地应用于多级层次结构,实现权限的自动继承和管理。传播算法的具体实现可以根据系统的需求和性能要求进行优化,如使用缓存机制、并行处理等技术。
其中,下级对象是指在层次关系中,位于当前对象下方的对象。在权限控制中,下级对象通常继承上级对象的权限,形成权限的传播和继承。例如,在组织架构中,员工是部门的下级对象,部门是公司的下级对象。员工继承部门的权限,部门继承公司的权限。下级对象的ACL通常由传播算法自动生成,无需手动配置。通过下级对象的概念,可以实现权限的分层管理和自动传播,简化权限的配置和维护。
其中,位掩码是一种用二进制位表示权限类型的技术。每个权限类型都被分配一个唯一的二进制位,通过设置对应的二进制位为1或0来表示是否具有该权限。例如,可以将读取权限分配为二进制位001,写入权限分配为二进制位010,执行权限分配为二进制位100。通过位掩码,可以使用一个整数值来表示多个权限的组合。例如,二进制值111表示同时具有读取、写入和执行权限。在ACL数据结构中,可以使用一个整数字段来存储位掩码,表示对象具有的权限类型。通过位掩码,可以方便地进行权限的赋值、修改和判断,提高权限验证的性能。
其中,事务处理机制ACID(Atomicity,Consistency,Isolation,Durability):事务处理机制ACID是指在数据库操作中,保证数据一致性和完整性的一组特性。ACID包括:原子性(Atomicity):事务中的所有操作要么全部执行成功,要么全部回滚,不存在部分成功的情况。一致性(Consistency):事务执行前后,数据库始终保持一致的状态,满足预定义的完整性约束。隔离性(Isolation):多个事务并发执行时,它们之间相互隔离,不会互相干扰。持久性(Durability):事务一旦提交成功,其结果就被持久化到数据库中,即使系统故障也不会丢失。
在权限控制中,使用事务处理机制ACID来确保ACL数据结构的更新操作的可靠性和一致性。当对ACL进行修改时,通过事务处理将所有相关的更新操作封装在一个事务中,要么全部成功提交,要么全部回滚。这样可以避免ACL数据的不一致和损坏,保证权限配置的正确性。事务处理机制ACID是数据库系统的基本特性,权限管理系统可以利用数据库提供的事务支持来实现ACL的可靠更新。
其中,增量同步机制是指在分布式系统中,将变更的数据从源端同步到目标端的一种机制。与全量同步不同,增量同步只传输自上次同步以来发生变化的数据,而不是全部数据。增量同步可以显著减少数据传输的量,提高同步的效率。在权限控制中,当ACL表发生变更时,可以使用增量同步机制来更新ACL表的版本号。版本号用于标识ACL表的当前状态,每次变更都会生成一个新的版本号。通过比较版本号,可以确定ACL表是否发生了变化,以及变化的具体内容。增量同步机制通过传输变更的ACL数据,将修改后的ACL同步到其他节点或副本,确保整个系统的ACL配置保持一致。通过增量同步机制,可以高效地维护分布式系统中ACL的一致性,减少数据传输的开销,提高权限管理的可扩展性。
进一步的,校验模块,包含:缓存查询单元,在执行权限获取之前,通过查询缓存模块,判断缓存模块中是否存储请求访问的目标对象对应的ACL和权限规则;如果存在,则将缓存模块中的ACL和权限规则直接传递给权限获取单元和规则解析单元;请求解析单元,获取用户的访问请求,从访问请求中解析用户标识、操作类型和目标对象;并将解析结果传递给缓存查询单元和权限获取单元;权限获取单元,在缓存未命中时,根据请求解析单元提供的目标对象,从权限数据库的ACL表中获取目标对象对应的ACL,以及用户在对应ACL中的用户权限条目,并将获取的用户权限条目传递给规则解析单元和权限判断单元;规则解析单元,从缓存查询单元或权限获取单元获取的ACL中提取权限表达式;并采用语义解析和静态检查机制,对提取的权限表达式进行解析,获得权限规则和约束条件;将获得的权限规则转换为逻辑判断语句;将获得的约束条件转换为参数化查询语句;将转换得到的逻辑判断语句和参数化查询语句传递给权限判断单元;权限判断单元,根据接收的用户权限条目、逻辑判断语句和参数化查询语句,得到允许或拒绝用户访问请求的判断结果,并将判断结果传递给响应生成单元;响应生成单元,根据判断结果生成对用户访问请求的响应。
其中,缓存未命中是指在查询缓存模块时,没有找到请求访问的目标对象对应的ACL和权限规则。缓存是一种高速存储机制,用于存储最近访问过的或常用的数据,以便在后续访问时能够快速获取,提高系统的性能。在权限管理系统中,可以将最近访问过的ACL和权限规则缓存起来,避免每次都从权限数据库中获取,减少数据库的访问次数和延迟。当用户发起访问请求时,系统首先检查缓存模块中是否存在与请求相关的ACL和权限规则。如果缓存中找不到相应的数据,就称为缓存未命中。此时,系统需要从权限数据库中获取ACL和权限规则,并将其存储到缓存中,以便后续访问时能够快速获取。缓存未命中会导致一定的性能开销,因为需要访问数据库并执行相应的查询操作。
其中,语义解析是指对权限表达式进行语义层面的分析和理解,以提取其中包含的权限规则和约束条件。权限表达式是一种用于描述权限控制逻辑的语言或格式,它定义了主体对客体的访问权限以及相关的约束条件。语义解析的目的是将权限表达式转换为计算机可以理解和执行的形式,如逻辑判断语句和参数化查询语句。语义解析通常包括以下步骤:词法分析:将权限表达式拆分为一个个的词法单元,如关键字、标识符、运算符等。语法分析:根据预定义的语法规则,将词法单元组合成语法树或抽象语法树,表示权限表达式的结构。语义分析:在语法树的基础上,进行语义层面的分析,包括类型检查、作用域解析、引用消解等,确保权限表达式的语义正确性。中间代码生成:将语义分析后的权限表达式转换为中间代码,如三地址码或四元式,方便后续的优化和执行。目标代码生成:将中间代码转换为目标平台上可执行的代码,如逻辑判断语句和参数化查询语句。通过语义解析,权限管理系统可以准确理解权限表达式的含义,提取其中的权限规则和约束条件,并将其转换为可执行的代码,用于权限的判断和验证。
其中,静态检查机制是指在编译时或部署时对权限表达式进行语法和语义的检查,以发现潜在的错误和问题。与动态检查不同,静态检查在程序实际运行之前进行,通过分析代码的结构和内容来发现可能存在的缺陷。静态检查可以帮助提高权限管理系统的可靠性和安全性,减少运行时错误的发生。在权限管理系统中,静态检查机制主要用于检查权限表达式的合法性和一致性。具体来说,静态检查可以完成以下任务:语法检查:检查权限表达式是否符合预定义的语法规则,如关键字拼写、括号匹配、运算符使用等。类型检查:检查权限表达式中使用的变量、常量和函数的类型是否正确,如主体类型、客体类型、权限类型等。引用检查:检查权限表达式中使用的标识符是否存在,如主体标识、客体标识等,并检查其作用域和可见性。约束检查:检查权限表达式中定义的约束条件是否合法,如时间范围、IP地址范围等,并检查约束条件之间是否存在冲突。一致性检查:检查权限表达式与其他配置之间是否存在不一致,如与角色定义、用户分配等是否匹配。通过静态检查机制,权限管理系统可以在权限表达式被应用之前发现并纠正错误,提高系统的稳定性和可维护性。静态检查通常与语义解析相结合,在语义解析的过程中进行相应的检查和验证。
其中,权限规则是指在权限表达式中定义的、用于描述主体对客体的访问权限的规则。权限规则指定了在什么条件下,主体可以对客体执行什么样的操作。权限规则通常由主体、客体、权限类型和约束条件组成,例如:“角色A可以读取文件B,但只能在工作时间内访问”。权限规则在权限管理系统中起着核心作用,它决定了系统的访问控制策略。通过合理定义权限规则,可以实现细粒度的权限控制,满足不同的安全需求。权限规则可以基于各种因素来定义,如主体的身份、角色、组织关系,客体的类型、所有者、敏感程度,以及时间、地点、环境等约束条件。
其中,约束条件是指在权限表达式中定义的、用于限制权限规则适用范围的条件。约束条件对权限规则进行了进一步的细化和限定,指定了权限规则生效的前提条件。常见的约束条件包括时间约束、地点约束、次数约束、状态约束等。时间约束:限定权限规则只在特定的时间范围内生效,如工作时间、非工作时间、节假日等。例如,“员工只能在工作时间(9:00-18:00)内访问客户信息”。地点约束:限定权限规则只在特定的地理位置或网络环境下生效,如办公室、特定的IP地址范围等。例如,“员工只能在公司内网访问财务系统”。次数约束:限定权限规则在一定时间内的使用次数,如每天最多访问N次、每月最多访问M次等。例如,“员工每天最多可以查询10次客户信息”。状态约束:限定权限规则只在系统或对象处于特定状态下生效,如文档的审核状态、订单的处理状态等。例如,“员工只能查看已审核通过的文档”。
关联约束:限定权限规则只在满足特定关联条件时生效,如用户与数据的所有者关系、用户所属部门与数据的相关部门等。例如,“员工只能查看自己所在部门的客户信息”。约束条件在权限表达式中以逻辑表达式的形式出现,与权限规则一起定义权限控制的边界。通过语义解析,约束条件从权限表达式中提取出来,并转换为参数化查询语句。在权限判断过程中,系统执行参数化查询语句,根据当前的上下文信息(如当前时间、用户位置等)检查约束条件是否满足。只有当权限规则和约束条件都满足时,才允许用户的访问请求。
进一步的,采用抽象语法树AST解析用户的访问请求,获取用户标识、操作类型和目标对象,包括:设置用于描述请求结构的语法规则,语法规则包含产生式、终结符、非终结符和语法之间的层次关系;根据设置的语法规则,对用户的访问请求进行语法解析,将请求字符流转换为词法单元流;通过对词法单元流进行语法解析,构建出表示请求语法结构的语法树AST;AST采用树形结构,树中的节点表示语法单元,节点之间的父子关系表示语法单元之间的嵌套和包含关系;采用深度优先搜索树遍历算法,对构建得到的AST进行遍历,访问AST中的每个节点;在遍历过程中,采用visitor模式,将AST的遍历算法与节点的处理逻辑解耦;定义统一的visitor接口,声明不同类型节点的处理方法;对每种节点,封装相同类型的节点的处理逻辑,通过visitor模式,将遍历算法与节点处理逻辑进行分离;在遍历AST的过程中,根据当前访问节点的类型和属性,提取访问请求中的关键信息,关键信息包含用户标识、操作类型和目标对象;用户标识从表示用户身份的节点中提取,操作类型从表示操作行为的节点提取,目标对象从表示访问资源的节点中提取;将提取出的关键信息以结构化的形式存储。
其中,抽象语法树是一种用树形结构表示程序代码语法结构的数据结构。它通过将代码的语法结构抽象为树的形式,忽略了具体的语法细节,如括号、分隔符等,而专注于代码的语义结构。AST通常由编译器或解释器在语法分析阶段构建,用于后续的语义分析、优化和代码生成。在权限管理系统中,可以使用AST来表示用户的访问请求。通过定义描述请求结构的语法规则,包括产生式、终结符、非终结符和语法层次关系,可以将用户的请求字符流转换为AST。AST中的节点表示请求中的语法单元,如用户标识、操作类型、目标对象等,节点之间的父子关系表示语法单元之间的嵌套和包含关系。
其中,深度优先搜索(DFS)是一种用于遍历或搜索树或图的算法。在树的遍历中,DFS通常用于先序遍历、中序遍历和后序遍历。深度优先搜索树遍历算法:从根节点开始,沿着树的深度方向进行探索,尽可能深地搜索树的分支,当达到叶子节点或无法继续搜索时,回溯到上一层节点,继续搜索其他分支,直到遍历完整棵树。在权限管理系统中,可以使用深度优先搜索树遍历算法来遍历AST。通过从根节点开始,递归地访问AST的每个节点,可以按照树的深度优先的顺序处理请求中的语法单元。在遍历过程中,可以根据当前访问节点的类型和属性,提取请求中的关键信息,如用户标识、操作类型和目标对象。
其中,Visitor模式是一种行为型设计模式,它允许在不改变对象结构的情况下,定义新的操作或算法,并将其应用于对象结构中的元素。Visitor模式通过将算法与对象结构分离,实现了算法与对象结构的解耦,提高了代码的灵活性和可扩展性。在权限管理系统中,可以使用Visitor模式来处理AST的遍历和节点的处理逻辑。通过定义统一的Visitor接口,声明不同类型节点的处理方法,并为每种节点类型实现相应的Visitor类,封装节点的处理逻辑。在遍历AST的过程中,通过Visitor模式,将遍历算法与节点处理逻辑进行分离,实现了算法与节点结构的解耦。
进一步的,采用抽象语法树AST解析用户的访问请求,获取用户标识、操作类型和目标对象,还包括:将提取的用户标识、操作类型和目标对象封装为解析结果对象;解析结果对象包含属性名称、数据类型和属性值;将包含用户标识和操作类型的解析结果对象传递给权限获取单元;将包含目标对象的解析结果对象传递给权限验证单元。
进一步的,将获得的权限规则转换为逻辑判断语句,包括:对权限规则中的常量部分进行计算,常量部分包含固定权限类型和角色名称;利用计算结果替换权限规则中原有的常量部分,得到调整后的权限规则;根据调整后的权限规则,将权限规则转换为条件表达式或控制结构,生成对应的逻辑判断语句,逻辑判断语句包含if-else语句和switch-case语句;根据权限规则的逻辑结构,将权限规则映射为逻辑判断语句中的判断条件和分支语句。
其中,逻辑判断语句(Logical Judgment Statement)是一种用于根据条件执行不同操作或决策的程序语句。它通过评估一个或多个条件表达式的真假值,来确定程序的执行流程。逻辑判断语句是程序设计中的基本控制结构之一,用于实现程序的分支和选择。在权限管理系统中,权限规则定义了在特定条件下,主体对客体的访问权限。为了在程序中实现权限规则的判断和执行,需要将权限规则转换为相应的逻辑判断语句。逻辑判断语句根据权限规则中的条件表达式,对当前的访问请求进行评估,并根据评估结果执行相应的操作,如允许访问、拒绝访问或进一步的权限检查。If-else语句是最基本的逻辑判断语句,它根据条件表达式的真假值,执行不同的代码块。Switch-case语句是另一种常用的逻辑判断语句,它根据表达式的值,选择执行多个代码块中的一个。在权限管理系统中,可以使用if-else语句来判断权限规则中的条件是否满足。在权限管理系统中,可以使用switch-case语句来根据权限规则中的不同条件,执行相应的操作。
进一步的,将获得的约束条件转换为参数化查询语句,包括:获取约束条件的变量部分和固定部分,变量部分表示动态变化的约束值,包含时间范围和地理位置参数;将约束条件中的变量部分替换为查询参数,通过参数绑定机制生成参数化查询语句;参数化查询语句中采用参数占位符来表示变量值;根据参数绑定后的约束条件,通过动态语句生成方式,将参数化查询语句与对应的参数值进行结合,生成完整的参数化查询语句。
其中,参数化查询语句(Parameterized Query Statement)是一种将查询语句中的变量或参数与实际值分离的查询方式。它通过使用参数占位符来表示查询语句中的变量部分,然后在执行查询时,将实际的参数值绑定到占位符上,生成完整的查询语句。参数化查询语句提供了一种更安全、更灵活的方式来构建和执行动态的查询。在权限管理系统中,约束条件表示了权限规则的动态部分,用于限制权限的适用范围。约束条件通常包含一些变量,如时间范围、地理位置等,这些变量的值在运行时动态确定。为了在查询数据库时考虑约束条件的动态特性,需要将约束条件转换为参数化查询语句。
具体的,获取约束条件的变量部分和固定部分:变量部分表示动态变化的约束值,如时间范围、地理位置等。固定部分表示不变的约束条件,如关系运算符、逻辑运算符等。将约束条件中的变量部分替换为查询参数:使用参数占位符(如?param等)来表示变量部分。通过参数绑定机制,将实际的参数值与参数占位符关联起来。生成参数化查询语句:将替换后的约束条件与查询语句的其他部分结合,生成完整的参数化查询语句。参数化查询语句中的参数占位符表示待绑定的参数值。执行参数化查询语句:在执行查询时,将实际的参数值绑定到参数化查询语句中的参数占位符上。数据库引擎会将参数值与查询语句进行结合,生成最终的查询语句并执行。
进一步的,参数化查询语句采用SQL语句或ORM查询语句。其中,SQL(StructuredQuery Language)是一种用于管理和操作关系型数据库的标准语言。SQL语句是用于与数据库进行交互的命令或查询,用于定义、操作和查询数据库中的数据。SQL语句包括数据定义语言(DDL)、数据操作语言(DML)和数据控制语言(DCL)等。ORM(Object-RelationalMapping)是一种将面向对象的编程语言与关系型数据库进行映射的技术。ORM查询语句是通过面向对象的方式来构建和执行数据库查询的语句。ORM查询语句通常基于特定的ORM框架或库,如Hibernate、Entity Framework、SQL Alchemy等。
3.有益效果
相比于现有技术,本申请的优点在于:
采用RBAC模型和ACL相结合的方式配置权限,管理模块支持用户、角色、权限的灵活管理和分配,可以根据实际需求动态调整权限配置,提高了权限管理的灵活性和可扩展性;
引入权限表达式定义权限规则和约束条件,通过权限规则的抽象和转换,将权限规则转换为逻辑判断语句,将约束条件转换为参数化查询语句,实现了细粒度的权限控制,满足了不同场景下的权限管理需求;
采用缓存模块缓存权限相关的元数据,包括用户、角色、权限、ACL等,提高了权限验证的效率;当权限配置发生变更时,通过增量同步机制更新缓存,保证了权限数据的一致性和实时性;
校验模块采用抽象语法树AST解析用户请求,提取关键信息,结合缓存数据和权限规则进行权限判断,通过参数化查询优化数据访问性能,提高了权限验证的准确性和效率;
在权限规则转换和参数化查询语句生成过程中,引入常量折叠、参数绑定、动态语句生成等优化技术,减少了不必要的计算和数据库访问,提升了系统的性能;
采用事务处理机制ACID对ACL进行更新,保证了权限配置的一致性和完整性;ACL的版本管理和增量同步,提高了权限变更的效率和可靠性;
将权限验证与业务逻辑解耦,权限验证模块可以独立于具体的业务系统,通过定义统一的接口,实现权限管理的模块化和可复用性,便于系统的维护和升级。
附图说明
本说明书将以示例性实施例的方式进一步描述,这些示例性实施例将通过附图进行详细描述。这些实施例并非限制性的,在这些实施例中,相同的编号表示相同的结构,其中:
图1是根据本说明书的一些实施例所示的一种基于数据模块化的MIS系统的示例性模块图;
图2是根据本说明书的一些实施例所示的管理模块的示例性模块图;
图3是根据本说明书的一些实施例所示的校验模块的示例性模块图。
具体实施方式
下面结合附图对本说明书实施例提供的方法和系统进行详细说明。
图1是根据本说明书的一些实施例所示的一种基于数据模块化的MIS系统的示例性模块图,如图所示,该系统包括管理模块、缓存模块、校验模块和执行模块。管理模块基于RBAC模型配置系统的基础数据,包括用户、角色和权限。针对每个需要控制权限的对象,管理模块创建访问控制列表ACL,并在ACL中为权限控制对象分配权限。管理模块将配置的基础数据和ACL存储到权限数据库中。
图2是根据本说明书的一些实施例所示的管理模块的示例性模块图,管理模块包括用户管理单元、角色管理单元、权限管理单元、访问控制列表ACL单元、用户角色分配单元和角色权限分配单元。
用户管理单元负责管理用户账户的创建、修改和删除操作。当管理员通过管理界面创建新用户时,用户管理单元将用户信息(如用户名、密码、邮箱等)存储到权限数据库的用户表中。用户表的结构如下:
字段名 | 数据类型 | 描述 |
user_id | int | 用户ID,主键 |
username | varchar(50) | 用户名,唯一 |
password | varchar(100) | 密码,经过加密存储 |
varchar(100) | 邮箱 | |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
角色管理单元负责管理角色的创建、修改和删除操作。管理员可以根据实际需求定义不同的角色,如管理员、业务员、客服等。角色信息存储在角色表中,表结构如下:
字段名 | 数据类型 | 描述 |
role_id | int | 角色ID,主键 |
role_name | varchar(50) | 角色名称,唯一 |
role_desc | varchar(200) | 角色描述 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
权限管理单元负责管理权限的创建、修改和删除操作。权限包含对数据对象的操作权限(如增删改查)和对功能模块的访问权限(如查看报表、审批订单等)。权限信息存储在权限表中,表结构如下:
字段名 | 数据类型 | 描述 |
perm_id | int | 权限ID,主键 |
perm_name | varchar(50) | 权限名称,唯一 |
perm_type | varchar(20) | 权限类型,如data(数据权限)、func(功能权限) |
perm_expr | varchar(200) | 权限表达式,描述权限的规则和约束 |
perm_mask | int | 权限掩码,用于位运算 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
访问控制列表ACL单元为每个需要控制权限的对象创建ACL。ACL定义了主体(用户、角色或实体)对客体(数据对象、功能模块或资源)的访问权限。ACL单元根据预定义的ACL模板生成ACL数据结构,为其分配唯一标识,并配置权限规则属性。权限规则属性包含主体类型、主体标识、客体类型、客体标识、权限类型和约束条件。权限规则通过权限表达式定义,权限表达式支持AND、OR、NOT等逻辑运算符。生成的ACL数据结构存储在ACL表中,表结构如下:
字段名 | 数据类型 | 描述 |
acl_id | int | ACL的ID,主键 |
res_type | varchar(50) | 资源类型,如user(用户)、role(角色)、data(数据对象)、func(功能模块) |
res_id | varchar(50) | 资源标识,与res_type配合使用 |
perm_expr | varchar(200) | 权限表达式 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
ACL单元还会为主体和客体创建唯一标识,并将其关联到ACL数据结构中。同时,ACL单元会根据主体和客体之间的层次关系(采用有向无环图DAG表示),利用传播算法生成下级对象的ACL。传播算法用于控制权限在层次关系中的继承和传播深度。
用户角色分配单元负责将用户分配给一个或多个角色,实现基于角色的权限管理。分配关系存储在用户角色表中,表结构如下:
字段名 | 数据类型 | 描述 |
id | int | 分配关系ID,主键 |
user_id | int | 用户ID,外键关联用户表 |
role_id | int | 角色ID,外键关联角色表 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
角色权限分配单元负责将权限分配给一个或多个角色,角色通过获得相应的权限来访问和操作资源。分配关系存储在角色权限表中,表结构如下:
字段名 | 数据类型 | 描述 |
id | int | 分配关系ID,主键 |
role_id | int | 角色ID,外键关联角色表 |
perm_id | int | 权限ID,外键关联权限表 |
create_time | datetime | 创建时间 |
update_time | datetime | 更新时间 |
当权限配置发生变更时,ACL单元采用事务处理机制ACID对ACL数据结构进行更新,保证数据的一致性和完整性。更新后的ACL存储到ACL表中,并生成新的版本号。ACL单元采用增量同步机制,只同步发生变更的ACL数据,提高同步效率。
缓存模块采用哈希表和树结构组织和索引元数据,包括用户、角色、权限、ACL和权限表达式。在系统启动时,缓存模块从权限数据库中加载元数据,并将其缓存到内存中。当管理模块更新权限配置时,缓存模块采用增量同步机制,从权限数据库中加载更新后的元数据。缓存模块包含以下几个核心组件:用户缓存:采用哈希表存储用户数据,以用户ID作为key,用户对象作为value。用户对象包含用户的基本信息,如用户名、密码、邮箱等。角色缓存:采用哈希表存储角色数据,以角色ID作为key,角色对象作为value。角色对象包含角色的基本信息,如角色名称、描述等。权限缓存:采用哈希表存储权限数据,以权限ID作为key,权限对象作为value。权限对象包含权限的基本信息,如权限名称、类型、表达式等。ACL缓存:采用哈希表存储ACL数据,以ACL的ID作为key,ACL对象作为value。ACL对象包含ACL的基本信息,如资源类型、资源标识、权限表达式等。权限表达式缓存:采用树结构(如二叉树、前缀树等)存储权限表达式,以便进行快速匹配和查找。树节点包含操作符(如AND、OR、NOT等)和操作数(如资源标识、权限类型等)。
在系统启动时,缓存模块通过以下步骤从权限数据库中加载元数据:建立数据库连接:缓存模块使用预定义的数据库配置(如数据库URL、用户名、密码等)建立与权限数据库的连接。加载用户数据:缓存模块执行SQL查询语句,从用户表中获取所有用户数据。将用户数据转换为用户对象,并以用户ID为key,用户对象为value,存储到用户缓存的哈希表中。加载角色数据:缓存模块执行SQL查询语句,从角色表中获取所有角色数据。将角色数据转换为角色对象,并以角色ID为key,角色对象为value,存储到角色缓存的哈希表中。加载权限数据:缓存模块执行SQL查询语句,从权限表中获取所有权限数据。将权限数据转换为权限对象,并以权限ID为key,权限对象为value,存储到权限缓存的哈希表中。加载ACL数据:缓存模块执行SQL查询语句,从ACL表中获取所有ACL数据。将ACL数据转换为ACL对象,并以ACL的ID为key,ACL对象为value,存储到ACL缓存的哈希表中。(6)构建权限表达式树:缓存模块遍历权限缓存和ACL缓存中的数据,提取权限表达式,构建权限表达式树。将权限表达式解析为操作符和操作数,生成树节点,并建立节点之间的父子关系。
当管理模块对权限配置进行更新时,缓存模块采用增量同步机制,从权限数据库中加载更新后的元数据,具体步骤如下:获取变更数据:缓存模块定期从权限数据库的变更日志表中获取自上次同步以来的变更数据,包括新增、修改和删除的用户、角色、权限和ACL数据。更新用户缓存:对于新增和修改的用户数据,缓存模块以用户ID为key,将更新后的用户对象存储到用户缓存的哈希表中;对于删除的用户数据,从哈希表中移除相应的键值对。更新角色缓存:对于新增和修改的角色数据,缓存模块以角色ID为key,将更新后的角色对象存储到角色缓存的哈希表中;对于删除的角色数据,从哈希表中移除相应的键值对。更新权限缓存:对于新增和修改的权限数据,缓存模块以权限ID为key,将更新后的权限对象存储到权限缓存的哈希表中;对于删除的权限数据,从哈希表中移除相应的键值对。更新ACL缓存:对于新增和修改的ACL数据,缓存模块以ACL的ID为key,将更新后的ACL对象存储到ACL缓存的哈希表中;对于删除的ACL数据,从哈希表中移除相应的键值对。(6)重建权限表达式树:缓存模块根据更新后的权限缓存和ACL缓存,重新构建权限表达式树。通过增量同步机制,缓存模块只加载和更新变更的元数据,避免了全量同步的开销,提高了数据同步的效率。同时,缓存模块采用哈希表和树结构对元数据进行索引和组织,使得元数据的查询和访问更加高效。
校验模块接收用户的访问请求,通过抽象语法树AST解析请求,提取其中的用户标识、操作类型和目标对象。校验模块首先查询缓存模块,判断是否存在请求访问对象的ACL和权限规则。如果缓存命中,则直接获取ACL和权限规则;否则,校验模块从权限数据库中获取相应的ACL,并提取其中的权限表达式。
图3是根据本说明书的一些实施例所示的校验模块的示例性模块图,校验模块包含缓存查询单元、请求解析单元、权限获取单元、规则解析单元、权限判断单元和响应生成单元。
缓存查询单元:在执行权限获取之前,缓存查询单元通过查询缓存模块,判断缓存模块中是否存储请求访问的目标对象对应的ACL和权限规则。具体地,缓存查询单元将请求解析单元解析得到的目标对象作为key,在ACL缓存的哈希表中进行查找。如果查找到目标对象对应的ACL对象,则将ACL对象中的权限表达式直接传递给规则解析单元;如果ACL对象中包含权限规则,则将权限规则直接传递给权限判断单元。通过缓存查询,避免了每次都从权限数据库中获取ACL和权限规则,提高了权限验证的效率。
请求解析单元:请求解析单元负责获取用户的访问请求,并从访问请求中解析出用户标识、操作类型和目标对象。请求解析单元采用抽象语法树AST来解析访问请求,具体步骤如下:设置语法规则:请求解析单元预先设置用于描述请求结构的语法规则。语法规则包含产生式(如<request>=<user><operation><resource>)、终结符(如GET、POST等HTTP方法)、非终结符(如<user>、<operation>等)以及语法单元之间的层次关系。构建语法树:请求解析单元根据设置的语法规则,对用户的访问请求进行语法解析。首先,将请求字符流转换为词法单元流,识别出请求中的关键字、标识符、字面量等。然后,通过对词法单元流进行语法分析,构建出表示请求语法结构的AST。AST采用树形结构,树中的节点表示语法单元,节点之间的父子关系表示语法单元之间的嵌套和包含关系。
遍历语法树:请求解析单元采用深度优先搜索(DFS)算法对构建得到的AST进行遍历,访问AST中的每个节点。在遍历过程中,请求解析单元采用Visitor模式,将AST的遍历算法与节点的处理逻辑解耦。定义统一的Visitor接口,声明不同类型节点(如用户节点、操作节点、资源节点等)的处理方法。对每种节点类型,封装相同类型节点的处理逻辑,实现对应的Visitor接口。通过Visitor模式,将遍历算法与节点处理逻辑进行分离,提高了代码的可维护性和扩展性。
提取关键信息:在遍历AST的过程中,请求解析单元根据当前访问节点的类型和属性,提取出访问请求中的关键信息,包括用户标识、操作类型和目标对象。用户标识从表示用户身份的节点(如<user>节点)中提取,操作类型从表示操作行为的节点(如<operation>节点)中提取,目标对象从表示访问资源的节点(如<resource>节点)中提取。提取出的关键信息以结构化的形式存储,便于后续的处理和传递。
封装和传递解析结果:请求解析单元将提取出的用户标识、操作类型和目标对象封装为解析结果对象。解析结果对象包含属性名称(如user、operation、resource)、数据类型(如string、int等)和属性值。请求解析单元将包含用户标识和操作类型的解析结果对象传递给权限获取单元,将包含目标对象的解析结果对象传递给缓存查询单元和权限判断单元,用于后续的权限获取和验证。
权限获取单元:当缓存查询未命中时,权限获取单元根据请求解析单元提供的目标对象,从权限数据库的ACL表中获取目标对象对应的ACL。具体地,权限获取单元将目标对象作为查询条件,构建SQL查询语句,从ACL表中查询匹配的ACL记录。对于查询到的ACL记录,权限获取单元根据请求中的用户标识,在ACL记录的权限表达式中提取用户对应的权限条目。权限条目包含主体类型、主体标识、客体类型、客体标识、权限类型和约束条件等信息。权限获取单元将获取到的用户权限条目传递给规则解析单元和权限判断单元,用于后续的权限规则解析和验证。
规则解析单元从缓存查询单元或权限获取单元获取ACL中的权限表达式。权限表达式采用特定的语法格式,描述了主体对客体的访问权限和约束条件。例如,一个简单的权限表达式可以表示为:allow user Aliceto read file1.txt when time between 09:00and 17:00。该权限表达式表示,允许用户Alice在09:00到17:00之间读取文件file1.txt。规则解析单元对获取的权限表达式进行语义解析和静态检查,具体步骤如下:词法分析:规则解析单元对权限表达式进行词法分析,将其转换为词法单元流。例如,对于上述权限表达式,词法分析后得到的词法单元流为:[allow][user][Alice][to][read][file1.txt][when][time][between][09:00][and][17:00]。其中,方括号[]表示一个词法单元。语法分析:规则解析单元对词法单元流进行语法分析,构建出表示权限表达式语法结构的抽象语法树(AST)。
语义分析:规则解析单元对构建得到的AST进行语义分析,检查AST中的语义错误,如类型不匹配、缺少必需参数等。例如,检查用户名是否为有效的用户标识,文件名是否存在,时间格式是否正确等。语义分析确保权限表达式的各个组成部分在语义上是正确和一致的。静态检查:合法性检查:规则解析单元对权限表达式进行合法性检查,确保其符合预定义的语法规则和约束条件。例如,检查权限表达式是否包含必需的关键字(如allow、deny等),主体和客体是否符合系统定义的类型和格式,约束条件是否使用了支持的运算符和函数等。合法性检查确保权限表达式在语法和结构上是正确的。一致性检查:规则解析单元对权限表达式进行一致性检查,确保其与系统中的其他权限配置不存在冲突或矛盾。例如,检查同一主体对同一客体的权限是否存在相互矛盾的规则,如同时存在allow和deny规则。一致性检查确保权限表达式与系统的整体权限策略保持一致,不会引入安全漏洞或冲突。
规则提取:经过语义解析和静态检查,规则解析单元从权限表达式中提取出权限规则和约束条件。权限规则提取:规则解析单元从AST中提取出主体、客体和操作等信息,构建权限规则对象。例如,对于上述权限表达式,提取出的权限规则可以表示为:{“subject”:“Alice”,“object”:“file1.txt”,“action”:“read”}。权限规则对象描述了主体对客体的具体操作权限,如读、写、执行等。约束条件提取:规则解析单元从AST中提取出约束条件的谓词、运算符和操作数等信息,构建约束条件对象。例如,对于上述权限表达式,提取出的约束条件可以表示为:{“predicate”:“time”,“operator”:“between”,“operands”:[“09:00”,“17:00”]}。约束条件对象描述了权限生效的前提条件,如时间、地点、次数等。
规则转换:规则解析单元将提取出的权限规则和约束条件转换为可执行的判断逻辑和查询语句。逻辑判断语句生成:规则解析单元将权限规则对象转换为与系统实现语言(如Java、Python等)兼容的逻辑判断语句。例如,将上述权限规则对象转换为Java中的判断语句:if(subject.equals(“Alice”)&&object.equals(“file1.txt”)&&action.equals(“read”)){//允许访问}else{//拒绝访问}。逻辑判断语句根据主体、客体和操作的具体值,判断是否允许或拒绝用户的访问请求。参数化查询语句生成:规则解析单元将约束条件对象转换为与系统使用的数据库查询语言(如SQL、OQL等)兼容的参数化查询语句。例如,将上述约束条件对象转换为SQL中的参数化查询语句:SELECT*FROM access_log,WHEREuser_id=?AND resource_id=?AND time stamp BETWEEN?AND?参数化查询语句根据约束条件的谓词、运算符和操作数,构建出数据库查询语句,用于在权限验证过程中检查约束条件是否满足。最后,规则解析单元将生成的逻辑判断语句和参数化查询语句传递给权限判断单元,用于根据用户权限和约束条件进行最终的权限验证和决策。
通过规则解析单元的语义解析、静态检查和规则转换,将权限表达式转换为可执行的判断逻辑和查询语句,为后续的权限验证提供了基础。同时,规则解析单元的模块化设计和独立性,使得权限表达式的解析和验证过程与具体的系统实现解耦,提高了权限管理系统的灵活性和可扩展性。根据权限验证结果,校验模块生成权限判断结果,允许或拒绝用户的访问请求。对于允许访问的请求,校验模块将请求转发给执行模块处理;对于拒绝访问的请求,校验模块直接返回错误信息给用户。在权限判断单元完成权限验证后,校验模块根据验证结果生成最终的权限判断结果,决定是允许还是拒绝用户的访问请求。如果权限判断单元的验证结果为“允许访问”,即用户对请求的资源具有相应的权限,且满足所有的约束条件,则校验模块生成“允许访问”的权限判断结果。
生成允许响应:校验模块的响应生成单元根据系统定义的允许访问响应格式,生成表示允许访问的响应对象。例如,在HTTP协议中,允许访问的响应状态码为200OK,响应头中包含请求所需的元数据信息,响应体中包含请求的资源内容。记录访问日志:校验模块将当前访问请求的相关信息,如时间戳、用户标识、资源标识、操作类型等,记录到系统的访问日志中。访问日志用于追踪和审计用户的访问行为,便于后续的分析和问题定位。转发请求:校验模块将允许访问的请求转发给执行模块进行处理。执行模块根据请求的具体操作类型和资源标识,调用相应的业务逻辑和数据访问组件,完成对资源的读取、写入、更新或删除等操作。执行模块的处理结果将返回给校验模块。返回响应:校验模块将执行模块的处理结果封装到之前生成的允许访问响应对象中,并将响应对象返回给用户。用户的客户端收到允许访问的响应后,可以根据响应内容对请求结果进行处理和展示。
拒绝访问:如果权限判断单元的验证结果为“拒绝访问”,即用户对请求的资源没有相应的权限,或者不满足某些约束条件,则校验模块生成“拒绝访问”的权限判断结果。生成拒绝响应:校验模块的响应生成单元根据系统定义的拒绝访问响应格式,生成表示拒绝访问的响应对象。例如,在HTTP协议中,拒绝访问的响应状态码可以是403Forbidden或401Unauthorized,响应头中包含错误信息的类型和描述,响应体中包含详细的错误信息。记录拒绝日志:校验模块将当前访问请求的相关信息,如时间戳、用户标识、资源标识、操作类型、拒绝原因等,记录到系统的拒绝日志中。拒绝日志用于追踪和审计用户的非法访问行为,便于后续的安全分析和问题定位。返回错误信息:校验模块将拒绝访问的响应对象直接返回给用户,不再将请求转发给执行模块。响应对象中包含了拒绝访问的错误信息,如错误码、错误描述、修复建议等。用户的客户端收到拒绝访问的响应后,可以根据错误信息进行相应的处理,如显示错误提示、重新获取权限、调整请求参数等。
判断结果缓存:为了提高权限判断的效率,校验模块可以将权限判断结果缓存到缓存模块中。生成缓存键:校验模块根据请求的用户标识、资源标识和操作类型,生成唯一的缓存键。缓存键用于在缓存模块中快速查找和获取判断结果。存储判断结果:校验模块将权限判断结果(允许访问或拒绝访问)与生成的缓存键关联,并存储到缓存模块中。缓存模块可以使用内存缓存(如Redis、Memcached等)或本地缓存(如Map、Guava Cache等)来存储判断结果。设置缓存过期时间:校验模块为缓存的判断结果设置合适的过期时间。过期时间根据系统的安全策略和性能要求进行配置,通常较短,如几秒到几分钟。当判断结果过期后,缓存模块将自动清理过期的缓存项,确保判断结果的时效性。缓存命中:对于后续的相同请求,校验模块首先检查缓存模块中是否存在对应的判断结果。如果存在(缓存命中),则直接从缓存中获取判断结果,避免了重复的权限验证过程,提高了响应速度。如果不存在(缓存未命中),则校验模块重新执行权限验证流程,并将新的判断结果存储到缓存中。
通过生成权限判断结果,校验模块可以根据权限验证结果,控制用户对系统资源的访问。对于允许访问的请求,校验模块将请求转发给执行模块处理,并将处理结果返回给用户;对于拒绝访问的请求,校验模块直接返回错误信息,禁止用户的非法访问。同时,校验模块通过访问日志和拒绝日志,记录用户的访问行为和非法操作,为系统的安全审计和问题定位提供依据。此外,校验模块还可以通过判断结果缓存,提高权限判断的效率。将频繁请求的判断结果缓存到缓存模块中,可以避免重复的权限验证,加快系统的响应速度。缓存的使用需要平衡安全性和性能,通过合适的缓存策略和过期机制,确保判断结果的实时性和准确性。
执行模块对校验通过的访问请求进行处理。执行模块根据请求的操作类型和权限规则,生成相应的SQL语句。在SQL语句中,执行模块根据权限规则动态添加约束条件和过滤器,保证用户只能访问和操作被授权的数据。执行模块将生成的SQL语句提交给数据库执行,对数据进行增删改查等操作。数据库执行完成后,将操作结果返回给执行模块。执行模块对结果进行脱敏和格式化处理,最终将结果返回给用户。生成SQL语句:解析请求参数:执行模块从访问请求中解析出请求的操作类型、目标表名、查询条件、更新数据等参数。这些参数将用于构建SQL语句的不同部分。获取权限规则:执行模块根据请求的用户标识和操作类型,从权限数据库或缓存模块中获取相应的权限规则。权限规则包括允许的操作类型、可访问的数据范围、数据过滤条件等。构建SQL语句:执行模块根据请求的操作类型和权限规则,动态生成对应的SQL语句。SQL语句的基本结构根据操作类型确定,如SELECT语句用于查询,INSERT语句用于插入,UPDATE语句用于更新,DELETE语句用于删除。添加约束条件:执行模块根据权限规则中的数据范围和过滤条件,在SQL语句中动态添加约束条件。约束条件通过WHERE子句指定,限制用户只能访问和操作被授权的数据。例如,如果权限规则指定用户只能访问自己创建的数据,则在SQL语句的WHERE子句中添加“created_by='user_id'”的条件。添加数据过滤器:对于查询操作,执行模块根据权限规则中的数据过滤条件,在SQL语句中动态添加数据过滤器。数据过滤器通过SELECT子句中的列选择和HAVING子句中的聚合函数条件实现。例如,如果权限规则指定用户只能查看销售金额大于10000的订单,则在SQL语句的SELECT子句中添加“SUM(order_amount)AS total_amount”,在HAVING子句中添加“total_amount>10000”的条件。
执行SQL语句:建立数据库连接:执行模块根据配置的数据库连接信息,如数据库类型、主机名、端口号、用户名、密码等,建立与数据库的连接。数据库连接通过连接池进行管理,提高连接的复用效率。提交SQL语句:执行模块将生成的SQL语句提交给数据库执行。执行模块使用数据库连接创建Statement或Prepared Statement对象,将SQL语句传递给数据库的查询引擎。数据库执行SQL语句,对数据进行相应的操作,如查询、插入、更新、删除等。处理执行结果:数据库执行完SQL语句后,将操作结果返回给执行模块。对于查询操作,执行模块通过Result Set对象获取查询结果集,并将结果集转换为Java对象或JSON格式。对于插入、更新、删除操作,执行模块通过返回的受影响行数判断操作是否成功。
结果处理:数据脱敏:对于查询操作返回的结果数据,执行模块根据系统的数据安全策略,对敏感数据进行脱敏处理。数据脱敏通过将敏感信息进行加密、遮蔽、替换等方式实现,防止敏感数据的泄露。例如,将用户的身份证号码替换为“*************”。数据格式化:执行模块根据用户请求的数据格式,对结果数据进行格式化处理。常见的数据格式包括JSON、XML、CSV等。执行模块使用相应的数据序列化库,如Jackson、Gson等,将Java对象转换为指定格式的字符串。返回结果:执行模块将格式化后的结果数据返回给用户。对于HTTP请求,执行模块将结果数据写入HTTP响应的body中,并设置相应的Content-Type头部。用户的客户端接收到响应数据后,可以根据数据格式进行解析和展示。
在整个权限验证和数据处理过程中,数据在各个模块之间有序流转:管理模块通过权限管理接口,将权限配置数据存储到权限数据库中,包括用户信息、角色信息、资源信息、权限规则等。缓存模块从权限数据库加载权限元数据,如ACL、角色权限映射等,并将其缓存在内存中。缓存模块定期同步权限数据库的变更,保证缓存数据的一致性。用户通过客户端发送访问请求,请求数据经过校验模块进行权限验证。校验模块从缓存模块或权限数据库获取用户的ACL和权限规则,对请求进行判断,生成权限判断结果。对于校验通过的请求,校验模块将请求数据发送给执行模块进行处理。执行模块根据请求的操作类型和权限规则,从数据库获取业务数据,并生成相应的SQL语句进行数据操作。执行模块将数据库操作的结果数据进行脱敏和格式化处理,最终将结果返回给用户的客户端。
图2是本申请实施例提供的一种基于数据模块化的MIS系统的权限验证方法流程图。在整个权限验证过程中,数据流向如下:管理模块将权限配置数据存储到权限数据库;缓存模块从权限数据库加载元数据,并进行缓存;用户通过访问请求将数据发送给校验模块进行权限验证;校验模块从缓存模块或权限数据库获取ACL和权限规则数据,对用户请求进行判断;执行模块从校验模块接收请求数据,并从数据库获取业务数据,将处理后的结果数据返回给用户。管理模块通过权限管理接口,将权限配置数据存储到权限数据库中。用户信息:管理员在管理模块中创建和维护用户账号,如用户ID、用户名、密码、邮箱等。用户信息存储在权限数据库的用户表中。角色信息:管理员在管理模块中定义系统的角色,如管理员、经理、员工等。角色信息存储在权限数据库的角色表中,包括角色ID、角色名称、角色描述等字段。资源信息:管理员在管理模块中定义系统的资源,如菜单、按钮、数据表等。资源信息存储在权限数据库的资源表中,包括资源ID、资源名称、资源类型、资源路径等字段。权限规则:管理员在管理模块中配置权限规则,将用户、角色、资源进行关联,并设置相应的操作权限。权限规则存储在权限数据库的权限表中,包括规则ID、用户ID、角色ID、资源ID、操作类型、约束条件等字段。
权限元数据缓存:缓存模块从权限数据库加载权限元数据,并进行缓存。加载ACL:缓存模块从权限数据库的权限表中加载ACL(访问控制列表),即用户、角色对资源的操作权限映射关系。ACL以用户ID和角色ID为键,资源ID和操作类型为值,存储在内存的哈希表或字典结构中。加载角色权限:缓存模块从权限数据库的角色表和权限表中加载角色权限映射关系。角色权限以角色ID为键,资源ID和操作类型为值,存储在内存的哈希表或字典结构中。加载资源元数据:缓存模块从权限数据库的资源表中加载资源的元数据信息,如资源的名称、类型、路径等。资源元数据以资源ID为键,资源属性为值,存储在内存的哈希表或字典结构中。同步更新:缓存模块定期或在接收到管理模块的同步通知时,从权限数据库重新加载权限元数据,确保缓存与数据库的一致性。缓存模块使用读写锁或分布式锁等机制,保证缓存更新的原子性和并发安全性。
权限验证:用户通过客户端发送访问请求,请求数据经过校验模块进行权限验证。接收请求:校验模块接收用户的访问请求,从请求中解析出用户标识、请求的资源路径、操作类型等信息。获取ACL:校验模块根据用户标识,从缓存模块获取该用户的ACL。如果缓存未命中,则校验模块从权限数据库中查询用户的ACL,并将结果存入缓存。获取角色权限:校验模块根据用户所属的角色,从缓存模块获取该角色的权限映射。如果缓存未命中,则校验模块从权限数据库中查询角色的权限映射,并将结果存入缓存。权限判断:校验模块根据请求的资源路径和操作类型,在用户的ACL和角色权限中进行匹配。如果找到匹配的权限规则,且该规则允许用户执行相应的操作,则校验通过;否则,校验失败,拒绝用户的访问请求。
业务数据处理:对于校验通过的请求,校验模块将请求转发给执行模块进行业务数据处理。接收请求数据:执行模块从校验模块接收经过权限验证的请求数据,包括用户信息、请求的资源路径、操作类型、请求参数等。获取业务数据:执行模块根据请求的资源路径和操作类型,从业务数据库中获取相应的业务数据。执行模块使用数据访问组件(如MyBatis、Hibernate等)或原生的JDBC接口,执行相应的数据库操作,如查询、插入、更新、删除等。数据处理:执行模块对获取到的业务数据进行进一步的处理和转换,如数据格式化、数据脱敏、数据聚合等。执行模块可以调用业务逻辑组件或服务,对数据进行复杂的计算和处理。返回结果数据:执行模块将处理后的结果数据返回给用户的客户端。执行模块将结果数据序列化为指定的格式(如JSON、XML等),并通过HTTP响应返回给客户端。
在整个权限验证和业务数据处理过程中,数据在各个模块之间流转,实现了权限管理与业务逻辑的解耦:管理模块负责权限配置数据的存储和管理,将权限数据持久化到权限数据库中。缓存模块负责从权限数据库加载权限元数据,并进行缓存,提高权限验证的效率。校验模块负责接收用户的访问请求,并从缓存模块或权限数据库获取ACL和权限规则数据,对请求进行权限判断。执行模块负责处理校验通过的请求,从业务数据库获取业务数据,并对数据进行处理和返回。这种基于数据模块化的MIS系统架构,通过将权限管理和业务处理分离到不同的模块中,实现了权限与业务的解耦。各模块之间通过明确定义的接口进行数据交互,提高了系统的可维护性和可扩展性。同时,通过缓存机制和并发控制,保证了权限验证的高效性和数据一致性。这种权限验证方法适用于大型企业级MIS系统,可以灵活地适应不同的业务场景和权限模型。它提供了细粒度的权限控制,支持基于用户、角色、资源的权限管理,同时也具有良好的性能和可扩展性。
Claims (10)
1.一种基于数据模块化的MIS系统,包括:
管理模块,基于RBAC模型配置基础数据,并为每个需要控制权限的对象创建访问控制列表ACL,在ACL中为权限控制对象分配权限;将配置的基础数据和ACL存储到权限数据库中;其中,基础数据包含用户、角色和权限;
缓存模块,采用哈希表和树结构组织和索引元数据,其中,元数据包含用户、角色、权限、ACL和权限表达式;在系统启动时,从权限数据库中加载元数据,并将加载的元数据缓存到内存中;当管理模块更新权限配置时,缓存模块从权限数据库中增量加载更新后的元数据;其中,权限表达式用于定义权限规则和约束条件;
校验模块,接收用户的访问请求,获取访问请求中的用户ID和操作类型,根据访问请求对应的对象的ACL和用户的权限条目,结合权限表达式中定义的规则和约束条件,判断用户是否具有相应权限;根据权限校验结果,允许或拒绝用户的访问请求;
执行模块,对允许执行的访问请求,根据请求类型和权限规则生成SQL语句;在生成的SQL语句中,根据权限规则添加相应的条件和过滤器,以限定用户只能访问和操作被授权的数据;执行模块执行生成的SQL语句,并将执行结果返回给用户。
2.根据权利要求1所述的基于数据模块化的MIS系统,其特征在于:
管理模块,包括:
用户管理单元,管理用户账户的创建、修改和删除,并将用户信息存储到权限数据库的用户表中;
角色管理单元,管理角色的创建、修改和删除,并将角色信息存储到权限数据库的角色表中;
权限管理单元,管理权限的创建、修改和删除,权限包含对数据对象的操作权限和对功能模块的访问权限,并将权限信息存储到权限数据库的权限表中;
访问控制列表ACL单元,为每个需要控制权限的对象创建ACL,并在ACL中为权限控制对象分配权限;ACL中定义了主体对客体的访问权限,主体包含用户、角色或实体;客体包含数据对象、功能模块或资源;将配置的ACL存储到权限数据库的ACL表中;
用户角色分配单元,将用户分配给一个或多个角色,角色用于对用户进行分类和管理;相同角色的用户配置相同的权限;将用户与角色的关联关系存储到权限数据库的用户角色表中;
角色权限分配单元,将权限分配给一个或多个角色,角色通过权限获得对资源的访问和操作;将角色与权限的关联关系存储到权限数据库的角色权限表中。
3.根据权利要求2所述的基于数据模块化的MIS系统,其特征在于:
为每个需要控制权限的对象创建ACL,包括:
根据预定义的ACL模板生成ACL数据结构,并为ACL数据结构分配唯一的标识;其中,ACL数据结构包含主体、客体和权限规则;
配置权限的规则属性,规则属性包含主体类型、主体标识、客体类型、客体标识、权限类型和约束条件;将配置的权限转换为权限表达式,将权限表达式关联到生成的ACL数据结构中;
为ACL数据结构中的主体和客体创建唯一标识,并将创建的唯一标识关联到ACL数据结构中;
将主体和客体按照预定义的类型进行分类,得到主体和客体的层次关系;其中,层次关系采用有向无环图DAG表示,图中父节点表示上级对象,子节点表示下级对象。
4.根据权利要求3所述的基于数据模块化的MIS系统,其特征在于:
为每个需要控制权限的对象创建ACL,还包括:
定义权限类型,并为权限类型分配唯一的位掩码,将分配的位掩码关联到ACL数据结构中;
根据主体和客体之间的层次关系,根据传播算法,生成下级对象的ACL;其中,传播算法用于控制权限在层次关系中的继承和传播的深度;
根据权限修改请求,采用事务处理机制ACID,对ACL数据结构进行更新;
将生成和更新的ACL数据结构存储到权限数据库的ACL表中,并为ACL表生成唯一的版本号;当ACL表变更时,采用增量同步机制更新版本号。
5.根据权利要求1至4任一所述的基于数据模块化的MIS系统,其特征在于:
校验模块,包含:
缓存查询单元,在执行权限获取之前,通过查询缓存模块,判断缓存模块中是否存储请求访问的目标对象对应的ACL和权限规则;如果存在,则将缓存模块中的ACL和权限规则直接传递给权限获取单元和规则解析单元;
请求解析单元,获取用户的访问请求,从访问请求中解析用户标识、操作类型和目标对象;并将解析结果传递给缓存查询单元和权限获取单元;
权限获取单元,在缓存未命中时,根据请求解析单元提供的目标对象,从权限数据库的ACL表中获取目标对象对应的ACL,以及用户在对应ACL中的用户权限条目,并将获取的用户权限条目传递给规则解析单元和权限判断单元;
规则解析单元,从缓存查询单元或权限获取单元获取的ACL中提取权限表达式;并采用语义解析和静态检查机制,对提取的权限表达式进行解析,获得权限规则和约束条件;将获得的权限规则转换为逻辑判断语句;将获得的约束条件转换为参数化查询语句;将转换得到的逻辑判断语句和参数化查询语句传递给权限判断单元;
权限判断单元,根据接收的用户权限条目、逻辑判断语句和参数化查询语句,得到允许或拒绝用户访问请求的判断结果,并将判断结果传递给响应生成单元;
响应生成单元,根据判断结果生成对用户访问请求的响应。
6.根据权利要求5所述的基于数据模块化的MIS系统,其特征在于:
采用抽象语法树AST解析用户的访问请求,获取用户标识、操作类型和目标对象,包括:
设置用于描述请求结构的语法规则,语法规则包含产生式、终结符、非终结符和语法之间的层次关系;
根据设置的语法规则,对用户的访问请求进行语法解析,将请求字符流转换为词法单元流;通过对词法单元流进行语法解析,构建出表示请求语法结构的语法树AST;AST采用树形结构,树中的节点表示语法单元,节点之间的父子关系表示语法单元之间的嵌套和包含关系;
采用深度优先搜索树遍历算法,对构建得到的AST进行遍历,访问AST中的每个节点;在遍历过程中,采用visitor模式,将AST的遍历算法与节点的处理逻辑解耦;定义统一的visitor接口,声明不同类型节点的处理方法;对每种节点,封装相同类型的节点的处理逻辑,通过visitor模式,将遍历算法与节点处理逻辑进行分离;
在遍历AST的过程中,根据当前访问节点的类型和属性,提取访问请求中的关键信息,关键信息包含用户标识、操作类型和目标对象;用户标识从表示用户身份的节点中提取,操作类型从表示操作行为的节点提取,目标对象从表示访问资源的节点中提取;将提取出的关键信息以结构化的形式存储。
7.根据权利要求6所述的基于数据模块化的MIS系统,其特征在于:
采用抽象语法树AST解析用户的访问请求,获取用户标识、操作类型和目标对象,还包括:
将提取的用户标识、操作类型和目标对象封装为解析结果对象;解析结果对象包含属性名称、数据类型和属性值;
将包含用户标识和操作类型的解析结果对象传递给权限获取单元;
将包含目标对象的解析结果对象传递给权限验证单元。
8.根据权利要求7所述的基于数据模块化的MIS系统,其特征在于:
将获得的权限规则转换为逻辑判断语句,包括:
对权限规则中的常量部分进行计算,常量部分包含固定权限类型和角色名称;
利用计算结果替换权限规则中原有的常量部分,得到调整后的权限规则;
根据调整后的权限规则,将权限规则转换为条件表达式或控制结构,生成对应的逻辑判断语句,逻辑判断语句包含if-else语句和switch-case语句;
根据权限规则的逻辑结构,将权限规则映射为逻辑判断语句中的判断条件和分支语句。
9.根据权利要求8所述的基于数据模块化的MIS系统,其特征在于:
将获得的约束条件转换为参数化查询语句,包括:
获取约束条件的变量部分和固定部分,变量部分表示动态变化的约束值,包含时间范围和地理位置参数;
将约束条件中的变量部分替换为查询参数,通过参数绑定机制生成参数化查询语句;参数化查询语句中采用参数占位符来表示变量值;
根据参数绑定后的约束条件,通过动态语句生成方式,将参数化查询语句与对应的参数值进行结合,生成完整的参数化查询语句。
10.根据权利要求9所述的基于数据模块化的MIS系统,其特征在于:
参数化查询语句采用SQL语句或ORM查询语句。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410434695.8A CN118035985B (zh) | 2024-04-11 | 2024-04-11 | 一种基于数据模块化的mis系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410434695.8A CN118035985B (zh) | 2024-04-11 | 2024-04-11 | 一种基于数据模块化的mis系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN118035985A true CN118035985A (zh) | 2024-05-14 |
CN118035985B CN118035985B (zh) | 2024-06-25 |
Family
ID=90989909
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410434695.8A Active CN118035985B (zh) | 2024-04-11 | 2024-04-11 | 一种基于数据模块化的mis系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118035985B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118568125A (zh) * | 2024-08-01 | 2024-08-30 | 辽宁中科集成技术有限公司 | 一种安全数据库的管理方法及系统 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070233957A1 (en) * | 2006-03-28 | 2007-10-04 | Etai Lev-Ran | Method and apparatus for local access authorization of cached resources |
CN103078845A (zh) * | 2012-12-19 | 2013-05-01 | 华为技术有限公司 | 访问控制列表的校验方法和共享存储系统 |
CN104967620A (zh) * | 2015-06-17 | 2015-10-07 | 中国科学院信息工程研究所 | 一种基于属性访问控制策略的访问控制方法 |
CN107301352A (zh) * | 2017-06-22 | 2017-10-27 | 郑州云海信息技术有限公司 | 一种权限设置的方法及装置 |
CN117093599A (zh) * | 2023-08-23 | 2023-11-21 | 南京邮电大学 | 面向异构数据源的统一sql查询方法 |
CN117194332A (zh) * | 2023-09-22 | 2023-12-08 | 济南浪潮数据技术有限公司 | 一种文件系统中用户权限处理方法、装置、设备及介质 |
CN117633837A (zh) * | 2023-12-05 | 2024-03-01 | 中国农业银行股份有限公司 | 数据访问处理方法、装置、系统及存储介质 |
-
2024
- 2024-04-11 CN CN202410434695.8A patent/CN118035985B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070233957A1 (en) * | 2006-03-28 | 2007-10-04 | Etai Lev-Ran | Method and apparatus for local access authorization of cached resources |
CN103078845A (zh) * | 2012-12-19 | 2013-05-01 | 华为技术有限公司 | 访问控制列表的校验方法和共享存储系统 |
CN104967620A (zh) * | 2015-06-17 | 2015-10-07 | 中国科学院信息工程研究所 | 一种基于属性访问控制策略的访问控制方法 |
CN107301352A (zh) * | 2017-06-22 | 2017-10-27 | 郑州云海信息技术有限公司 | 一种权限设置的方法及装置 |
CN117093599A (zh) * | 2023-08-23 | 2023-11-21 | 南京邮电大学 | 面向异构数据源的统一sql查询方法 |
CN117194332A (zh) * | 2023-09-22 | 2023-12-08 | 济南浪潮数据技术有限公司 | 一种文件系统中用户权限处理方法、装置、设备及介质 |
CN117633837A (zh) * | 2023-12-05 | 2024-03-01 | 中国农业银行股份有限公司 | 数据访问处理方法、装置、系统及存储介质 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118568125A (zh) * | 2024-08-01 | 2024-08-30 | 辽宁中科集成技术有限公司 | 一种安全数据库的管理方法及系统 |
CN118568125B (zh) * | 2024-08-01 | 2024-10-22 | 辽宁中科集成技术有限公司 | 一种安全数据库的管理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN118035985B (zh) | 2024-06-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8775470B2 (en) | Method for implementing fine-grained access control using access restrictions | |
US8555378B2 (en) | Authorization caching in a multithreaded object server | |
US8612468B2 (en) | System and method for retrieving data from a relational database management system | |
US8812554B1 (en) | Method and system for storing shared data records in relational database | |
CN118035985B (zh) | 一种基于数据模块化的mis系统 | |
US8078595B2 (en) | Secure normal forms | |
US8117191B2 (en) | XML database management system for an XML database comprising access-protected XML data | |
US7401085B2 (en) | System and method for controlling the release of updates to a database configuration | |
CN110291517A (zh) | 图数据库中的查询语言互操作性 | |
KR20070121664A (ko) | 데이터 저장 시스템에서 데이터를 조작하는 시스템 및 방법 | |
CN115203750B (zh) | 基于Hive插件对Hive数据权限管控及安全审计方法及系统 | |
EP4290393A1 (en) | Consolidation spaces providing access to multiple instances of application content | |
US20230418680A1 (en) | Selective landscape element grouping facilitating landscape element consolidation or content installation | |
EP3095052A1 (en) | System and method for data search in a graph database | |
CN117421302A (zh) | 一种数据处理方法及相关设备 | |
US11372859B2 (en) | Efficiently supporting value style access of MOBs stored in SQL LOB column by providing value based semantics for LOBs in RDBMS | |
US10942924B2 (en) | LOB query performance via automatic inference of locator-less LOB by value semantics | |
US20230418803A1 (en) | Techniques for integrating data for multple instances of a data artifact | |
CN116578614A (zh) | 一种管道设备的数据管理方法、系统、介质及设备 | |
US12135707B2 (en) | Maintaining data separation for data consolidated from multiple data artifact instances | |
US20230418808A1 (en) | Maintaining data separation for data consolidated from multiple data artifact instances | |
Klausner | Semantic XVSM: design and implementation | |
EP4383109A1 (en) | Data authorization evaluation framework | |
Crowe | The Pyrrho Book | |
Lim et al. | A policy-based approach for assuring data integrity in DBMSs |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |