一种基于SQL语句解析的数据权限控制方法及装置与流程

文档序号:12470993阅读:566来源:国知局
一种基于SQL语句解析的数据权限控制方法及装置与流程

本发明涉及数据权限设置技术领域,具体而言,涉及一种基于SQL语句解析的数据权限控制方法及装置。



背景技术:

目前,在各类内容管理系统和数据库应用系统中,针对不用的业务应用场景,设定具有不同角色的用户对相应的业务数据进行创建、查询、修改、删除等数据操作,以满足实际生产的需要。例如:在一个统一物流管理系统中,包含全国不同的快递公司,且每个快递公司有不同的岗位人员,在该物流管理系统中每个岗位人员具有不同的角色,执行不同的系统功能。该控制方式为基于角色的粗粒度功能权限控制,然而,实际上,在该物流管理系统中具有相同功能操作的岗位人员所能操作的数据也可能有所不如,例如:在该物流管理系统中还存在平台物流业务管理人员,该物流业务管理人员各自管理部分省市的快递公司数据,彼此之间各不影响,因而,将涉及到更细粒度的数据权限控制,即需要通过数据权限来进行控制。

当前,相关技术中提供了一种数据权限控制方法,该方法主要是:目前行业中部分数据权限的控制都与角色功能上有耦合,业务功能开发人员在设计运行程序时将业务功能操作所对应部分核心业务数据上进行控制,采用功能规则模式,用于系统功能拦截进行数据权限验证,对用户操作时对应的规则范围内的数据进行整合过滤,将整合过滤后的数据范围作为最终的用户数据权限范围。采用该方式进行数据权限控制需要大量的规则配置,过程繁琐配置量较大,而且采用基于功能级别规则模式的数据权限进行控制,业务功能开发人员在进行业务功能开发时需要了解到数据范围的来源控制,从而增加了业务功能开发人员的开发难度,同时,系统业务功能彼此之间存在调用关系,从而进一步增加了对数据的权限控制难度,尤其,一旦部分业务权限规则变更将会因耦合度大导致风险不易把控。

在实现本发明的过程中,发明人发现相关技术中至少存在以下问题:采用相关技术中的基于功能级别规则模式的数据权限控制方法存在数据权限控制过程繁琐、规则配置量大、业务功能开发人员的开发维护成本高、开发难度高的问题。



技术实现要素:

有鉴于此,本发明实施例的目的在于提供一种基于SQL语句解析的数据权限控制方法及装置,以解决相关技术中的数据权限控制过程繁琐、规则配置量大、业务功能开发人员的开发维护成本高、开发难度高的问题。

第一方面,本发明实施例提供了一种基于SQL语句解析的数据权限控制方法,该方法包括:

接收业务功能操作请求,所述业务功能操作请求携带有用户标识和业务功能操作类型;

根据所述业务功能操作请求确定与所述业务功能操作类型对应的SQL语句和与所述用户标识对应的数据权限范围;

解析所述SQL语句,并根据所述数据权限范围和解析后的所述SQL语句生成新的SQL语句,所述新的SQL语句用于根据所述数据权限范围完成所述业务功能操作请求。

结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,所述根据所述业务功能操作请求确定与所述业务功能操作类型对应的SQL语句和与所述用户标识对应的数据权限范围之后,还包括:

调取所述SQL语句对应的SQL注解;

根据所述SQL注解确定需要进行数据权限控制的SQL语句。

结合第一方面的第一种可能的实施方式,本发明实施例提供了第一方面的第二种可能的实施方式,其中,所述解析所述SQL语句,包括:

对确定出的需要进行数据权限控制的SQL语句进行解析。

结合第一方面,本发明实施例提供了第一方面的第三种可能的实施方式,其中,所述根据所述数据权限范围和解析后的所述SQL语句生成新的SQL语句,包括:

将所述用户标识对应的数据权限范围作为限定条件;

判断解析后的所述SQL语句中是否存在where限定条件语句;

若是,则将所述限定条件添加至所述where限定条件语句,生成新的SQL语句;

若否,则根据所述限定条件创建where限定条件语句,生成新的SQL语句。

结合第一方面至第一方面的第三种可能的实施方式中任一种可能的实施方式,本发明实施例提供了第一方面的第四种可能的实施方式,其中,所述方法还包括:

接收数据权限范围修改请求,所述数据权限范围修改请求携带有用户标识和欲修改后的数据权限范围;

根据所述欲修改后的数据权限范围更新所述用户标识对应的数据权限范围。

第二方面,本发明实施例还提供了一种基于SQL语句解析的数据权限控制装置,该装置包括:

第一接收模块,用于接收业务功能操作请求,所述业务功能操作请求携带有用户标识和业务功能操作类型;

第一确定模块,用于根据所述业务功能操作请求确定与所述业务功能操作类型对应的SQL语句和与所述用户标识对应的数据权限范围;

SQL语句生成模块,用于解析所述SQL语句,并根据所述数据权限范围和解析后的所述SQL语句生成新的SQL语句,所述新的SQL语句用于根据所述数据权限范围完成所述业务功能操作请求。

结合第二方面,本发明实施例提供了第二方面的第一种可能的实施方式,其中,所述装置还包括:

调取模块,用于调取所述SQL语句对应的SQL注解;

第二确定模块,用于根据所述SQL注解确定需要进行数据权限控制的SQL语句。

结合第二方面的第一种可能的实施方式,本发明实施例提供了第二方面的第二种可能的实施方式,其中,所述SQL语句生成模块包括:

SQL语句解析单元,用于对确定出的需要进行数据权限控制的SQL语句进行解析。

结合第二方面,本发明实施例提供了第二方面的第三种可能的实施方式,其中,所述SQL语句生成模块包括:

限定条件确定单元,用于将所述用户标识对应的数据权限范围作为限定条件;

判断单元,用于判断解析后的所述SQL语句中是否存在where限定条件语句;

新的SQL语句生成单元,用于当存在where限定条件语句时,则将所述限定条件添加至所述where限定条件语句,生成新的SQL语句;当不存在where限定条件语句时,则根据所述限定条件创建where限定条件语句,生成新的SQL语句。

结合第二方面至第二方面的第三种可能的实施方式中任一种可能的实施方式,本发明实施例提供了第二方面的第四种可能的实施方式,其中,所述装置还包括:

第二接收模块,用于接收数据权限范围修改请求,所述数据权限范围修改请求携带有用户标识和欲修改后的数据权限范围;

数据权限范围更新模块,用于根据所述欲修改后的数据权限范围更新所述用户标识对应的数据权限范围。

在本发明实施例提供的基于SQL语句解析的数据权限控制方法及装置中,该方法包括:首先,接收业务功能操作请求,该业务功能操作请求携带有用户标识和业务功能操作类型;然后,根据上述业务功能操作请求确定与上述业务功能操作类型对应的SQL语句和与上述用户标识对应的数据权限范围;最后,解析上述SQL语句,并根据上述数据权限范围和解析后的SQL语句生成新的SQL语句,该新的SQL语句用于根据所述数据权限范围完成所述业务功能操作请求。本发明实施例通过在执行SQL语句时进行数据权限的限制,无需业务功能开发人员关注任何数据权限的相关细节,减少了对系统功能开发的开发成本、降低了代码侵入性和耦合度并具有可扩展性,从而解决数据权限控制过程繁琐、规则配置量大、业务功能开发人员的开发维护成本高、开发难度高的问题。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1示出了本发明实施例所提供的一种基于SQL语句解析的数据权限控制方法的流程示意图;

图2示出了本发明实施例所提供的一种基于SQL语句解析的数据权限控制装置的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

考虑到采用相关技术中的基于功能级别规则模式的数据权限控制方法存在数据权限控制过程繁琐、规则配置量大、业务功能开发人员的开发维护成本高、开发难度高的问题。基于此,本发明实施例提供了一种基于SQL语句解析的数据权限控制方法及装置,下面通过实施例进行描述。

如图1所示,本发明实施例提供了一种基于SQL语句解析的数据权限控制方法,该方法包括步骤S102-S106,具体如下:

步骤S102:接收业务功能操作请求,该业务功能操作请求携带有用户标识和业务功能操作类型,其中,该业务功能操作类型表示用户的功能权限范围,在一个特定业务系统中,每个用户均对应相应的功能权限范围;

步骤S104:根据上述业务功能操作请求确定与上述业务功能操作类型对应的SQL语句和与上述用户标识对应的数据权限范围;

步骤S106:解析上述SQL语句,并根据上述数据权限范围和解析后的上述SQL语句生成新的SQL语句,该新的SQL语句用于根据上述数据权限范围完成上述业务功能操作请求。

其中,数据权限的控制不同于一般的功能权限的控制,一般的功能权限指的是某个用户、角色或者是某个用户组能不能操作某种功能;而数据权限指的是某个用户、角色或者是某个用户组对某个数据对象的操作幅度的问题,比如说用户A可以对数据对象进行完全控制,而用户B则只能对数据对象进行浏览的权限,同时数据权限控制隶属于动态权限控制的范畴,业务系统的业务数据都会存储在数据库的数据文件中,数据权限的加入就是对这些数据的操作进行控制的一种机制。

在本发明提供的实施例中,通过在执行SQL语句时进行数据权限的限制,无需业务功能开发人员关注任何数据权限的相关细节,减少了对系统功能开发的开发成本、降低了代码侵入性和耦合度并具有可扩展性,从而解决数据权限控制过程繁琐、规则配置量大、业务功能开发人员的开发维护成本高、开发难度高的问题。

进一步的,考虑到可能存在预先设置SQL注解对SQL语句进行统一的数据权限的限制,该数据权限的限制与用户无关,为了进一步提高数据权限控制的效率,基于此,上述根据上述业务功能操作请求确定与上述业务功能操作类型对应的SQL语句和与上述用户标识对应的数据权限范围之后,还包括:

调取上述SQL语句对应的SQL注解;

根据上述SQL注解确定需要进行数据权限控制的SQL语句。

具体的,在本发明提供的实施例中,采用Mybatis插件、JSqlParser解析组件对SQL语句进行解析、以及自定义注解的方式来实现,一般情况下,对所有的数据访问对象DAO所对应的SQL语句进行数据权限的限制,可通过注解配置方式修改定义。

其中,根据SQL注解判断各个SQL语句中的子段或者表格是否需要进行数据权限限制,自动将禁止进行数据权限限制的子段或者表格过滤掉,然后再根据用户标识对应的数据权限范围对相应的SQL语句进行数据权限限制。

例如,如果部分特殊SQL语句只需要进行部分“数据权限字段”的限制,可以对该DAO方法使用注解@DataPermissionFilterConfig进行配置(即数据权限过滤配置),设置要过滤的字段,也可以设置要排除的部分表,如:

@DataPermissionFilterConfig(filterColumns={"warehouse_no","logistic_no"},excludedTables={"effective_period"});

又如,如果部分特殊SQL语句不需要进行“数据权限字段”的限制,可以对该DAO方法使用注解@DisableDataPermissionFilter进行配置(即禁用数据权限过滤)。

其中,根据业务场景需求,对需要进行数据权限控制的数据库表的字段范围进行确定,比如“省市区”或者“快递公司”等,这样任何涉及有“数据权限字段”限定范围的表操作的SQL都会被处理,即使涉及到多表关联查询的情况也采用相同的处理方式。

其中,上述解析上述SQL语句,包括:

对确定出的需要进行数据权限控制的SQL语句进行解析。

具体的,JSqlParser解析组件能够解析SQL语句并翻译成一个Java类层次,并且产生的层次可以使用访问者模式导航,利用JSqlParser解析组件对需要进行数据权限控制的SQL语句中相应的部分进行再次分析,然后,结合当前操作用户的数据权限范围动态更改SQL语句,从而实现对用户的数据权限进行控制的目的。

在本发明提供的实施例中,通过根据SQL语句对应的SQL注解对禁止进行数据权限限制的SQL语句进行过滤,无需对预先设置的禁止进行数据权限限制的SQL语句进行解析,进而减少了SQL语句解析的数据量,从而进一步提高数据权限控制的效率。

具体的,上述根据上述数据权限范围和解析后的上述SQL语句生成新的SQL语句,包括:

将上述用户标识对应的数据权限范围作为限定条件;

判断解析后的上述SQL语句中是否存在where限定条件语句;

若是,则将上述限定条件添加至上述where限定条件语句,生成新的SQL语句;

若否,则根据上述限定条件创建where限定条件语句,生成新的SQL语句。

其中,在本发明提供的实施例中,可以设置用户的数据权限配置信息,作为系统功能在系统界面进行配置管理,该数据权限配置信息可以存储某个用户可以操作的数据范围,比如用户A可以操作“北京市”、“四川省”的数据,如果同时可操作有“X快递公司”、“Y快递公司”,那么用户A执行某个功能操作,操作中涉及若干个SQL语句,如果SQL语句中相关的表有“数据权限字段”,则该SQL语句将会被自动改写,附加额外的where限定条件,强制限定在用户可操作的数据范围内,最终在执行的该写后SQL语句时将达到数据权限控制的目的。

进一步的,考虑到用户对应的数据权限范围可能随着用户的职位变化而变换,基于此,上述方法还包括:

接收数据权限范围修改请求,该数据权限范围修改请求携带有用户标识和欲修改后的数据权限范围;

根据上述欲修改后的数据权限范围更新上述用户标识对应的数据权限范围。

在本发明提供的实施例中,当用户对应的数据权限范围发生变化时,直接根据工作人员提交的数据权限范围修改请求更新数据权限配置信息中该用户对应的数据权限范围即可,在后续SQL语句执行过程中,将更新后的数据权限范围作为限定条件,生成新的SQL语句,最后执行新的SQL语句,在用户的数据权限范围需要修改时,无需开发人员重新编写程序,直接对数据权限配置信息进行相应修改即可,保证了数据权限范围变化的灵活性,进一步降低了业务功能开发人员的开发维护成本。

在本发明提供的基于SQL语句解析的数据权限控制方法中,该方法包括:首先,接收业务功能操作请求,该业务功能操作请求携带有用户标识和业务功能操作类型;然后,根据上述业务功能操作请求确定与上述业务功能操作类型对应的SQL语句和与上述用户标识对应的数据权限范围;最后,解析上述SQL语句,并根据上述数据权限范围和解析后的SQL语句生成新的SQL语句,该新的SQL语句用于根据所述数据权限范围完成所述业务功能操作请求。本发明实施例通过在执行SQL语句时进行数据权限的限制,无需业务功能开发人员关注任何数据权限的相关细节,减少了对系统功能开发的开发成本、降低了代码侵入性和耦合度并具有可扩展性,从而解决数据权限控制过程繁琐、规则配置量大、业务功能开发人员的开发维护成本高、开发难度高的问题,进一步的,通过根据SQL语句对应的SQL注解对禁止进行数据权限限制的SQL语句进行过滤,无需对预先设置的禁止进行数据权限限制的SQL语句进行解析,进而减少了SQL语句解析的数据量,从而进一步提高数据权限控制的效率;更进一步的,当用户对应的数据权限范围发生变化时,直接根据工作人员提交的数据权限范围修改请求更新数据权限配置信息中该用户对应的数据权限范围即可,在后续SQL语句执行过程中,将更新后的数据权限范围作为限定条件,生成新的SQL语句,最后执行新的SQL语句,在用户的数据权限范围需要修改时,无需开发人员重新编写程序,直接对数据权限配置信息进行相应修改即可,保证了数据权限范围变化的灵活性,进一步降低了业务功能开发人员的开发维护成本。

本发明实施例还提供一种基于SQL语句解析的数据权限控制装置,如图2所示,该装置包括:

第一接收模块202,用于接收业务功能操作请求,该业务功能操作请求携带有用户标识和业务功能操作类型;

第一确定模块204,用于根据上述业务功能操作请求确定与上述业务功能操作类型对应的SQL语句和与上述用户标识对应的数据权限范围;

SQL语句生成模块206,用于解析上述SQL语句,并根据上述数据权限范围和解析后的上述SQL语句生成新的SQL语句,该新的SQL语句用于根据上述数据权限范围完成上述业务功能操作请求。

在本发明提供的实施例中,通过在执行SQL语句时进行数据权限的限制,无需业务功能开发人员关注任何数据权限的相关细节,减少了对系统功能开发的开发成本、降低了代码侵入性和耦合度并具有可扩展性,从而解决数据权限控制过程繁琐、规则配置量大、业务功能开发人员的开发维护成本高、开发难度高的问题。

进一步的,考虑到可能存在预先设置SQL注解对SQL语句进行统一的数据权限的限制,该数据权限的限制与用户无关,为了进一步提高数据权限控制的效率,基于此,上述装置还包括:

调取模块,用于调取上述SQL语句对应的SQL注解;

第二确定模块,用于根据上述SQL注解确定需要进行数据权限控制的SQL语句。

其中,上述SQL语句生成模块206包括:

SQL语句解析单元,用于对确定出的需要进行数据权限控制的SQL语句进行解析。

进一步的,上述SQL语句生成模块206包括:

限定条件确定单元,用于将上述用户标识对应的数据权限范围作为限定条件;

判断单元,用于判断解析后的上述SQL语句中是否存在where限定条件语句;

新的SQL语句生成单元,用于当存在where限定条件语句时,则将上述限定条件添加至上述where限定条件语句,生成新的SQL语句;当不存在where限定条件语句时,则根据上述限定条件创建where限定条件语句,生成新的SQL语句。

进一步的,考虑到用户对应的数据权限范围可能随着用户的职位变化而变换,基于此,上述装置还包括:

第二接收模块,用于接收数据权限范围修改请求,该数据权限范围修改请求携带有用户标识和欲修改后的数据权限范围;

数据权限范围更新模块,用于根据上述欲修改后的数据权限范围更新上述用户标识对应的数据权限范围。

在本发明提供的基于SQL语句解析的数据权限控制装置中,首先,接收业务功能操作请求,该业务功能操作请求携带有用户标识和业务功能操作类型;然后,根据上述业务功能操作请求确定与上述业务功能操作类型对应的SQL语句和与上述用户标识对应的数据权限范围;最后,解析上述SQL语句,并根据上述数据权限范围和解析后的SQL语句生成新的SQL语句,该新的SQL语句用于根据所述数据权限范围完成所述业务功能操作请求。本发明实施例通过在执行SQL语句时进行数据权限的限制,无需业务功能开发人员关注任何数据权限的相关细节,减少了对系统功能开发的开发成本、降低了代码侵入性和耦合度并具有可扩展性,从而解决数据权限控制过程繁琐、规则配置量大、业务功能开发人员的开发维护成本高、开发难度高的问题,进一步的,通过根据SQL语句对应的SQL注解对禁止进行数据权限限制的SQL语句进行过滤,无需对预先设置的禁止进行数据权限限制的SQL语句进行解析,进而减少了SQL语句解析的数据量,从而进一步提高数据权限控制的效率;更进一步的,当用户对应的数据权限范围发生变化时,直接根据工作人员提交的数据权限范围修改请求更新数据权限配置信息中该用户对应的数据权限范围即可,在后续SQL语句执行过程中,将更新后的数据权限范围作为限定条件,生成新的SQL语句,最后执行新的SQL语句,在用户的数据权限范围需要修改时,无需开发人员重新编写程序,直接对数据权限配置信息进行相应修改即可,保证了数据权限范围变化的灵活性,进一步降低了业务功能开发人员的开发维护成本。

本发明实施例所提供的基于SQL语句解析的数据权限控制装置可以为设备上的特定硬件或者安装于设备上的软件或固件等。本发明实施例所提供的装置,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,装置实施例部分未提及之处,可参考前述方法实施例中相应内容。所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,前述描述的系统、装置和单元的具体工作过程,均可以参考上述方法实施例中的对应过程,在此不再赘述。

在本发明所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明提供的实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释,此外,术语“第一”、“第二”、“第三”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应所述以权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1