CN111488360B - 一种行级安全的实现方法、装置、设备及存储介质 - Google Patents
一种行级安全的实现方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN111488360B CN111488360B CN202010290004.3A CN202010290004A CN111488360B CN 111488360 B CN111488360 B CN 111488360B CN 202010290004 A CN202010290004 A CN 202010290004A CN 111488360 B CN111488360 B CN 111488360B
- Authority
- CN
- China
- Prior art keywords
- operation object
- security policy
- database statement
- policy function
- database
- 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.)
- Active
Links
Images
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种行级安全的实现方法、装置、设备及存储介质,该方法包括:解析数据库语句确定操作类型和操作对象,其中,操作对象具有与其关联的安全策略函数;在操作类型是查询操作时,根据安全策略函数确定操作对象对应的派生表,采用派生表更新数据库语句,执行更新后的数据库语句;在操作类型是非查询操作时,根据安全策略函数确定操作对象的约束条件,根据约束条件确定数据库语句是否执行成功;其中,非查询操作包括插入操作、更新操作或删除操作。在数据库语句分析阶段对数据库语句进行改写,通过替换派生表解决了原始数据库语句和安全策略函数谓词合并难的问题,同时避免了存在多个谓词时合并逻辑复杂容易出错的问题。
Description
技术领域
本发明实施例涉及数据库技术,尤其涉及一种行级安全的实现方法、装置、设备及存储介质。
背景技术
自主访问控制是通过授权和回收控制用户访问权限,粒度是对象级,如:表、视图。用户对一个数据库对象表要么有权限,要么没权限,无法指定用户只能访问特定的数据行。为了在自主访问控制的基础上简单实现用户访问特定数据行的功能,数据库提出了行级安全(Row-LevelSecurity,简称RLS),粒度是数据行,控制用户只能访问特定的数据行。行级安全主要由三部分组成:第一:数据库对象表、视图以及表示表或视图的同义词;第二:数据库安全策略函数,用于指定行级过滤条件,不同数据库的安全策略函数可能不同;第三:数据库对象和安全策略函数的关联关系。
目前ORACLE、SQL SERVER等都实现了行级安全,实现方法各有不同。大致可以分为以下两种实现方式:第一种,在SQL分析阶段,通过在SQL语句中动态增加谓词(WHERE子句)来实现的,如“SELECT*FROM T”修改为“SELECT*FROM T WHERE P1”,其中P1指安全策略函数对应谓词;第二种:在执行阶段,当用户从基表中读取数据行后,再用安全策略函数对应谓词过滤数据行,但是以上两种实现方案都存在不足。第一种,SQL分析阶段动态添加谓词:如果当前SQL已经包含谓词,则需要考虑怎么合并谓词。如:执行语句“SELECT*FROMT A WHEREA.ID>1”,假设安全策略函数对应过滤条件为“T.ID<3”,其中ID是表T的一列,原始语句中操作对象T使用了别名A,前缀“A.”和“T.”需要统一否则过滤条件通过AND合并时引发语句解析失败。第二种,不改变原始SQL,执行阶段再使用谓词过滤基表数据行,则在分析阶段无法对该策略函数的谓词与原始SQL的谓词一起分析优化处理。
发明内容
本发明提供一种行级安全的实现方法、装置、设备及存储介质,以简单实现对数据行的访问。
第一方面,本发明实施例提供了一种行级安全的实现方法,所述行级安全的实现方法包括:
解析数据库语句确定操作类型和操作对象,其中,所述操作对象具有与其关联的安全策略函数;
在所述操作类型是查询操作时,根据所述安全策略函数确定所述操作对象对应的派生表,采用所述派生表更新所述数据库语句,执行更新后的数据库语句;
在所述操作类型是非查询操作时,根据所述安全策略函数确定所述操作对象的约束条件,根据所述约束条件确定所述数据库语句是否执行成功;
其中,所述非查询操作包括插入操作、更新操作或删除操作。
第二方面,本发明实施例还提供了一种行级安全的实现装置,该行级安全的实现装置包括:
解析模块,用于解析数据库语句确定操作类型和操作对象,其中,所述操作对象具有与其关联的安全策略函数;
派生表确定模块,用于在所述操作类型是查询操作时,根据所述安全策略函数确定所述操作对象对应的派生表,采用所述派生表更新所述数据库语句,执行更新后的数据库语句;
约束条件确定模块,用于在所述操作类型是非查询操作时,根据所述安全策略函数确定所述操作对象的约束条件,根据所述约束条件确定所述数据库语句是否执行成功。
第三方面,本发明实施例还提供了一种设备,该设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如本发明实施例中任一所述的一种行级安全的实现方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明实施例中任一所述的一种行级安全的实现方法。
本发明实施例提供了一种行级安全的实现方法、装置、设备及存储介质,通过解析数据库语句确定操作类型和操作对象,其中,所述操作对象具有与其关联的安全策略函数;在所述操作类型是查询操作时,根据所述安全策略函数确定所述操作对象对应的派生表,采用所述派生表更新所述数据库语句,执行更新后的数据库语句;在所述操作类型是非查询操作时,根据所述安全策略函数确定所述操作对象的约束条件,根据所述约束条件确定所述数据库语句是否执行成功;其中,所述非查询操作包括插入操作、更新操作或删除操作。在实现数据库的行级安全时,在数据库语句分析阶段对数据库语句进行改写,通过将操作对象替换为派生表的方式解决了原始数据库语句和安全策略函数谓词合并难的问题,同时,在存在多个谓词的情况下避免了多个谓词合并逻辑复杂容易出错的问题。
附图说明
图1是本发明实施例一中的一种行级安全的实现方法的流程图;
图2是本发明实施例二中的一种行级安全的实现方法的流程图;
图3是本发明实施例二中的一种行级安全的实现方法中形成派生表的实现流程图;
图4是本发明实施例三中的一种行级安全的实现装置的结构图;
图5是本发明实施例四中的一种设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
实施例一
图1为本发明实施例一提供的一种行级安全的实现方法的流程图,本实施例可适用于数据库中访问数据的情况,该方法可以由一种行级安全的实现装置来执行,具体包括如下步骤:
S110、解析数据库语句确定操作类型和操作对象。
在本实施例中,所述操作对象具有与其关联的安全策略函数,操作对象包括数据库对象表、可更新视图、数据库对象表的同义词或可更新视图的同义词。
在本实施例中,数据库语句具体可以理解为对数据库执行操作时所使用的语句,例如“SELECT*FROM STUDENT;”为一条数据库语句,含义是查询数据库的表STUDENT中数据;操作类型具体可以理解为数据库语句所执行的操作,例如,插入操作(INSERT)、删除操作(DELETE)、更新操作(UPDATE),简称IDU,以及查询操作(SELECT);操作对象具体可以理解为执行数据库语句所访问的数据库对象,安全策略函数关联的操作对象支持表、可更新视图以及指向表或可更新视图的同义词;安全策略函数具体可以理解为数据库中的存储函数(FUNCTION),返回值用于对操作对象中数据进行过滤,安全策略函数的返回值可以理解为过滤条件(或称为谓词)。
具体的,对数据库中数据进行操作需要通过数据库语句实现,通常一条数据库语句中包含了执行的操作类型和执行此操作针对的操作对象,解析需要执行的数据库语句,确定数据库语句中包含的操作类型和操作对象,操作对象相关的安全策略函数可以是一个或者多个。例如,当数据库语句为“SELECT*FROM STUDENT A WHERE A.NAME='张三'ORA.NAME='李四';”时,此时的操作类型为SELECT(查询),操作对象为STUDENT。
S120、在所述操作类型是查询操作时,根据所述安全策略函数确定所述操作对象对应的派生表,采用所述派生表更新所述数据库语句,执行更新后的数据库语句。
在本实施例中,派生表具体可以理解为数据库中进行查询操作时把子查询做为一个表所得到的新表,派生表是虚拟的,在数据库中并不存在,用于缩小数据查找范围,派生表是数据库中的一种数据库语句,具有固定的生成格式“(SELECT*FROM所述操作对象的名称WHERE所述过滤条件)”,形成派生表需要安全策略函数返回值对应的过滤条件,根据过滤条件对操作对象中的数据进行筛选,缩小查找范围。
具体的,当解析确定的数据库语句执行的操作是查询操作时,根据安全策略函数所对应的过滤条件形成操作对象对应的派生表,采用派生表对数据库语句进行更新,对更新后的数据库语句执行相应操作。例如,假设数据库对象表STUDENT包含ID和NAME列,执行语句“SELECT*FROM STUDENT A WHERE A.NAME='张三'OR A.NAME='李四';”,当表STUDENT具有关联的安全策略函数时,假设安全策略函数P1对应的过滤条件为“STUDENT.ID<100”,根据派生表生成格式可以生成表STUDENT的派生表“(SELECT*FROM STUDENT WHERESTUDENT.ID<100)”,通过将操作对象替换为派生表的方式对数据库语句进行更新,执行更新后的语句“SELECT*FROM(SELECT*FROM STUDENT WHERE STUDENT.ID<100)A WHEREA.NAME='张三'OR A.NAME='李四';”,即选择表STUDENT中满足安全策略函数P1对应过滤条件的数据进行查询,不需要考虑已有谓词“A.NAME='张三'OR A.NAME='李四'”的前缀“A.”与安全策略函数P1对应过滤条件的前缀“STUDENT.”如何进行前缀统一和过滤条件合并。
S130、在所述操作类型是非查询操作时,根据所述安全策略函数确定所述操作对象的约束条件,根据所述约束条件确定所述数据库语句是否执行成功。
在本实施例中,所述非查询操作具体可以理解为数据库操作语句中除查询操作外的IDU操作,包括了插入操作、更新操作或删除操作;约束条件具体可以理解为操作对象对应操作数据的检查条件,如上例中的安全策略函数P1对应过滤条件“STUDENT.ID<100”转换的约束条件为“CONSTRAINT约束名CHECK(STUDENT.ID<100)”,表示操作对象STUDENT进行IDU操作时,操作数据必须满足此约束条件。
具体的,当解析得到的数据库语句中的操作类型为非查询操作时,将操作对象关联的安全策略函数对应的过滤条件转化为操作对象的约束条件,一个操作对象管理的安全策略函数有一个或者多个,将关联的所有安全策略函数对应的过滤条件依次转化为操作对象的约束条件,或者将所有(至少两个)安全策略函数对应的过滤条件通过逻辑与(或称为AND)连接符串联起来整体构造为一个约束条件,在执行数据库语句时,根据数据是否满足全部约束条件的判断结果确定数据库语句是否执行成功。当操作类型为插入操作时,判断插入的新数据是否满足约束条件;当操作类型为删除操作时,判断删除的旧数据是否满足约束条件;当操作类型为更新操作时,判断进行替换的新数据和被替换的旧数据是否满足约束条件。
本发明实施例提供了一种行级安全的实现方法,通过解析数据库语句确定操作类型和操作对象,其中,所述操作对象具有与其关联的安全策略函数;在所述操作类型是查询操作时,根据所述安全策略函数确定所述操作对象对应的派生表,采用所述派生表更新所述数据库语句,执行更新后的数据库语句;在所述操作类型是非查询操作时,根据所述安全策略函数确定所述操作对象的约束条件,根据所述约束条件确定所述数据库语句是否执行成功;其中,所述非查询操作包括插入操作、更新操作或删除操作。在实现数据库的行级安全时,在数据库语句分析阶段就对数据库语句进行了改写,通过将操作对象替换为派生表的方式解决了原始数据库语句和安全策略函数谓词合并难的问题,同时,在存在多个谓词的情况下避免了多个谓词合并逻辑复杂容易出错的问题。
实施例二
图2为本发明实施例二提供的一种行级安全的实现方法的流程图。本实施例的技术方案在上述技术方案的基础上进一步细化,具体主要包括如下步骤:
S201、解析数据库语句确定操作类型和操作对象。
S202、判断操作类型,若操作类型是查询操作,执行S203;若操作类型是非查询操作,执行S209。
具体的,当操作类型为查询操作时,执行行级安全的实现中查询操作对应的步骤;当操作类型为非查询操作时,例如插入操作、删除操作、更新操作,执行行级安全的实现中非查询操作对应的步骤。
S203、根据所述操作对象和所述安全策略函数的过滤条件形成派生表。
在本实施例中,派生表的生成具有固定的语句格式架构,派生表为了减小查询范围,所以需要过滤条件。
具体的,生成派生表时,将安全策略函数的返回值作为所述操作对象SELECT查询语句的WHERE过滤条件,即可得到派生表,生成派生表的固定语句格式为“(SELECT*FROM所述操作对象的名称WHERE所述过滤条件)”。例如,假设操作对象STUDENT关联安全策略函数P1,得到派生表为“(SELECT*FROM STUDENT WHERE“P1对应过滤条件”)”。
进一步地,图3提供了一种行级安全的实现方法中形成派生表的实现流程图,根据派生表生成语句和所述安全策略函数的过滤条件形成派生表具体包括以下步骤:
S2031、如果所述操作对象具有至少两个与其关联的安全策略函数,则通过逻辑与连接符将所述至少两个安全策略函数对应过滤条件串联起来构成所述过滤条件。
在本实施例中,逻辑与连接符具体可以理解为连接多个数据或者多个语句的连接符,通过逻辑与连接符(AND),将至少两个安全策略函数对应过滤条件串联起来构成过滤条件。
具体的,当同一个操作对象关联的安全策略函数的个数不少于两个时,通过逻辑与连接符AND将各个安全策略函数对应过滤条件串联起来,作为所述过滤条件。例如,两个策略函数返回值对应过滤条件分别为“谓词1”、“谓词2”,则将“谓词1”AND“谓词2”作为所述过滤条件。
S2032、根据所述操作对象和所述安全策略函数的过滤条件形成派生表。
具体的,将串联的安全策略函数的过滤条件作为此时实现行级安全的过滤条件,将此过滤条件作为派生表的过滤条件,形成派生表。例如,假设数据库对象表关联安全策略函数P1的过滤条件为“STUDENT.ID<100”,安全策略函数P2的过滤条件为“STUDENT.NAMENOT LIKE'SYS%'”,根据生成派生表的固定语句格式形成派生表为“(SELECT*FROMSTUDENT WHERE STUDENT.ID<100AND STUDENT.NAME NOT LIKE'SYS%')”。
S204、判断操作对象是否包含别名,若是,则执行S205;否则执行S206。
S205、将所述别名作为所述派生表的别名。
S206、将所述操作对象的对象名作为所述派生表的别名。
具体的,当操作对象存在别名时,操作对象对应的派生表继承操作对象的别名作为派生表的别名;当操作对象不存在别名时,把操作对象的对象名作为操作对象对应的派生表的别名。如果同一个对象在原始数据库语句中多次出现,则将操作对象依次替换为相同的派生表,别名与当前对象所在之处的别名保持一致。
S207、采用所述派生表替换所述数据库语句中的所述操作对象。
在通过派生表替换数据库语句中的操作对象后,在派生表上设置标识表示已替换过安全策略函数,避免重复替换导致的死循环或解析冗余。
S208、执行更新后的数据库语句,查询操作执行结束。
具体的,本实施例中以数据库对象表STUDENT(ID INT,NAME VARCHAR(30),GRADEINT)为例,其中STUDENT存在安全策略函数P1。P1对应过滤条件为“STUDENT.GRADE=(SELECT GRADE FROM STUDENT WHERE ID=UID())”,表示只允许当前登录用户查询相同年级的同学信息。当执行数据库语句“SELECT*FROM STUDENT A WHERE A.NAME='张三'ORA.NAME='李四';”时,表STUDENT对应生成的派生表为“(SELECT*FROM STUDENT WHERE“P1对应过滤条件”)”,通过采用派生表替换操作对象STUDENT,实现对数据库语句的更新,执行更新后的语句“SELECT*FROM(SELECT*FROM STUDENT WHERE STUDENT.GRADE=(SELECTGRADE FROM STUDENT WHERE ID=UID()))A WHERE A.NAME='张三'OR A.NAME='李四';”。
替换派生表即不需要考虑原始数据库语句已有的WHERE过滤条件“A.NAME='张三'OR A.NAME='李四'”和安全策略函数P1对应过滤条件怎么组合新的过滤条件,也不用考虑操作对象STUDENT别名“A”对应过滤条件的前缀“A.”和安全策略函数P1中对应过滤条件的前缀“STUDENT.”不统一导致语义解析错误而需要考虑替换前缀的问题。同时,派生表设置已被替换标识,新生成的派生表A对应数据库语句中包含的表对象STUDENT不需要重复替换。SELECT查询语句可能同时访问多个不同的数据库对象或者同一个数据库对象访问多次,查询操作需要逐个将原始数据库语句中关联安全策略函数的数据库对象替换为派生表。原始数据库语句分析结束后替换为新的数据库语句,新的数据库语句再经过分析阶段优化执行返回当前用户能够查看的特定数据行。当操作类型是查询操作时,执行更新后的查询语句,执行完更新的查询语句后结束此次查询操作。
S209、根据所述安全策略函数确定所述操作对象的约束条件,将所述约束条件添加至所述操作对象对应的基表的约束列表中。
在本实施例中,约束列表具体可以理解为存储操作对象所有约束条件的列表,基表具体可以理解为数据库中永久存储的表,基表可以被其它数据库对象如视图、同义词等引用。
具体的,操作对象关联的安全策略函数可能有多个,所以对应确定的约束条件也可能存在多个,安全策略函数关联的操作对象支持表、可更新视图以及指向表或可更新视图的同义词,此类操作对象在数据库中都有一个对应的基表,将约束条件添加至操作对象对应的基表的约束列表中,或者重新创建并初始化一个约束列表,将约束条件添加至所述基表的约束列表中。
操作对象包括数据库对象表、可更新视图、数据库对象表的同义词或可更新视图的同义词。
进一步地,所述根据所述安全策略函数确定所述操作对象的约束条件,将所述约束条件添加至所述操作对象对应的基表的约束列表中,包括:
当所述操作对象为数据库对象表时,将所述安全策略函数的过滤条件按照设定格式转化为所述数据库对象表的约束条件,并添加至所述数据库对象表的约束列表中。
在本实施例中,设定格式具体可以理解为约束条件的格式,用于执行数据库语句时检查操作对象的数据是否满足约束条件。具体的,基表就是数据库对象表,所以操作对象为数据库对象表时,其对应的约束条件直接添加到数据库对象表的约束列表中。
当所述操作对象为可更新视图时,将所述安全策略函数的过滤条件按照所述设定格式转化为所述可更新视图对应基表的约束条件,并添加至所述可更新视图对应基表的约束列表中。
具体的,由于视图在数据库中并没有真正的存储数据,数据存储在数据库对象表中。当对可更新视图进行IDU操作时,都会转换为可更新视图对应基表的IDU操作,所以对可更新视图进行约束条件转化时,转化为可更新视图对应基表的约束条件,并添加到所述基表的约束列表中。
当所述操作对象为数据库对象表的同义词时,将所述安全策略函数的过滤条件按照所述设定格式转化为所述同义词对应的数据库对象表的约束条件,并添加至同义词对应的表的约束列表中。
所述操作对象为可更新视图的同义词时,将所述安全策略函数的过滤条件按照所述设定格式转化为同义词对应的可更新视图对应的基表的约束条件,并添加至可更新视图对应的基表的约束列表中。
具体的,当同义词对应数据库对象表或可更新视图时,如果操作对象为数据库对象表的同义词,与其关联的安全策略函数的过滤条件转化原理与数据库对象表的转化原理相同,即按照设定格式转化为同义词对应的数据库对象表的约束条件,并添加至表的约束列表中。如果操作对象为可更新视图的同义词,与其关联的安全策略函数的过滤条件转化原理与可更新视图的转化原理相同,即按照设定格式转化为可更新视图对应的基表的约束条件,并添加至基表的约束列表中。
S210、根据所述数据库语句确定针对所述操作对象的操作数据,判断所述操作数据是否满足所述操作对象对应基表的所述约束条件,根据判断结果确定所述数据库语句是否执行成功。
具体的,数据库语句中包含所针对的操作对象、操作类型等,可以确定所进行操作的操作数据,判断操作数据是否满足约束条件,根据判断结果确定是否执行数据库语句,例如,满足约束条件的操作数据执行数据库语句,否则不执行。
进一步地,根据所述数据库语句确定针对所述操作对象的操作数据,判断所述操作数据是否满足所述约束条件,根据判断结果确定所述数据库语句是否执行成功可以具体化为:根据所述数据库语句确定针对所述操作对象的操作数据,其中,所述操作数据包括插入数据、删除数据或更新前后数据;在所述操作数据满足所述约束条件时,确定所述数据库语句执行成功;在所述操作数据不满足所述约束条件时,确定执行所述数据库语句执行失败,输出异常消息。
具体的,不同的数据库语句确定的操作数据不同,例如,插入语句确定的操作数据为插入数据,删除语句确定的操作数据为删除数据,更新语句确定的操作数据为更新前数据和更新后数据。对数据库语句确定的所有操作数据均进行是否满足约束条件的判断,满足约束条件的数据成功执行数据库语句,不满足约束条件的数据,执行数据库语句失败,并输出异常消息提醒操作用户。
本发明实施例还提供另外一种行级安全的实现方法中操作类型为非查询操作时判断是否执行数据库语句的实现方法。数据库对象表或视图与安全策略函数关联时,对数据库对象创建BEFORE(行前)触发器,其中,安全策略函数过滤条件作为触发器实现体的检查条件。如果操作数据满足安全策略函数,则执行对应的IDU操作(INSERT插入、UPDATE更新、DELETE删除语句);否则,抛出异常消息。IDU语句是在执行阶段,由触发器自动检查删除和更新的老数据,以及插入和更新的新数据是否满足安全策略函数的要求。如果安全策略函数对应过滤条件不变,或与数据库上下文执行环境无关,即多次反复执行时,安全策略函数返回值都相同的情况下,触发器一次创建在多次对操作对象进行IDU操作时重复使用,有明显优势。
但是,安全策略函数对应谓词作为触发器实现体的检查条件,存在以下问题:当上下文环境发生变化时,或者安全策略函数的谓词发生变化时,如:安全策略函数重建导致定义发生变化,触发器的创建需要根据当前谓词重建,否则IDU的检查条件仍为旧值导致结果错误。实际执行IDU操作时,安全策略函数的谓词很可能发生变化,特别是当谓词与上下文环境相关时很容易发生变化。例如:安全策略函数的脚本如下:
其中v_state表示系统状态,会随上下文环境运行发生变化,安全策略函数的谓词对应过滤条件v_str会根据v_state返回不同的值,此时必须不停的重复修改触发器脚本才能保证结果的正确性,额外的DDL开销巨大。
本发明实施例提供的一种行级安全的实现方法,不需要额外创建触发器检查IDU操作中的操作数据是否符合安全策略函数对应过滤条件,这样就不用考虑触发器的维护代价;不关心安全策略函数谓词发生变化而触发器的检查条件仍为旧值的情况,约束条件根据当前上下文环境实时构造,保证了结果的正确性,更简洁有效。
本发明实施例提供了一种行级安全的实现方法,通过解析数据库语句确定操作类型和操作对象,其中,所述操作对象具有与其关联的安全策略函数;在所述操作类型是查询操作时,根据所述安全策略函数确定所述操作对象对应的派生表,采用所述派生表更新所述数据库语句,执行更新后的数据库语句;在所述操作类型是非查询操作时,根据所述安全策略函数确定所述操作对象的约束条件,根据所述约束条件确定所述数据库语句是否执行成功;其中,所述非查询操作包括插入操作、更新操作或删除操作。在数据库语句分析阶段就对数据库语句进行了改写,通过将操作对象替换为派生表的方式解决了原始数据库语句和安全策略函数谓词合并难的问题,同时,在存在多个谓词的情况下避免了多个谓词合并逻辑复杂容易出错的问题。并且不需要考虑操作对象别名的问题,不会出现由于别名导致语义解析错误。
实施例三
图4为本发明实施例三提供的一种行级安全的实现装置的结构图,该装置包括:解析模块31、派生表确定模块32和约束条件确定模块33。
在本实施例中,解析模块31,用于解析数据库语句确定操作类型和操作对象,其中,所述操作对象具有与其关联的安全策略函数;派生表确定模块32,用于在所述操作类型是查询操作时,根据所述安全策略函数确定所述操作对象对应的派生表,采用所述派生表更新所述数据库语句,执行更新后的数据库语句;约束条件确定模块33,用于在所述操作类型是非查询操作时,根据所述安全策略函数确定所述操作对象的约束条件,根据所述约束条件确定所述数据库语句是否执行成功;其中,所述非查询操作包括插入操作、更新操作或删除操作。
本发明实施例提供了一种行级安全的实现装置,在实现数据库的行级安全时,在数据库语句分析阶段就对数据库语句进行了改写,通过将操作对象替换为派生表的方式解决了原始数据库语句和安全策略函数谓词合并难的问题,同时,在存在多个谓词的情况下避免了多个谓词合并逻辑复杂容易出错的问题。
进一步地,派生表确定模块32,包括:
派生表形成单元,用于根据所述操作对象和所述安全策略函数的过滤条件形成派生表;
替换单元,用于采用所述派生表替换所述数据库语句中的所述操作对象。
进一步地,派生表形成单元具体用于如果所述操作对象具有至少两个与其关联的安全策略函数,则通过逻辑与连接符将所述至少两个安全策略函数对应过滤条件串联起来构成所述过滤条件;根据所述操作对象和所述过滤条件形成派生表。
进一步地,该装置还包括:
第一别名确定模块,用于如果所述操作对象包含别名,则将所述别名作为所述派生表的别名。
第二别名确定模块,用于如果所述操作对象不包含别名,则将所述操作对象的对象名作为所述派生表的别名。
进一步地,约束条件确定模块,包括:
添加单元,用于根据所述安全策略函数确定所述操作对象的约束条件,将所述约束条件添加至所述操作对象对应的基表的约束列表中。
判断单元,用于根据所述数据库语句确定针对所述操作对象的操作数据,判断所述操作数据是否满足所述操作对象对应基表的所述约束条件,根据判断结果确定所述数据库语句是否执行成功。
进一步地,操作对象包括:数据库对象表、可更新视图、数据库对象表的同义词或可更新视图的同义词。
本发明实施例所提供的行级安全的实现装置可执行本发明任意实施例所提供的行级安全的实现方法,具备执行方法相应的功能模块和有益效果。
实施例四
图5为本发明实施例四提供的一种设备的结构示意图,如图5所示,该设备包括处理器40、存储器41、输入装置42和输出装置43;设备中处理器40的数量可以是一个或多个,图5中以一个处理器40为例;设备中的处理器40、存储器41、输入装置42和输出装置43可以通过总线或其他方式连接,图5中以通过总线连接为例。
存储器41作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的行级安全的实现方法对应的程序指令/模块(例如,行级安全的实现装置中的解析模块31、派生表确定模块32和约束条件确定模块33)。处理器40通过运行存储在存储器41中的软件程序、指令以及模块,从而执行设备的各种功能应用以及数据处理,即实现上述的行级安全的实现方法。
存储器41可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据终端的使用所创建的数据等。此外,存储器41可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器41可进一步包括相对于处理器40远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置42可用于接收输入的数字或字符信息,以及产生与的用户设置以及功能控制有关的键信号输入。输出装置43可包括显示屏等显示设备。
实施例五
本发明实施例五还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行一种行级安全的实现方法,该方法包括:
解析数据库语句确定操作类型和操作对象,其中,所述操作对象具有与其关联的安全策略函数;
在所述操作类型是查询操作时,根据所述安全策略函数确定所述操作对象对应的派生表,采用所述派生表更新所述数据库语句,执行更新后的数据库语句;
在所述操作类型是非查询操作时,根据所述安全策略函数确定所述操作对象的约束条件,根据所述约束条件确定所述数据库语句是否执行成功;
其中,所述非查询操作包括插入操作、更新操作或删除操作。
当然,本发明实施例所提供的一种包含计算机可执行指令的存储介质,其计算机可执行指令不限于如上所述的方法操作,还可以执行本发明任意实施例所提供的行级安全的实现方法中的相关操作。
通过以上关于实施方式的描述,所属领域的技术人员可以清楚地了解到,本发明可借助软件及必需的通用硬件来实现,当然也可以通过硬件实现,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如计算机的软盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(RandomAccess Memory,RAM)、闪存(FLASH)、硬盘或光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
值得注意的是,上述行级安全的实现装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (8)
1.一种行级安全的实现方法,其特征在于,包括:
解析数据库语句确定操作类型和操作对象,其中,所述操作对象具有与其关联的安全策略函数;
在所述操作类型是查询操作时,根据所述安全策略函数确定所述操作对象对应的派生表,采用所述派生表更新所述数据库语句,执行更新后的数据库语句;
所述根据所述安全策略函数确定所述操作对象对应的派生表,采用所述派生表更新所述数据库语句,包括:
根据所述操作对象和所述安全策略函数的过滤条件形成派生表;
采用所述派生表替换所述数据库语句中的所述操作对象;
在所述操作类型是非查询操作时,根据所述安全策略函数确定所述操作对象的约束条件,根据所述约束条件确定所述数据库语句是否执行成功;
其中,所述非查询操作包括插入操作、更新操作或删除操作。
2.根据权利要求1所述的方法,其特征在于,所述根据所述操作对象和所述安全策略函数的过滤条件形成派生表,包括:
如果所述操作对象具有至少两个与其关联的安全策略函数,则通过逻辑与连接符将所述至少两个安全策略函数对应过滤条件串联起来构成所述过滤条件;
根据所述操作对象和所述过滤条件形成派生表。
3.根据权利要求1所述的方法,其特征在于,在采用所述派生表替换所述数据库语句中的所述操作对象之前,还包括:
如果所述操作对象包含别名,则将所述别名作为所述派生表的别名;
如果所述操作对象不包含别名,则将所述操作对象的对象名作为所述派生表的别名。
4.根据权利要求1所述的方法,其特征在于,所述根据所述安全策略函数确定所述操作对象的约束条件,根据所述约束条件确定所述数据库语句是否执行成功,包括:
根据所述安全策略函数确定所述操作对象的约束条件,将所述约束条件添加至所述操作对象对应的基表的约束列表中;
根据所述数据库语句确定针对所述操作对象的操作数据,判断所述操作数据是否满足所述操作对象对应基表的所述约束条件,根据判断结果确定所述数据库语句是否执行成功。
5.根据权利要求1-4任一项所述的方法,其特征在于,所述操作对象包括:数据库对象表、可更新视图、数据库对象表的同义词或可更新视图的同义词。
6.一种行级安全的实现装置,其特征在于,包括:
解析模块,用于解析数据库语句确定操作类型和操作对象,其中,所述操作对象具有与其关联的安全策略函数;
派生表确定模块,用于在所述操作类型是查询操作时,根据所述安全策略函数确定所述操作对象对应的派生表,采用所述派生表更新所述数据库语句,执行更新后的数据库语句;
所述派生表确定模块,包括:
派生表形成单元,用于根据所述操作对象和所述安全策略函数的过滤条件形成派生表;
替换单元,用于采用所述派生表替换所述数据库语句中的所述操作对象;
约束条件确定模块,用于在所述操作类型是非查询操作时,根据所述安全策略函数确定所述操作对象的约束条件,根据所述约束条件确定所述数据库语句是否执行成功;
其中,所述非查询操作包括插入操作、更新操作或删除操作。
7.一种设备,其特征在于,所述设备包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-5中任一所述的一种行级安全的实现方法。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-5中任一所述的一种行级安全的实现方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010290004.3A CN111488360B (zh) | 2020-04-14 | 2020-04-14 | 一种行级安全的实现方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010290004.3A CN111488360B (zh) | 2020-04-14 | 2020-04-14 | 一种行级安全的实现方法、装置、设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111488360A CN111488360A (zh) | 2020-08-04 |
CN111488360B true CN111488360B (zh) | 2023-04-18 |
Family
ID=71797977
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010290004.3A Active CN111488360B (zh) | 2020-04-14 | 2020-04-14 | 一种行级安全的实现方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111488360B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112416966B (zh) * | 2020-12-11 | 2024-01-26 | 北京顺达同行科技有限公司 | 即席查询方法、装置、计算机设备和存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7185357B1 (en) * | 2002-05-10 | 2007-02-27 | Oracle International Corporation | Method and mechanism for implementing synonym-based access control |
CN109947791A (zh) * | 2019-03-27 | 2019-06-28 | 上海达梦数据库有限公司 | 一种数据库语句优化方法、装置、设备及存储介质 |
CN110046205A (zh) * | 2019-04-22 | 2019-07-23 | 瀚高基础软件股份有限公司 | 一种关系型数据库行安全访问控制方法及系统 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7661141B2 (en) * | 2004-02-11 | 2010-02-09 | Microsoft Corporation | Systems and methods that optimize row level database security |
US8306999B2 (en) * | 2007-03-23 | 2012-11-06 | Sas Institute Inc. | Computer-implemented systems, methods, and computer program product for providing row-level security in a database network |
US8566909B2 (en) * | 2008-02-01 | 2013-10-22 | Oracle International Corporation | Row-level security with expression data type |
US8386448B2 (en) * | 2009-11-30 | 2013-02-26 | At&T Intellectual Property I, L.P. | Methods, systems, and computer program products for providing a generic database security application using virtual private database functionality with a common security policy function |
US9195841B2 (en) * | 2013-03-15 | 2015-11-24 | Sap Se | Automated and delegated model-based row level security |
US9600548B2 (en) * | 2014-10-10 | 2017-03-21 | Salesforce.Com | Row level security integration of analytical data store with cloud architecture |
US10438008B2 (en) * | 2014-10-30 | 2019-10-08 | Microsoft Technology Licensing, Llc | Row level security |
US10558662B2 (en) * | 2017-01-14 | 2020-02-11 | International Business Machines Corporation | Transforming a user-defined table function to a derived table in a database management system |
-
2020
- 2020-04-14 CN CN202010290004.3A patent/CN111488360B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7185357B1 (en) * | 2002-05-10 | 2007-02-27 | Oracle International Corporation | Method and mechanism for implementing synonym-based access control |
CN109947791A (zh) * | 2019-03-27 | 2019-06-28 | 上海达梦数据库有限公司 | 一种数据库语句优化方法、装置、设备及存储介质 |
CN110046205A (zh) * | 2019-04-22 | 2019-07-23 | 瀚高基础软件股份有限公司 | 一种关系型数据库行安全访问控制方法及系统 |
Non-Patent Citations (2)
Title |
---|
"达梦安全可信数据库管理系统(DMSecTrust6)";武汉达梦数据库有限公司;《中国知网》;20121231;第1-7页 * |
典型数据库安全分析与研究;武彬;《电脑知识与技术》;20080705(第19期);第10-11页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111488360A (zh) | 2020-08-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107402992B (zh) | 一种分布式NewSQL数据库系统和全文检索建立方法 | |
CN110291517B (zh) | 图数据库中的查询语言互操作性 | |
US20200342044A1 (en) | Managing compound xml documents in a repository | |
CN110795455B (zh) | 依赖关系解析方法、电子装置、计算机设备及可读存储介质 | |
US7401085B2 (en) | System and method for controlling the release of updates to a database configuration | |
CN107038222B (zh) | 数据库缓存实现方法及其系统 | |
JP3492247B2 (ja) | Xmlデータ検索システム | |
US11487742B2 (en) | Consistency checks between database systems | |
US10997131B1 (en) | Using a member attribute to perform a database operation on a computing device | |
CN110502532B (zh) | 远程数据库对象的优化方法、装置、设备和存储介质 | |
CN111708805A (zh) | 数据查询方法、装置、电子设备及存储介质 | |
CN112015722A (zh) | 数据库管理方法、数据血缘分析方法以及相关装置 | |
CN115543402A (zh) | 一种基于代码提交的软件知识图谱增量更新方法 | |
CN111488360B (zh) | 一种行级安全的实现方法、装置、设备及存储介质 | |
US20070174329A1 (en) | Presenting a reason why a secondary data structure associated with a database needs rebuilding | |
US11080332B1 (en) | Flexible indexing for graph databases | |
US20230289331A1 (en) | Model generation service for data retrieval | |
CN117421302A (zh) | 一种数据处理方法及相关设备 | |
US10838947B2 (en) | Consistency check for foreign key definition | |
US20230418803A1 (en) | Techniques for integrating data for multple instances of a data artifact | |
CN111752546A (zh) | 一种基于Excel的数据库对象设计管理平台、系统及方法 | |
CA2988688A1 (en) | Rdb system | |
CN112817931A (zh) | 一种增量版本文件的生成方法及装置 | |
Mittra | Database performance tuning and optimization: using Oracle | |
CN111221846B (zh) | 一种sql语句的自动翻译方法及装置 |
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 |