一种HBase数据读取控制方法技术领域
本发明涉及一种数据读取控制方法,尤其涉及一种HBase数据读取控制的方法。
背景技术
HBase是一个分布式的、面向列的开源数据库,在Hadoop之上提供了类似于
Bigtable的能力,是Apache的Hadoop项目的子项目,其不同于一般的关系数据库而是一个
适合于非结构化数据存储的数据库,另一个不同之处是HBase是基于列的而不是基于行的
模式,以表的形式存储数据,表由行和列组成,列划分为若干个列族(row family),如下表
所示。
众所周知,大数据时代为类似HBase等非结构化数据库提供了诸多机会,HBase凭
借其在海量数据的良好扩展性和高效的读写能力,吸引了更多公司的重视,然而,在众多机
遇的背后,HBase也面临着很多挑战,比如构建和运维HBase集群是一个非常有挑战性的工
作,如何保证HBase的安全性自然就成了一个绕不开的话题。实际上,NoSQL存在的产品安全
性不高的问题一直成为各路反对者的诟病,如果没有访问控制,存储其中的数据可以被随
意访问甚至执行删改等误操作会造成很多潜在的风险,对企业而言也是无法接受的,特别
是在多用户同时使用一个HBase集群的情况,每个用户可以操作的数据是需要隔离的,不同
的用户可以操作的数据是不同的,但如果所有事情都由管理员处理,沟通的代价会很高而
且管理员不得不处理一些Application相关的工作导致管理低效,因此,HBase的访问控制,
就成为了一个很重要的需求。
发明内容
本发明所要解决的技术问题是提供一种HBase数据读取权限控制的方法,解决
HBase存储数据安全性不高的问题,防范HBase数据被随意访问甚至执行删改等误操作造成
的潜在风险。
为解决上述问题,本发明提供了一种HBase数据读取权限控制的方法,其中,包括
如下步骤:a)预先设置每个用户对应的用户组及用户组对应的HBase表的读取权限;b)通过
统一查询接口进行HBas数据读取,并在读取数据时进行用户身份认证及权限匹配控制;c)
对有权限访问HBase数据的用户,通过调用Hbase提供的API接口进行数据读取并返回给客
户端。
上述的HBase数据读取控制方法,其中,所述步骤a)中用户对应的用户组及用户组
对应的HBase表的读取操作关系,使用主外键进行关联,并存放到关系型数据库中。
上述的HBase数据读取控制方法,其中,所述关系型数据库中创建有三种数据库
表,分别为用户表、用户组表和权限控制表,所述用户表中存储有用户名及其对应的用户
组,所述权限控制表中存储有用户组及其对应的HBase表的操作权限。
上述的HBase数据读取控制方法,其中,所述用户表中存储有用户id,用户名,密码
和用户组id,所述用户组表中存储有用户组id和用户组名,所述权限控制表中存储有用户
组id,HBase表名,HBase列簇和HBase列名,所述用户表里面的用户组id跟用户组表的用户
组id为主外键关系,所述用户组表的用户组id跟权限控制表的用户组id为主外键关系。
上述的HBase数据读取控制方法,其中,所述步骤b)将所述关系数据库中用户及其
对应的HBase表操作权限缓存到内存中,,按照用户加上HBase表名作为key值,以HBase列簇
及HBase列名作为Value值存储到第一HashMap表中,并启用守护线程,定时查询数据库,并
将数据更新到第一HashMap表中。
上述的HBase数据读取控制方法,其中,所述步骤b)中的统一查询接口使用Java远
程消息交换协议进行通信,通过注册端口和服务名,对客户端提供查询服务;所述统一查询
接口启动后将用户表中的用户名及用户密码存储到第二HashMap表中,用于对来自客户端
的用户名和密码进行验证,对通过验证的用户返回唯一的临时口令,并将该临时口令和用
户名一起存储到第二HashMap表中,用于后续查询使用。
上述的HBase数据读取控制方法,其中,所述步骤c)接收来自客户端的口令、用户
名、HBase表名及查询条件后;首先通过口令及用户名到第二HashMap表中进行匹配,如果在
第二HashMap表中不存在该记录,则判定用户身份为非法,直接返回客户端错误信息;通过
合法验证的用户,根据用户名、HBase表到第一HashMap表中进行匹配,获取该用户对该
HBase表的操作权限,然后遍历该集合数据,验证查询的HBase列簇或HBase列值是否在该集
合数据中,将所有满足权限数据的查询结果通过对象集合的方式返回到客户端,如果权限
数据验证不通过,则返回客户端权限不足的消息。
上述的HBase数据读取控制方法,其中,所述步骤c)通过SCAN方式或GET方式调用
HBase的API接口进行数据查询操作。
本发明对比现有技术有如下的有益效果:HBase的数据权限控制是依赖于Linux用
户进行,在多用户的情况只依赖于Linux去管理用户是很难管理的,且在不同用户之前的权
限可能会重叠,所以依赖于Linux用户进行数据权限管控只能做到粗粒度的权限控制,无法
满足多用户下的灵活权限控制管理,本发明采用非嵌入式的方式进行HBase数据权限管控,
不依赖与Linux用户而是所有用户采用虚拟用户,可以无限制的进行用户增加修改,不影响
HBase集群的性能。本发明在数据权限管控方面可以做到细粒度地控制用户读取HBase的
表、列簇、列等信息,灵活地控制各个用户的权限以及分配不同的用户组来管理有相同属性
的用户,已达到快速、方便、灵活的管理用户读取HBase数据的权限,本发明在数据权限方面
更加灵活,且无需安装,因此更为高效,实用性强,易于推广。
附图说明
图1为本发明的HBase数据读取控制流程示意图;
图2为本发明的HBase数据读取控制的权限模型表结构示意图;
图3为本发明的HBase数据读取控制的用户身份认证流程图;
图4为本发明的HBase数据查询权限控制流程图。
具体实施方式
下面结合附图和实施例对本发明作进一步的描述。
图1为本发明的HBase数据读取控制流程示意图。
请参见图1,本发明提供的HBase数据读取控制方法,其中,包括如下步骤:
步骤S1:预先设置每个用户对应的用户组及用户组对应HBase表的读取权限;
步骤S2:通过统一查询接口读取数据时,进行用户身份认证及权限匹配,进行数据
读取权限控制;
步骤S3:对有权限访问HBase数据的用户,通过调用HBaseAPI接口进行数据读取并
返回给客户端。
步骤S1:预先设置每个用户对应的用户组及用户组对应的HBase表的读取权限;
步骤S2:通过统一查询接口进行HBas数据读取,并在读取数据时进行用户身份认
证及权限匹配控制;
步骤S3:对有权限访问HBase数据的用户,通过调用Hbase提供的API接口进行数据
读取并返回给客户端。
图2为本发明的HBase数据读取控制的权限模型表结构示意图。
请参见图2,本发明使用关系型数据库创建三张数据库表,分别为用户表(user)、
用户组表(group)、权限控制表(authority),其中所述用户表存放的是用户信息包括用户
id、用户名、密码、用户组id等信息,所述用户组表存放用户组信息包括用户组id、用户组名
等信息,所述权限控制表存放用户组对应的权限信息包括用户组id、HBase表名、HBase列
簇、HBase列名等信息,其中,所述用户表里面的用户组id跟所述用户组表的id是为主外键
关系,所述用户组表的id跟所述权限控制表的用户组id为主外键关系。
本发明的统一查询接口使用Java远程消息交换协议JRMP(Java Remote
Messaging Protocol)进行通信,通过注册端口和服务名,对客户端提供查询服务,查询接
口启动后读取关系型数据库中的数据并将用户及其对应的HBase表操作权限,按照用户加
上HBase表名作为key值、HBase列簇及HBase列名作为Value值存储到第一HashMap表中并启
用守护线程,通过定时每3秒查询一次数据库并将数据更新到第一HashMap表中,确保权限
数据操作后可以实时生效,将用户名及用户密码存储到另外的第二HashMap表中,用于验证
用户的身份。客户端通过查询接口的IP、端口号及服务名进行连接查询接口并将分配的用
户名和密码传输到查询接口上进行用户验证,通过验证的用户会返回唯一的临时口令,用
于后续查询使用,如图2所示。
本发明的客户端可以通过将查询HBase的条件及临时口令调用查询接口的查询方
法进行数据查询,查询接口首先验证临时口令是否正确,通过验证后,根据用户名及
HashMap中的数据进行匹配,确认该用户是否有权限查询该HBase的表、列簇及列,对于没有
权限的权限,则直接返回无权限查询消息,通过权限验证的,通过HBase表名调用HBase的
API接口,使用传递过来的查询条件进行查询,并将查询结果返回给客户端,如图3所示。
本发明在所述关系型数据库中创建用户表(user)、用户组表(group)、权限控制表
(authority),编程实现远程HBase查询服务,服务端启动后,注册端口及服务名用于客户端
调用,初始化权限数据读取,通过用户表(user)、用户组表(group)、权限控制表
(authority)三张表关联获取用户及其对应的HBase表的读取权限,通过JDBC连接数据库,
通过关联SQL语句获取用户及其HBase表的操作权限集合,遍历该集合,以用户名及HBase表
名做为Key值,HBase列簇、列拼接在一起并写入List集合中作为Value值,将这些数据存储
到第一HashMap表中,另外用户名作为Key值,用户密码作为Value值存储到另外的第二
HashMap表中用于合法用户验证,启动守护进程,每3秒通过读取数据库的数据,进行用户权
限数据更新以保证用户权限新增或修改可以实时生效。
本发明的服务端实现两个接口功能,分别为用户身份认证接口和数据查询接口,
其中用户身份接口用于校验用户身份的合法性,由客户端传递过来用户名及密码,根据缓
存的第二HashMap表的用户数据进行匹配,匹配通过的返回临时口令并将该口令和用户名
一起存储到第二HashMap表中,配不通过的只返回错误信息。
本发明的数据查询接口是用于HBase数据查询、由客户端传递过来的口令、用户
名、HBase表名及查询条件,首先通过口令及用户名到第二HashMap表中进行匹配,如果在第
一HashMap表中不存在该记录,则用户身份是非法,直接返回客户端错误信息,通过合法验
证的用户,根据用户名和HBase表到存储权限数据的第一HashMap表中进行匹配,获取该用
户对该HBase表的操作权限,然后遍历该集合数据,验证查询的列簇或列值是否在该集合数
据中,满足所有的查询数据都在该集合数据中,则调用HBase的API接口进行SCAN或GET操作
进行数据查询,将返回结果通过对象集合的方式返回到客户端,权限数据验证不通过的,则
返回客户端权限不足的消息。
虽然本发明已以较佳实施例揭示如上,然其并非用以限定本发明,任何本领域技
术人员,在不脱离本发明的精神和范围内,当可作些许的修改和完善,因此本发明的保护范
围当以权利要求书所界定的为准。