掌桥专利:专业的专利平台
掌桥专利
首页

用于Saas平台的数据权限控制方法及处理器

文献发布时间:2024-04-18 19:59:31


用于Saas平台的数据权限控制方法及处理器

技术领域

本申请涉及计算机领域,具体地涉及一种用于Saas平台的数据权限控制方法、存储介质及处理器。

背景技术

近年来,面向企业用户的各类多租户垂直SaaS平台软件产品快速发展,多个租户共享同一套系统实例并且业务数据高度复杂的需求场景,需要实现灵活通用,稳定高效的数据权限控制技术方案,保障用户业务数据安全并且数据范围权限可精细控制。

在各类传统信息管理系统建设中,通常采用基于角色的访问控制权限模型(Role-Based Access Control,简称RBAC),设置具有一系列权限集合的角色,并建立角色与用户的关联关系,使关联用户获得该角色下的权限信息,从而实现对拥有不同角色的用户对相应的业务功能和数据的操作权限控制。但采用访问控制权限模型进行权限管理,容易导致功能权限控制和数据权限控制强耦合,难以满足对于具有相同菜单或者按钮等功能资源操作权限的角色的不同用户。若采用SQL语句解析的方式进行数据权限控制,则针对权限控制字段不出现在对应SQL语句直接操作的数据表的表结构中的情况,其SQL语句解析会存在隐性越权的问题,难以确保数据权限控制的准确度。且,采用SQL语句解析的方式,基于硬编码并通过注解参数将数据权限范围控制的字段信息直接嵌入代码,可扩展性较低,维护较为困难。

发明内容

本申请实施例的目的是提供一种用于Saas平台的数据权限控制方法、存储介质及处理器。

为了实现上述目的,本申请第一方面提供一种用于Saas平台的数据权限控制方法,包括:

拦截用户触发的针对Saas平台数据库的数据查询请求,并根据数据查询请求获取对应的SQL语句,数据查询请求携带有可获取用户权限信息的用户身份信息;

解析SQL语句,以得到SQL语句包含的主干查询语句片段及子查询语句片段;

获取主干查询语句片段和子查询语句片段中作为数据源的可操作数据表;

根据预设的权限控制字段的配置信息确定可操作数据表的表结构元数据信息中需要进行权限控制的字段,以得到第一控制字段集合;

根据预设的权限控制字段的配置信息确定与可操作数据表对应的关联表的表结构元数据信息中需要进行权限控制的字段,以得到第二控制字段集合;

根据预设的权限控制字段的配置信息以及用户的用户权限信息生成基于用户的数据权限范围的筛选条件字符串;

在主干查询语句片段及子查询语句片段中的预设位置拼接增加筛选条件字符串,以生成新的SQL语句,其中,预设位置为主干查询语句片段及子查询语句片段中包含的表连接查询部分及规定数据选择标准的部分之后;

使用新的SQL语句访问对应的业务数据。

在本申请实施例中,根据预设的权限控制字段的配置信息以及用户的用户权限信息生成基于用户的数据权限范围的筛选条件字符串包括:根据预设的权限控制字段的配置信息确定各个业务的权限管理数据;根据各个业务的权限管理数据确定用户权限信息的数据权限范围;将数据权限范围对应的权限控制字段名字符串,与第一控制字段集合以及第二控制字段集合对应的权限范围值域字符串拼接,以生成筛选条件字符串。

在本申请实施例中,方法还包括:在拦截用户触发的针对Saas平台数据库的数据查询请求之前,获取多个业务数据表;获取用户通过权限编辑界面设置的每个业务数据表的权限配置信息;根据每个业务数据表的权限配置信息确定预设的权限控制字段的配置信息。

在本申请实施例中,方法还包括:将多个业务数据表的权限配置信息持久存储至数据库。

在本申请实施例中,方法还包括:在拦截用户触发的针对Saas平台数据库的数据查询请求之前,将多个业务数据表以及多个业务数据表的表结构元数据存储至缓存中间件;在业务数据表发生更新操作时,刷新缓存中间件中存储的业务数据表以及每个业务数据表的表结构元数据。

在本申请实施例中,获取主干查询语句片段和子查询语句片段中作为数据源的可操作数据表包括:从缓存中间件中获取多个业务数据表和多个业务数据表的表结构元数据;基于表结构元数据,查找主干查询语句片段和子查询语句片段中作为数据源的全部可操作数据表。

在本申请实施例中,解析SQL语句,以得到SQL语句包含的主干查询语句片段及子查询语句片段包括:判断SQL语句是否为union联合查询语句;在SQL语句是union联合查询语句的情况下,获取并循环遍历union联合查询子句集合,并逐个子句递归执行SQL语句的解析方法,以确定SQL语句的主干查询语句片段及子查询语句片段;在SQL语句不是union联合查询语句的情况下,判断SQL语句的from子句、join子句及where子句中是否存在子查询语句;在存在子查询语句的情况下,针对各个子查询语句继续递归执行SQL语句的解析方法;直到确定不存在子查询语句。

在本申请实施例中,根据预设的权限控制字段的配置信息确定可操作数据表的表结构元数据信息中需要进行权限控制的字段,以得到第一控制字段集合包括:筛选出SQL语句片段的from子句、join子句可直接操作的数据表的表结构元数据信息中需要进行权限控制的字段,以得到第一控制字段集合;根据预设的权限控制字段的配置信息确定与可操作数据表对应的关联表的表结构元数据信息中需要进行权限控制的字段,以得到第二控制字段集合包括:筛选SQL语句直接操作的数据表对应的关联表的表结构元数据信息中需要进行权限控制的字段,以得到第二控制字段集合。

本申请第二方面提供一种处理器,被配置成执行上述的用于Saas平台的数据权限控制方法。

本申请第三方面提供一种机器可读存储介质,该机器可读存储介质上存储有指令,该指令在被处理器执行时使得处理器被配置成执行上述的用于Saas平台的数据权限控制方法。

通过上述技术方案,能够动态配置数据权限控制字段,提高数据权限控制的可扩展性和可维护性。基于SQL语句拦截修改机制对表关联关系信息进行配置管理,避免由于权限控制字段不出现在对应SQL语句直接操作的数据表的表结构中所存在的隐性越权问题,使得数据权限控制更为精准。通过对SQL语句动态增加筛选条件字符串,使得数据权限管理更加灵活多变,大幅提升开发和运维效率。

本申请实施例的其它特征和优点将在随后的具体实施方式部分予以详细说明。

附图说明

附图是用来提供对本申请实施例的进一步理解,并且构成说明书的一部分,与下面的具体实施方式一起用于解释本申请实施例,但并不构成对本申请实施例的限制。在附图中:

图1示意性示出了根据本申请实施例的用于Saas平台的数据权限控制方法的流程示意图;

图2示意性示出了根据本申请另一实施例的用于Saas平台的数据权限控制方法的流程示意图;

图3示意性示出了根据本申请实施例的计算机设备的内部结构图。

具体实施方式

为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,应当理解的是,此处所描述的具体实施方式仅用于说明和解释本申请实施例,并不用于限制本申请实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。

图1示意性示出了根据本申请实施例的用于Saas平台的数据权限控制方法的流程示意图。如图1所示,在本申请一实施例中,提供了一种用于Saas平台的数据权限控制方法,包括以下步骤:

步骤101,拦截用户触发的针对Saas平台数据库的数据查询请求,并根据数据查询请求获取对应的SQL语句,数据查询请求携带有可获取用户权限信息的用户身份信息。

步骤102,解析SQL语句,以得到SQL语句包含的主干查询语句片段及子查询语句片段。

步骤103,获取主干查询语句片段和子查询语句片段中作为数据源的可操作数据表。

步骤104,根据预设的权限控制字段的配置信息确定可操作数据表的表结构元数据信息中需要进行权限控制的字段,以得到第一控制字段集合。

步骤105,根据预设的权限控制字段的配置信息确定与可操作数据表对应的关联表的表结构元数据信息中需要进行权限控制的字段,以得到第二控制字段集合。

步骤106,根据预设的权限控制字段的配置信息以及用户的用户权限信息生成基于用户的数据权限范围的筛选条件字符串。

步骤107,在主干查询语句片段及子查询语句片段中的预设位置拼接增加筛选条件字符串,以生成新的SQL语句,其中,预设位置为主干查询语句片段及子查询语句片段中包含的表连接查询部分及规定数据选择标准的部分之后。

步骤108,使用新的SQL语句访问对应的业务数据。

Saas平台是指运营Saas软件的平台。Saas能够给为企业搭建信息化所需的所有网络基础设施及软件、硬件运作平台,并可以负责所有前期的实施、后期的维护等一系列服务。Saas是一种软件布局模型,便于用户通过互联网托管、部署及接入。在进行数据权限控制时,用户可以触发针对Saas平台数据库的数据查询请求。其中,数据查询请求携带有可获取用户权限信息的用户身份信息。用户权限信息包括用户的权限范围信息和租户信息。处理器可以拦截该数据查询请求,并根据该数据查询请求获取对应的SQL语句。其中,SQL语句是结构化查询语句代码。当一个select查询(子查询)的结果作为另一个SQL语句(主查询)的数据来源或判断条件时,则构成嵌套查询SQL语句。

在获取对应的SQL语句之后,处理器可以进一步解析该SQL语句,以得到SQL语句包含的主干查询语句片段及子查询语句片段。其中,主干查询语句片段即是指SQL语句中使用子查询结果作为数据源或判断条件的部分。子查询语句片段是指SQL语句中提供结果给主干语句片段作为数据源或判断条件的部分。处理器可以获取主干查询语句片段和子查询语句片段中作为数据源的可操作数据表。其中,该可操作数据表可以为一个可操作数据表的集合。

处理器可以根据预设的权限控制字段的配置信息确定可操作数据表的表结构元数据信息中需要进行权限控制的字段,以得到第一控制字段集合。其中,表结构元数据是指一个数据库表的字段、类型、主键、外键以及索引等基本属性。表结构元数据信息即为表结构元数据中的字段信息,即数据库表包含的字段。例如,若工厂表(tm_bas_plant)包含工厂编号字段(plant_no)、工厂名称字段(plant_name)、创建人字段(created_by)等,车间表(tm_bas_workshop)包含工厂编号字段(plant_no)、车间编号字段(workshop_no)、车间名称字段(workshop_name)以及创建人字段(created_by)等。表结构元数据信息中需要进行权限控制的字段是指SQL语句中作为数据源的数据表的表结构中包含的需要进行权限控制的字段。例如,若SQL语句使用上述的工厂表和车间表作为数据源,而工厂编码和车间编码需要进行权限控制,那么,工厂表中的工厂编号字段和车间表中的工厂编号字段和车间编号字段即为其需要进行权限控制的字段。

处理器可以根据预设的权限控制字段的配置信息确定与可操作数据表对应的关联表的表结构元数据信息中需要进行权限控制的字段,以得到第二控制字段集合。其中,关联表即为与作为SQL语句数据源的数据表存在已配置关联关系的数据表。处理器可以根据预设的权限控制字段的配置信息以及用户的用户权限信息生成基于用户的数据权限范围的筛选条件字符串。

处理器可以在主干查询语句片段及子查询语句片段中的预设位置拼接增加筛选条件字符串,以生成新的SQL语句。其中,预设位置为主干查询语句片段及子查询语句片段中包含的表连接查询部分及规定数据选择标准的部分之后。其中,表连接查询部分可以为对应的多表连接子句。例如,可以为SQL语句“select*from tm_bas_plant inner join tm_bas_workshop on tm_bas_workshop.plant_no=tm_bas_plant.plant_no where plant_no=’666’”中关键字“join”至“where”之间的部分。规定数据选择标准的部分可以是指where筛选条件子句。例如,可以为SQL语句“select*from tm_bas_plant inner join tm_bas_workshop on tm_bas_workshop.plant_no=tm_bas_plant.plant_no where plant_no=’666’”中关键字“where”之后的部分。接着,处理器可以使用新的SQL语句访问对应的业务数据。

通过上述技术方案,能够动态配置数据权限控制字段,提高数据权限控制的可扩展性和可维护性。基于SQL语句拦截修改机制对表关联关系信息进行配置管理,避免由于权限控制字段不出现在对应SQL语句直接操作的数据表的表结构中所存在的隐性越权问题,使得数据权限控制更为精准。通过对SQL语句动态增加筛选条件字符串,使得数据权限管理更加灵活多变,大幅提升开发和运维效率。

在一个实施例中,根据预设的权限控制字段的配置信息以及用户的用户权限信息生成基于用户的数据权限范围的筛选条件字符串包括:根据预设的权限控制字段的配置信息确定各个业务的权限管理数据;根据各个业务的权限管理数据确定用户权限信息的数据权限范围;将数据权限范围对应的权限控制字段名字符串,与第一控制字段集合以及第二控制字段集合对应的权限范围值域字符串拼接,以生成筛选条件字符串。

处理器可以根据预设的权限控制字段的配置信息确定各个业务的权限管理数据。之后,处理器可以根据各个业务的权限管理数据确定用户权限信息的数据权限范围。接着,处理器可以将数据权限范围对应的权限控制字段名字符串,与第一控制字段集合以及第二控制字段集合对应的权限范围值域字符串拼接,以生成筛选条件字符串。例如,用户有车间编码“W001”和“W002”的权限,则筛选条件字符串可以为“select*from tm_bas_plantinner join tm_bas_workshop on tm_bas_workshop.plant_no=tm_bas_plant.plant_nowhere plant_no=’666’and workshop_no in(‘W001’,‘W002’)”中的“and workshop_noin(‘W001’,‘W002’)”部分。

在一个实施例中,方法还包括:在拦截用户触发的针对Saas平台数据库的数据查询请求之前,获取多个业务数据表;获取用户通过权限编辑界面设置的每个业务数据表的权限配置信息;根据每个业务数据表的权限配置信息确定预设的权限控制字段的配置信息。

在拦截用户触发的针对Saas平台数据库的数据查询请求之前,处理器可以获取多个业务数据表,并可以获取用户通过权限编辑界面设置的每个业务数据表的权限配置信息。之后,处理器可以根据每个业务数据表的权限配置信息确定预设的权限控制字段的配置信息。

其中,权限配置信息可以包括用户租户信息,数据库表字段关系关系、权限控制字段、业务权限组与权限字段关系以及用户与权限字段关系等。其中,用户(user)就是该业务系统的实际操作或使用者。租户(tenant)就是租用该业务系统的企业组织。用户归属于租户,即用户通过成为租用该业务系统的企业组织的员工,可操作或使用该业务系统。数据库表字段关联关系是指不同的数据表通过具体的字段与字段建立的关联关系。例如,车间表(tm_bas_workshop)通过车间表的车间编码(workshop_no)与产线表(tm_bas_line)的车间编码(workshop_code)建立关联关系。权限控制字段是指实际业务场景中需要进行权限控制的字段。例如,工厂编码字段“plant_no”。业务权限组与权限字段关系指实际业务场景中,通过业务权限组划分的数据权限字段值域集合。例如,整车制造业务管理权限组“viechle_group”,关联了工厂编码字段“plant_no”的值域(“P001”,“P002”)。用户与业务权限组关系是指用户是某个业务权限组的成员。例如,用户(user001)是整车制造业务管理权限组“viechle_group”的成员。

在一个实施例中,方法还包括:将多个业务数据表的权限配置信息持久存储至数据库。

在获取用户通过权限编辑界面设置的每个业务数据表的权限配置信息之后,处理器可以将多个业务数据表的权限配置信息持久存储至数据库。

在一个实施例中,方法还包括:在拦截用户触发的针对Saas平台数据库的数据查询请求之前,将多个业务数据表以及多个业务数据表的表结构元数据存储至缓存中间件;在业务数据表发生更新操作时,刷新缓存中间件中存储的业务数据表以及每个业务数据表的表结构元数据。

在拦截用户触发的针对Saas平台数据库的数据查询请求之前,处理器可以将多个业务数据表以及多个业务数据表的表结构元数据存储至缓存中间件。其中,缓存中间件可以为redis。在业务数据表发生更新操作时,处理器可以刷新缓存中间件中存储的业务数据表以及每个业务数据表的表结构元数据。

在一个实施例中,获取主干查询语句片段和子查询语句片段中作为数据源的可操作数据表包括:从缓存中间件中获取多个业务数据表和多个业务数据表的表结构元数据;基于表结构元数据,查找以主干查询语句片段和子查询语句片段作为数据源的全部可操作数据表。

处理器可以从缓存中间件中获取多个业务数据表和多个业务数据表的表结构元数据。基于表结构元数据,处理器可以查找主干查询语句片段和子查询语句片段中为数据源的全部可操作数据表。

在一个实施例中,解析SQL语句,以得到SQL语句包含的主干查询语句片段及子查询语句片段包括:判断SQL语句是否为union联合查询语句;在SQL语句是union联合查询语句的情况下,获取并循环遍历union联合查询子句集合,并逐个子句递归执行SQL语句的解析方法,以确定SQL语句的主干查询语句片段及子查询语句片段;在SQL语句不是union联合查询语句的情况下,判断SQL语句的from子句、join子句及where子句中是否存在子查询语句;在存在子查询语句的情况下,针对各个子查询语句继续递归执行SQL语句的解析方法;直到确定不存在子查询语句。

处理器可以判断SQL语句是否为union联合查询语句。其中,union联合查询语句是指能够使用union关键字将多个查询语句一同执行,并将多个查询语句的查询结果合并成一个结果集的SQL语句。在SQL语句是union联合查询语句的情况下,处理器可以获取并循环遍历union联合查询子句集合,并逐个子句递归执行SQL语句的解析方法,以确定SQL语句的主干查询语句片段及子查询语句片段。在SQL语句不是union联合查询语句的情况下,处理器可以判断SQL语句的from子句、join子句及where子句中是否存在子查询语句。其中,from子句、join子句及where子句是按照SQL语法划分的SQL语句的不同组成部分。例如,from子句是指SQL语句中以from开头的一段SQL语句片段。在存在子查询语句的情况下,处理器可以针对各个子查询语句继续递归执行SQL语句的解析方法,直到确定不存在子查询语句。

在一个实施例中,针对不存在子查询语句的SQL语句,则可以执行数据权限解析处理步骤。具体地,可解析SQL语句,以得到直接和间接数据权限控制字段。

在一个实施例中,根据预设的权限控制字段的配置信息确定可操作数据表的表结构元数据信息中需要进行权限控制的字段,以得到第一控制字段集合包括:筛选出SQL语句片段的from子句、join子句可直接操作的数据表的表结构元数据信息中需要进行权限控制的字段,以得到第一控制字段集合;根据预设的权限控制字段的配置信息确定与可操作数据表对应的关联表的表结构元数据信息中需要进行权限控制的字段,以得到第二控制字段集合包括:筛选SQL语句直接操作的数据表对应的关联表的表结构元数据信息中需要进行权限控制的字段,以得到第二控制字段集合。

处理器可以筛选出SQL语句片段的from子句、join子句可直接操作的数据表的表结构元数据信息中需要进行权限控制的字段,以得到第一控制字段集合。处理器可以筛选SQL语句直接操作的数据表对应的关联表的表结构元数据信息中需要进行权限控制的字段,以得到第二控制字段集合。

在一个实施例中,如图2所示,提供了另一种用于Saas平台的数据权限控制方法的流程示意图。

在拦截业务数据操作请求之前,可在用户界面维护租户用户信息、表关联关系信息、业务权限组以及数据权限维度信息等配置信息。具体地,租户用户信息包括租户定义、用户定义以及用户与租户关联关系定义。表关联关系信息包括表字段定义以及表字段关联关系定义。业务权限组以及数据权限维度信息包括数据权限维度定义、业务权限组定义、业务权限组与数据权限维度关系定义以及业务权限组与用户关系定义。之后,可以将维护的上述权限的配置信息持久化到数据库。在程序运行时,可将权限的配置信息加载到缓存中,以减少程序运行时与数据库IO操作频率。进一步地,还可定义授权许可注解(@DataPermitAn),编写SQL拦截器类DataPermitInterceptor、表结构信息处理工具类TableInfosUtil、数据权限处理工具类DataPermitUtil、数据权限设置基类DataPermit。接着,还可以编写数据访问业务实现类及实现方法,按实际业务需求决定数据访问业务方法是否用授权许可注解(@DataPermitAn)标注,或者方法参数类是否继承于数据权限设置基类DataPermit。

若用户触发业务数据操作请求,则可以通过SQL拦截器类DataPermitInterceptor拦截业务数据操作请求,并获取对应的原始SQL语句。接着,可解析原始SQL语句,以得到原始SQL语句包含的所有数据表。进一步地,可调用表结构信息处理工具类TableInfosUtil,以查询数据库全部数据表的表结构信息,将其转换为键值对结构数据。根据全部的表结构信息筛选原始SQL语句包含的所有数据表,收集包含租户ID字段的表信息。查询获取当前用户所有业务权限组对应的所有数据权限维度字段范围数据,得到当前用户数据权限范围集合。

进一步地,可调用数据权限处理工具类DataPermitUtil执行SQL语句解析方法。具体地,可判断原始SQL语句是否为union联合查询语句。在原始SQL语句为union联合查询语句的情况下,可获取并循环遍历union联合查询子句集合,并逐个子句递归执行SQL语句的解析方法。在原始SQL语句不为union联合查询语句的情况下,判断原始SQL语句的from子句、join子句及where子句中是否存在子查询。在存在子查询的情况下,可针对各个子查询语句继续递归执行SQL语句的解析方法,直至不存在子查询。

在不存在子查询的情况下,可执行数据权限解析处理步骤,即可解析处理原始SQL语句直接和间接数据权限控制字段。具体地,可根据数据权限控制字段配置信息,筛选SQL语句片段的from子句、join子句可直接操作的数据表的表结构元数据信息中需要进行权限控制的字段,以得到直接权限控制的表字段集合。还可筛选SQL语句直接操作的数据表对应的关联表的表结构元数据信息中需要进行权限控制的字段,以得到间接权限控制的表字段集合。

在确定直接和间接数据权限控制字段之后,可拼接数据权限控制范围和租户ID限定条件,以得到新SQL语句,并可采用新SQL语句完成业务数据操作请求。具体地,可根据租户ID以及包含租户ID字段的表信息接、直接权限控制的表字段集合、间接权限控制的表字段集合以及当前用户数据权限范围,在原始SQL语句的join子句后拼接对应的用户数据权限控制范围和租户ID的关联条件,并可在原始SQL语句的where子句后拼接对应的用户数据权限控制范围和租户ID的查询限定条件。此时,可得到包含租户数据隔离语义及数据权限范围控制的新SQL语句。

在一个实施例中,可先维护动态权限规则配置数据。之后,可拦截获取原始SQL语句,逐层递归解析SQL语句,得到主干查询语句片段以及子查询语句片段,获得SQL语句操作的数据表集合,并从缓存中获取对应的表字段关联关系信息。根据数据权限控制字段配置信息,首先筛选SQL语句直接操作的数据表的表结构元数据信息中需要进行权限控制的字段,得到直接权限控制字段集合。然后,筛选SQL语句直接操作的数据表对应的关联表的表结构元数据信息中需要进行权限控制的字段,得到间接权限控制字段集合。再根据用户租户信息及用户所属业务权限组与数据权限范围关系,在对应的多表关联子句及where筛选条件子句后,对应于上述直接权限控制字段集合与间接权限控制字段集合,动态拼接增加当前用户的数据权限范围筛选条件,以生成包含租户数据隔离语义及数据权限范围控制的新SQL语句,执行实际数据访问操作。

上述技术方案,基于动态权限规则配置机制及SQL拦截修改机制,用于数据权限范围控制的筛选字段信息,不采用硬编码方式内嵌固定在代码中,实现了数据权限控制范围动态配置,并通过建立数据库表字段关联关系,对数据权限控制字段不出现在对应SQL语句直接操作的数据表的表结构中的情况,做到数据范围权限的精细控制。

图1-2为一个实施例中用于Saas平台的数据权限控制方法的流程示意图。应该理解的是,虽然图1-2的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1-2中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,提供了一种存储介质,其上存储有程序,该程序被处理器执行时实现上述用于Saas平台的数据权限控制方法。

在一个实施例中,提供了一种处理器,处理器用于运行程序,其中,程序运行时执行上述用于Saas平台的数据权限控制方法。

在一个实施例中,提供了一种用于Saas平台的数据权限控制装置,包括上述的处理器。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图3所示。该计算机设备包括通过系统总线连接的处理器A01、网络接口A02、存储器(图中未示出)和数据库(图中未示出)。其中,该计算机设备的处理器A01用于提供计算和控制能力。该计算机设备的存储器包括内存储器A03和非易失性存储介质A04。该非易失性存储介质A04存储有操作系统B01、计算机程序B02和数据库(图中未示出)。该内存储器A03为非易失性存储介质A04中的操作系统B01和计算机程序B02的运行提供环境。该计算机设备的数据库用于存储筛选条件字符串等数据。该计算机设备的网络接口A02用于与外部的终端通过网络连接通信。该计算机程序B02被处理器A01执行时以实现一种用于Saas平台的数据权限控制方法。

本领域技术人员可以理解,图3中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

本申请实施例提供了一种设备,设备包括处理器、存储器及存储在存储器上并可在处理器上运行的程序,处理器执行程序时实现以下步骤:拦截用户触发的针对Saas平台数据库的数据查询请求,并根据数据查询请求获取对应的SQL语句,数据查询请求携带有可获取用户权限信息的用户身份信息;解析SQL语句,以得到SQL语句包含的主干查询语句片段及子查询语句片段;获取主干查询语句片段和子查询语句片段中作为数据源的可操作数据表;根据预设的权限控制字段的配置信息确定可操作数据表的表结构元数据信息中需要进行权限控制的字段,以得到第一控制字段集合;根据预设的权限控制字段的配置信息确定与可操作数据表对应的关联表的表结构元数据信息中需要进行权限控制的字段,以得到第二控制字段集合;根据预设的权限控制字段的配置信息以及用户的用户权限信息生成基于用户的数据权限范围的筛选条件字符串;在主干查询语句片段及子查询语句片段中的预设位置拼接增加筛选条件字符串,以生成新的SQL语句,其中,预设位置为主干查询语句片段及子查询语句片段中包含的表连接查询部分及规定数据选择标准的部分之后;使用新的SQL语句访问对应的业务数据。

在一个实施例中,根据预设的权限控制字段的配置信息以及用户的用户权限信息生成基于用户的数据权限范围的筛选条件字符串包括:根据预设的权限控制字段的配置信息确定各个业务的权限管理数据;根据各个业务的权限管理数据确定用户权限信息的数据权限范围;将数据权限范围对应的权限控制字段名字符串,与第一控制字段集合以及第二控制字段集合对应的权限范围值域字符串拼接,以生成筛选条件字符串。

在一个实施例中,方法还包括:在拦截用户触发的针对Saas平台数据库的数据查询请求之前,获取多个业务数据表;获取用户通过权限编辑界面设置的每个业务数据表的权限配置信息;根据每个业务数据表的权限配置信息确定预设的权限控制字段的配置信息。

在一个实施例中,方法还包括:将多个业务数据表的权限配置信息持久存储至数据库。

在一个实施例中,方法还包括:在拦截用户触发的针对Saas平台数据库的数据查询请求之前,将多个业务数据表以及多个业务数据表的表结构元数据存储至缓存中间件;在业务数据表发生更新操作时,刷新缓存中间件中存储的业务数据表以及每个业务数据表的表结构元数据。

在一个实施例中,获取主干查询语句片段和子查询语句片段中作为数据源的可操作数据表包括:从缓存中间件中获取多个业务数据表和多个业务数据表的表结构元数据;基于表结构元数据,查找主干查询语句片段和子查询语句片段中作为数据源的全部可操作数据表。

在一个实施例中,解析SQL语句,以得到SQL语句包含的主干查询语句片段及子查询语句片段包括:判断SQL语句是否为union联合查询语句;在SQL语句是union联合查询语句的情况下,获取并循环遍历union联合查询子句集合,并逐个子句递归执行SQL语句的解析方法,以确定SQL语句的主干查询语句片段及子查询语句片段;在SQL语句不是union联合查询语句的情况下,判断SQL语句的from子句、join子句及where子句中是否存在子查询语句;在存在子查询语句的情况下,针对各个子查询语句继续递归执行SQL语句的解析方法;直到确定不存在子查询语句。

在一个实施例中,根据预设的权限控制字段的配置信息确定可操作数据表的表结构元数据信息中需要进行权限控制的字段,以得到第一控制字段集合包括:筛选出SQL语句片段的from子句、join子句可直接操作的数据表的表结构元数据信息中需要进行权限控制的字段,以得到第一控制字段集合;根据预设的权限控制字段的配置信息确定与可操作数据表对应的关联表的表结构元数据信息中需要进行权限控制的字段,以得到第二控制字段集合包括:筛选SQL语句直接操作的数据表对应的关联表的表结构元数据信息中需要进行权限控制的字段,以得到第二控制字段集合。

本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有用于Saas平台的数据权限控制方法步骤的程序。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。

以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

技术分类

06120116523632