本发明专利技术是一种基于SQL的数据权限控制方法,包括以下步骤:步骤1:将SQL语句解析出需要进行数据权限控制的数据表;步骤2:根据预定控制规则和当前登录用户的信息,将解析出的数据表的表名转换为子查询SQL;步骤3:替换原始SQL中对应的数据表的表名为子查询SQL,并结合解析出的数据表的位置得出最终带有权限的SQL语句。本发明专利技术与现有技术相比,既不需要为不同角色开发多个类似的功能点,也不需要为了某个数据维护一套数据权限配置表,通过该方法可以达到对任何数据表都能配置出所需的访问权限。开发人员在编写SQL时无需关心数据权限。减少了开发的工作量。并且对于数据权限的变更也能通过改变控制规则来实现,能快速响应客户对于数据权限变更的要求。
【技术实现步骤摘要】
基于SQL的数据权限控制方法
本专利技术涉及一种控制方法,尤其是一种基于SQL的数据权限控制方法。
技术介绍
在ERP系统中,每个用户对数据的访问范围是不同的。比如:一个主要做工程项目的公司中,总经理可以查看到整个公司的项目数据,部门负责人只能查看本部门的项目数据,而分管领导可以查看某一类型的项目数据,财务负责人可以查看全公司或者指定负责的某几个部门的项目数据,项目经理只能查看自己负责的项目数据...等。不同角色使用系统,所能访问的数据范围,我们称为数据权限。传统的ERP系统为了满足不同角色范围的数据范围不同,需要开发不同的功能点。比如:总经理项目查询,部门项目查询,项目经理项目查询...等。或者做一些特别的配置表,配置某个人/角色对项目数据的访问范围。比如:分管领导A可以访问零购类型的项目,分管领导B可以访问实施维护类型的项目,财务负责人C可以访问部门1和部门2的项目,财务负责人D可以访问部门3、部门4、部门5的项目...等。有鉴于此,特提出本专利技术。
技术实现思路
本专利技术的目的是提供一种既不需要为不同角色开发多个类似的功能点,也不需要为了某个数据维护一套数据权限配置表从而使开发人员在编写SQL时无需关心数据权限的基于SQL的数据权限控制方法。为解决上述技术问题,本专利技术采用技术方案的基本构思是:一种基于SQL的数据权限控制方法,包括以下步骤:步骤1:将SQL语句解析出需要进行数据权限控制的数据表;步骤2:根据预定控制规则和当前登录用户的信息,将解析出的数据表的表名转换为子查询SQL;步骤3:替换原始SQL中对应的数据表的表名为子查询SQL,并结合解析出的数据表的位置得出最终带有权限的SQL语句。优选地,所述步骤1包括以下子步骤:步骤11:判断原始的SQL语句中是否存在单、双引号引起来的字符串;步骤111:若存在,则将原始的SQL语句中单、双引号中的内容使用空格替换,进入步骤12;步骤112:若不存在,进入步骤12;步骤12:判断原始的SQL语句是否都是大写的;步骤121:若全是大写的,进入步骤13;步骤122:若不全是大写的,则将其转换为大写,进入步骤13;步骤13:确定子句中关键字“FROM”、“WHERE”的位置;步骤14:将“FROM”和“WHERE”位置之间的子句提取出来;步骤15:将所有的“FROM”和“WHERE”位置之间的子句前后加上逗号,遍历这些子句,将在逗号后且空格前的部分或者是在“JOIN”关键字后且空格前的部分作为数据表名,并记录该数据表的位置。优选地,所述步骤13中如果没有“FROM”,则视“SELECT”关键字的位置为“FROM”的位置;如果没有“WHERE”,则视最末位为“WHERE”的位置。优选地,步骤13中使用indexOf函数确定子句中关键字“FROM”、“WHERE”的位置。优选地,所述步骤2包括以下子步骤:步骤21:将解析出的数据表的表名与所述预定控制规则匹配:对于没有匹配的控制规则的,执行步骤22:子查询SQL直接使用该表名;对于有匹配的控制规则的,执行步骤23:将用户信息代入所述预定控制规则的适用条件中,判断适用条件是否成立:步骤24:对于适用条件成立的控制规则,将控制规则中的SQL条件用控制规则的分组标记连接起来;步骤25:将上述用分组标记连接起来的SQL条件串转换成表名的子查询SQL。本专利技术的有益效果为:本专利技术与现有技术相比,既不需要为不同角色开发多个类似的功能点,也不需要为了某个数据维护一套数据权限配置表,通过该方法可以达到对任何数据表都能配置出所需的访问权限。开发人员在编写SQL时无需关心数据权限。减少了开发的工作量。并且对于数据权限的变更也能通过改变控制规则来实现,能快速响应客户对于数据权限变更的要求。附图说明图1为本专利技术的流程图;图2为一个控制规则图;图3为一个用户信息图表。具体实施方式为了使本
的人员更好地理解本专利技术方案,下面结合附图和具体实施方式对本专利技术作进一步的详细说明。参照图1,本专利技术是一种基于SQL的数据权限控制方法,包括以下步骤:S1:将SQL语句解析出需要进行数据权限控制的数据表;S2:根据预定控制规则和当前登录用户的信息,将解析出的数据表的表名转换为子查询SQL;预定控制规则是用来满足各种实际需要控制数据的全新规则。控制规则包括以下属性:数据表,表明该控制规则适用的数据表;规则适用条件,当该条件满足时,才使用该规则;控制语句,编写SQL条件语句,用于过滤数据表的数据,达到数据权限控制的目的;分组标记,相同分组标记的控制规则以“OR”连接,不同分组标记的控制规则以“AND”连接。S3:替换原始SQL中对应的数据表的表名为子查询SQL,并结合解析出的数据表的位置得出最终带有权限的SQL语句。所述S1包括以下子步骤:S11:判断原始的SQL语句中是否存在单、双引号引起来的字符串;S111:若存在,则将原始的SQL语句中单、双引号中的内容使用空格替换,进入S12;本步骤属于对单双引号的过滤,这样消除了字符串中含有SQL语法的影响。S112:若不存在,进入S12;S12:判断原始的SQL语句是否都是大写的;S121:若全是大写的,进入S13;S122:若不全是大写的,则将其转换为大写,进入S13;S13:确定子句中关键字“FROM”、“WHERE”的位置;S14:将“FROM”和“WHERE”位置之间的子句提取出来;经过遍历所有子句,将“FROM”和“WHERE”位置之间的子句全部提取出来。S15:将所有的“FROM”和“WHERE”位置之间的子句前后加上逗号,遍历这些子句,将在逗号后且空格前的部分或者是在“JOIN”关键字后且空格前的部分作为数据表名,并记录该数据表的位置。这样就能解析出在原始SQL中所使用的数据表了。所述S13中如果没有“FROM”,则视“SELECT”关键字的位置为“FROM”的位置;如果没有“WHERE”,则视最末位为“WHERE”的位置。S13中使用indexOf函数确定子句中关键字“FROM”、“WHERE”的位置。所述S2包括以下子步骤:S21:将解析出的数据表的表名与所述预定控制规则匹配:对于没有匹配的控制规则的,说明该表不需要控制数据权限,执行S22:子查询SQL直接使用该表名;对于有匹配的控制规则的,执行S23:将用户信息代入所述预定控制规则的适用条件中,判断适用条件是否成立:S24:对于适用条件成立的控制规则,将控制规则中的SQL条件用控制规则的分组标记连接起来;S25:将上述用分组标记连接起来的SQL条件串转换成表名的子查询SQL。对于S24和S25,比如:SQL条件1的分组标记为“1”,SQL条件2的分组标记为“1”,SQL条件3的分组标记为“2”,SQL条件4的分组标记为“1”,SQL条件5的分组标记为“3”。则连接结果为:(SQL条件1ORSQL条件2ORSQL条件4)ANDSQL条件3ANDSQL条件5。然后将上述的连接结果转换为:(SELECT*FROM表名1WHERE连接后的SQL条件)。这样就得到了一个表名的子查询SQL。替换原始SQL中对应的数据表的表名为子查询SQL,并结合解析出的数据表的位置得出最终带有权限的SQL语句的过程举例说明:原始SQL为:SELECT*FROMT本文档来自技高网...
【技术保护点】
一种基于SQL的数据权限控制方法,其特征在于,包括以下步骤:步骤1:将SQL语句解析出需要进行数据权限控制的数据表;步骤2:根据预定控制规则和当前登录用户的信息,将解析出的数据表的表名转换为子查询SQL;步骤3:替换原始SQL中对应的数据表的表名为子查询SQL,并结合解析出的数据表的位置得出最终带有权限的SQL语句。
【技术特征摘要】
1.一种基于SQL的数据权限控制方法,其特征在于,包括以下步骤:步骤1:将SQL语句解析出需要进行数据权限控制的数据表;步骤2:根据预定控制规则和当前登录用户的信息,将解析出的数据表的表名转换为子查询SQL;步骤3:替换原始SQL中对应的数据表的表名为子查询SQL,并结合解析出的数据表的位置得出最终带有权限的SQL语句;其中控制规则包括以下属性:数据表,表明该控制规则适用的数据表;规则适用条件,当该条件满足时,才使用该规则;控制语句,编写SQL条件语句,用于过滤数据表的数据,达到数据权限控制的目的;分组标记,相同分组标记的控制规则以“OR”连接,不同分组标记的控制规则以“AND”连接;所述步骤2包括以下子步骤:步骤21:将解析出的数据表的表名与所述预定控制规则匹配:对于没有匹配的控制规则的,执行步骤22:子查询SQL直接使用该表名;对于有匹配的控制规则的,执行步骤23:将用户信息代入所述预定控制规则的适用条件中,判断适用条件是否成立:步骤24:对于适用条件成立的控制规则,将控制规则中的SQL条件用控制规则的分组标记连接起来;步骤25:将上述用分组标记连接起来的SQL条件串转换成表名的子查询SQL。2.根据权利要求1所述的数据权限...
【专利技术属性】
技术研发人员:王文锋,
申请(专利权)人:中博信息技术研究院有限公司,
类型:发明
国别省市:江苏;32
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。