一种关系型数据库行安全访问控制方法及系统
技术领域
本发明属于数据库安全访问控制技术领域,尤其涉及一种关系型数据库行安全访问控制方法及系统。
背景技术
安全标记及强制访问控制是安全数据库中的重要机制,可以针对特定主体的允许或禁止访问,该特定主体可以是特定的用户或自定义的用户组,并且,访问控制可以是表级、列级,和行级。
其中,在实施行级数据访问控制时,通常针对需要进行访问控制的数据表建立有关行的访问权限等级文件,以及用户的访问权限等级文件,为了在这些文件之间建立关联,这些文件中均需创建主键,用户执行对某个数据表的查询时,系统需要找到与该数据表关联的有关行的等级文件,以及该用户的等级,执行查询的运算复杂度较高,且数据表较多,维护复杂。为了降低复杂度,技术人员将安全标记信息引入了要进行访问控制表中,例如,添加属性列,写入每条记录对应的安全等级,根据该列中的安全等级进行访问控制,但是,发明人发现,这种方法还存在以下问题:
1、需要额外的表来记录行级访问控制策略信息,该表记录着用户和用户的权限等信息,囊括了行级安全策略相关的全部信息,需要额外对这个表进行严密的权限保护和安全保护。如果这个表的数据发生损坏,整个行安全机制就会失效。
2、数据表中的普通数据与安全等级数据之间没有有效隔离,都可以进行人为修改,数据;对于安全等级列,缺乏有效的保护措施,表的拥有者或者管理员可以修改表结构删除安全标记列,无法起到强制访问控制的要求;
3、维护困难。行级安全控制机制不能自动触发,需要人为设置和维护,效率低且容易出现失误。
4、读写效率低。对于多个采用访问控制策略的数据表,若在创建安全等级属性列后,修改某个用户的等级信息,需要对每个数据表均要进行相应的人为修改,操作复杂。
5、破坏了用户的自有数据。用户数据包括用户创建的对象(比如表)以及用户存放在数据库中的数据信息。前述方法,修改了用户创建的表的模式,破坏了用户原有的数据,带来了数据一致性方面的问题。
发明内容
为克服上述现有技术的不足,本发明提供了一种关系型数据库行安全访问控制方法及系统,通过系统创建隐藏的访问权限属性列的方式,杜绝了访问权限被用户任意篡改的可能性,实现了强制访问控制。
为实现上述目的,本发明的一个或多个实施例提供了如下技术方案:
一种关系型数据库行安全访问控制方法,包括:
创建每个数据表文件时,均生成一个隐藏的属性列,用于标记每一条数据记录的安全等级;对于每个用户均设有安全等级信息;
当用户向数据库表文件写入数据时,获取所述用户相应的安全等级,映射至相应数据记录对应的隐藏属性列中;
基于所述属性列中的安全等级信息进行访问控制。
一个或多个实施例提供了一种服务器,包括:
用户信息管理模块,用于管理用户的基本信息和安全等级信息;
数据表文件管理模块,用于管理数据表文件,每一个数据表文件中,均创建了一个隐藏的属性列,用于标记每一条数据记录的安全等级;
以及,接收用户向数据库表文件写入的数据信息,同时获取该用户的信息,根据用户信息管理模块查找相应安全等级,映射至该数据表文件的隐藏数据列中。
一个或多个实施例提供了一种关系型数据库行安全访问控制系统,包括如所述的服务器和一个或多个客户端。
以上一个或多个技术方案存在以下有益效果:
本发明提供的是一种行安全强制访问控制方法,为每一个需要进行行安全访问控制的数据表增加一个隐藏的系统列,用于记录每条数据记录的安全等级;通过在用户写入数据时获取用户的安全等级,作为每条记录对应行的安全等级写入该隐藏的系统列中;在用户对该表格进行访问时,根据用户的安全等级和每一行的安全等级进行访问控制。由于该列由系统创建,任何人都不能对其进行修改,对访问等级信息起到了保护作用,真正实现了强制访问控制。
附图说明
构成本发明的一部分的说明书附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。
图1为本发明一个或多个实施例中关系型数据库行安全访问控制方法的流程图;
图2为本发明一个或多个实施例中添加访问权限属性列的示意图;
图3为本发明一个或多个实施例中访问控制示意图;
图4为本发明一个或多个实施例中数据的安全权限更新过程示意图。
具体实施方式
应该指出,以下详细说明都是示例性的,旨在对本发明提供进一步的说明。除非另有指明,本文使用的所有技术和科学术语具有与本发明所属技术领域的普通技术人员通常理解的相同含义。
需要注意的是,这里所使用的术语仅是为了描述具体实施方式,而非意图限制根据本发明的示例性实施方式。如在这里所使用的,除非上下文另外明确指出,否则单数形式也意图包括复数形式,此外,还应当理解的是,当在本说明书中使用术语“包含”和/或“包括”时,其指明存在特征、步骤、操作、器件、组件和/或它们的组合。
在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
实施例一
本实施例公开了一种关系型数据库行安全访问控制方法,对于数据库中需要进行行安全访问控制的数据表文件,均创建一个隐藏的属性列,用于标记每一条数据记录的安全等级;如图1所示,该行安全访问控制方法包括以下步骤:
步骤1:系统新增用户时,为该用户生成安全等级信息;
正常创建用户,此时,用户会自动拥有一个默认的安全等级。
也可以通过数据库安全管理员定义或者调整用户的安全等级。在系统中新增安全管理员,该安全管理员具备特殊的权限,他可以查看和修改用户的安全等级和行数据的安全等级。在系统中增加新的函数,用于查看和修改用户的安全等级和行数据的安全等级。新增的函数,仅安全管理员有权限使用,其它用户和管理员都无权使用,也不能被授予使用此函数的权限。创建用户时,用户会有一个默认的安全等级,安全管理员可以随时对用户的安全等级进行设置。
所述安全等级可以采用任意形式表示,例如数字,数字越大等级越高,又如颜色,颜色越深等级越高,也可以根据需要自定义其他形式,在此不做限定。
具体地,系统新增用户时,将所述用户账号、密码、权限等信息,以及生成的安全等级信息存储在一起。通过上述方式,无需为安全等级信息额外开辟存储空间,通过数据库系统现有的安全机制实现了安全等级信息的保护,使得非安全管理员无法访问及修改。
步骤2:当用户向数据库表文件写入数据时,获取所述用户相应的安全等级,映射至相应数据记录对应的隐藏属性列中;
具体来说,在写入数据时,会同时获取该用户的安全等级信息,将用户的安全等级信息作为该数据的安全等级信息与用户写入的数据一同写入磁盘。即,在用户向数据库表文件的每一行写入数据时,每一行数据的安全等级将自动被设置。用户写入的数据与每一行数据的安全等级信息物理上保存在一起,但由于行的安全等级信息是作为隐藏的系统列保存的,普通用户无法读取和更改,使得用户数据与行级安全等级数据进行了有效的隔离。
上述步骤中,在创建表文件时自动添加隐藏系统列,用来保存每一行的安全等级信息。这个列的信息与用户的数据存储在一起,但是该隐藏系统列的数据对用户却不可见,用户也无法进行修改,使得用户定义的表模式没有被修改和破坏,并实现了用户数据与安全等级数据的有效隔离,同时又让安全等级数据与用户数据在物理上保存在一起,无需额外的文件或容器。对于数据库中的用户信息,也增加一个新的隐藏属性,即用户的安全等级,用户的安全等级为1~9999之间的整数。用户的安全等级信息,对于用户同样是不可见且不可修改的,同时,用户的安全等级信息也是与用户信息物理保存在一起,无需额外的文件或容器。
作为一个示例,如图2所示,有三个用户,分别是用户A,用户B,用户C,其各自的安全等级分别为5,6,10。用户A插入了数据D1,则本系统会在写入数据D1时,获取用户A的安全等级5,并将D1的行安全等级也设为5。同理,用户B写入的数据D2的行安全等级为6,用户C写入的数据D3的行安全等级为10。D1,D2,D3的行安全等级与D1,D2,D3物理保存在一起,但用户A,用户B,用户C均无法读取和修改行安全等级,实现了行安全数据和用户数据的有效隔离。
用户在读写数据时,自动将用户的安全等级与每一行数据的安全等级进行比对,如果用户安全等级>=行安全等级,则允许读写操作。
步骤3:接收用户针对数据表文件的访问、条件查询或更新请求,基于该数据表文件的安全等级属性列进行行安全访问控制。
(1)访问:当用户读取数据库信息时,行级强制访问控制会控制用户所能读取的信息。
接收用户针对数据表文件的访问请求,查找相应安全等级,获取数据库表文件中符合该安全等级的记录。具体地,用户仅能够访问该表文件中安全等级属性<=该用户安全等级的记录。
如图3所示,当进行数据读取时,用户A能够读取到行安全等级<=5的数据,即D1。用户B能够读取到行安全等级<=6的数据,即D1,D2。用户C能够读取到行安全等级<=10的数据,即D1,D2,D3。
(2)条件查询
接收用户针对数据表文件的查询请求,所述查询请求包含查询条件,查找相应安全等级,查询所述数据库表文件中符合该用户访问权限、且满足查询条件的记录。
所述查询过程包括:根据查询条件生成查询语法树,将安全等级属性<=该用户安全等级作为一个筛选条件加入所述查询语法树,执行查询。具体地,首先为用户所执行的查询生成一颗正常的查询语法树,然后改写这一查询语法树,在其中增加一个新的筛选条件,即每一行数据的行安全等级必须<=用户本身的安全等级。之后,本系统的查询执行器将执行此语法树,对用户期望的数据进行过滤,只保留行安全等级<=用户本身的安全等级的数据,并进行展示。此过程中,每一行数据中的保存行安全等级信息的隐藏系统列,会被映射为一个真正的列被查询执行器使用,以提高效率,最终呈现给用户的,是基于该用户的安全等级运行访问的数据结果。
(3)更新:当用户对数据库信息进行更新操作时,行级强制访问控制会控制用户所能更新的信息。
接收用户针对数据表文件的更新请求,所述更新请求中包括待更新的行、更新操作(删除或修改),查找相应安全等级,对满足所述安全等级的行执行更新。
本系统首先会使用如步骤3所示方法,对用户要更新的数据进行过滤,只保留行安全等级<=用户本身的安全等级的数据,并进行更新,同时,会把更新后的数据的行安全等级更新为与执行此更新操作的用户的安全等级一致。
如图4所示,当对数据进行更新时,被更新的数据的行安全等级必须<=用户的安全等级,且更新后的数据的行安全等级也更新为与执行更新操作的用户的安全等级一致。用户C更新了数据D1后,D1的安全等级也更新为10。
该安全等级属性列不影响用户对数据表的正常更改操作,允许任意用户随时对表格进行修改,若对数据表进行了行的删除或增加,系统会根据该数据表中当前的数据内容对安全等级属性列进行自动更新。用户在往表里插入或者修改数据时,插入或者修改的数据行,都具有跟此用户相同的安全等级,行数据的安全等级被自动保存到隐藏的系统列中。
实施例二
基于实施例一提供的访问控制方法,本实施例的目的是提供一种关系型数据库行安全访问控制系统,包括数据库服务器和一个或多个客户端。
所述数据库服务器包括:
用户信息管理模块,用于管理用户的用户名、密码、权限(如:管理员、普通用户)等基本信息,和用户安全等级信息;当接收到新用户的信息时,为该新用户生成默认安全等级并存储;
以及,当接收到管理员权限用户的编辑指令时,进行相应编辑,例如删除用户信息、对各用户的安全等级信息进行修改等。
用户注册模块,用于接收客户端的新用户注册请求,获取该新用户设定的用户名和密码,并存储至用户信息管理模块;
用户登陆模块,用于接收客户端的数据库访问请求,所述请求包括用户名和密码,查找用户信息管理模块中是否包含与所述用户名和密码一致的用户,若包括,则登陆成功。
数据表文件管理模块,用于管理数据表文件,每一个数据表文件中,均创建了一个隐藏的属性列,用于标记每一条数据记录的安全等级;
接收用户发送的表文件创建请求,判断该用户是否具备创建权限,若具有,创建数据表并生成隐藏的安全等级属性列;
以及,接收用户经由客户端向数据库表文件写入的数据信息,同时获取该用户的信息,根据用户信息管理模块查找相应安全等级,映射至该数据表文件的隐藏数据列中。
数据访问模块,接收到用户关于该数据库表文件的访问请求时,根据用户信息管理模块查找相应安全等级,获取数据库表文件中符合该安全等级的记录返回。
数据查询模块,接收到用户关于该数据库表文件的查询条件时,根据用户信息管理模块查找相应安全等级,获取所述数据库表文件中符合该用户访问权限,且满足所述查询条件的记录并返回。
数据更新模块,接收用户针对数据表文件的更新请求,所述更新请求中包括待更新的行、更新操作(删除或修改),根据用户信息管理模块查找相应安全等级,对满足所述安全等级的行执行更新。
所述一个或多个客户端用于访问数据库服务器,用户可基于账号和密码进行登陆,待服务器认证成功后,即可进行数据的查询、创建和编辑等操作。具体包括:
用户注册模块,接收新用户注册请求,获取该新用户设定的用户名和密码,并发送至服务器;
用户登陆模块,接收用户输入的用户名和密码并发送至服务器;
表文件创建模块,接收用户针对表文件的创建请求并发送至服务器,在获取服务器允许创建的消息后创建表文件,接收用户对表结构的编辑;
表文件访问模块,接收用户针对表文件的访问请求并发送至服务器,从服务器获取符合该用户访问权限的数据记录;
表文件查询模块,接收用户针对表文件的查询请求并发送至服务器,从服务器获取符合该用户访问权限,以及符合查询请求的数据记录。
以上实施例二中涉及的各步骤与方法实施例一相对应,具体实施方式可参见实施例一的相关说明部分。
以上一个或多个实施例具有以下技术效果:
本发明提供的是一种行安全强制访问控制方法,为每一条记录增加一个隐藏的系统列,通过在用户写入数据时获取用户的安全等级,作为每条记录对应的行安全等级写入隐藏系统列中。在用户对该表格进行访问时,根据用户的安全等级和每一行的安全等级进行访问控制。由于该列由系统创建,任何人都不能对其进行修改,对访问等级信息起到了保护作用,真正实现了强制访问控制;
通过添加隐藏系统列,在执行用户查询操作时,可通过索引等方式快速检索到符合该用户访问权限的数据。并且,由于该列由系统自动添加,该列的添加不影响后续对数据表的编辑,若要添加或删除数据记录,系统会根据当前的数据表文件对该访问权限属性列进行动态更新;若要提高或降低用户的访问权限,可以通过使用安全管理员修改用户的安全等级来实现,安全管理员也可以直接定义行级的安全等级信息。
本领域技术人员应该明白,上述本发明的各模块或各步骤可以用通用的计算机装置来实现,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。本发明不限制于任何特定的硬件和软件的结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
上述虽然结合附图对本发明的具体实施方式进行了描述,但并非对本发明保护范围的限制,所属领域技术人员应该明白,在本发明的技术方案的基础上,本领域技术人员不需要付出创造性劳动即可做出的各种修改或变形仍在本发明的保护范围以内。