CN105956154A - 权限控制方法及装置 - Google Patents
权限控制方法及装置 Download PDFInfo
- Publication number
- CN105956154A CN105956154A CN201610321690.XA CN201610321690A CN105956154A CN 105956154 A CN105956154 A CN 105956154A CN 201610321690 A CN201610321690 A CN 201610321690A CN 105956154 A CN105956154 A CN 105956154A
- Authority
- CN
- China
- Prior art keywords
- authority
- user
- described user
- create
- data base
- 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.)
- Pending
Links
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/21—Design, administration or maintenance of databases
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
- G06F21/6227—Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Bioethics (AREA)
- Computer Security & Cryptography (AREA)
- Computer Hardware Design (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种权限控制方法及装置,包括:接收针对数据库的表创建请求;判断发出所述表创建请求的用户所具有的针对所述数据库的权限是否能够覆盖全部表创建权限;若所述用户所具有的针对所述数据库的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权,并创建表;若所述用户所具有的针对所述数据库的权限不能覆盖全部表创建权限,则执行所述用户所欠缺的表创建权限的授权,并创建表。本发明提出的权限控制方法及装置,能够避免重复授权。
Description
技术领域
本发明涉及数据处理技术领域,特别是指一种权限控制方法及装置。
背景技术
Hadoop是一个由Apache基金会所开发的分布式***基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序,从而充分利用集群进行高速运算和存储。Hadoop实现了一个分布式文件***(Hadoop Distributed FileSystem),简称HDFS。HDFS有高容错性的特点,并且设计用来部署在低廉的硬件上;而且它提供高吞吐量来访问应用程序的数据,适合那些有着超大数据集的应用程序。HDFS放宽了POSIX(Portable Operating System Interface,可移植操作***接口)的要求,可以以流的形式访问文件***中的数据。Hadoop的框架最核心的设计就是:HDFS和MapReduce。MapReduce是一种编程模型,用于大规模数据集的并行运算。HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算。
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供sql(Structured Query Language,结构化查询语言)查询功能,可以将sql语句转换为MapReduce任务进行运行。Hadoop和hive是目前业界广泛使用的数据存储以及查询的分布式解决方案。为了生产环境安全因素的需要,需要对hive中的权限进行控制。
当前hive中的默认的权限认证,提供了对数据库和表的授权控制,可以对用户和角色授权。但是,这种权限控制还存在比较显著的问题:用户每创建一个表,***都会自动对该新建的表进行授权,这样将会发生表被重复授权的情况,导致元数据表的压力和增加返回的数据结果。
发明内容
有鉴于此,本发明的目的在于提出一种权限控制方法及装置,能够避免重复授权。
基于上述目的本发明实施例提供的权限控制方法,包括:
接收针对数据库的表创建请求;
判断发出所述表创建请求的用户所具有的针对所述数据库的权限是否能够覆盖全部表创建权限;
若所述用户所具有的针对所述数据库的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权,并创建表;
若所述用户所具有的针对所述数据库的权限不能覆盖全部表创建权限,则执行所述用户所欠缺的表创建权限的授权,并创建表。
在一些实施方式中,所述判断发出所述表创建请求的用户所具有的针对所述数据库的权限是否能够覆盖全部表创建权限的步骤包括:
查询所述数据库的表权限数据表中存在的所述用户具有的权限;
判断所述用户具有的权限是否能够覆盖全部表创建权限;
如果用户具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
如果用户具有的权限不能覆盖全部表创建权限,则查询所述数据库的表权限数据表中存在的所述用户所在组具有的权限;
判断所述用户具有的权限以及所述用户所在组具有的权限是否能够覆盖全部表创建权限;
如果用户具有的权限以及所述用户所在组具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
如果用户具有的权限以及所述用户所在组具有的权限不能覆盖全部表创建权限,则查询所述数据库的表权限数据表中存在的所述用户所拥有的角色具有的权限;
判断所述用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限是否能够覆盖全部表创建权限;
如果用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
如果用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限不能覆盖全部表创建权限,则执行所述用户所欠缺的表创建权限的授权。
在一些实施方式中,所述判断发出所述表创建请求的用户所具有的针对所述数据库的权限是否能够覆盖全部表创建权限的步骤包括:
发出所述用户所具有的针对所述数据库的权限查询请求;
判断查询结果是否为空;
若查询结果为空,则重复发出所述用户所具有的针对所述数据库的权限查询请求。
在一些实施方式中,所述重复发出所述用户所具有的针对所述数据库的权限查询请求的步骤中的重复发出权限查询请求的次数大于或等于预设重试次数;
若重复发出权限查询请求的次数大于或等于预设重试次数之后,所述查询结果仍然为空,则不再重试,并返回查询失败的结果。
在一些实施方式中,所述接收针对数据库的表创建请求的步骤之前还包括:
创建超级管理员账号白名单;
在对所述用户执行授权或解除权限之前,判断所述用户是否存在于所述超级管理员账号白名单中;
若所述用户存在于所述超级管理员账号白名单中,则对所述用户执行授权或解除权限;
若所述用户不存在于所述超级管理员账号白名单中,则不对所述用户执行授权或解除权限。
本发明实施例的另一个方面,还提供了一种权限控制装置,包括:
请求接收模块,用于接收针对数据库的表创建请求;
权限覆盖判断模块,用于判断发出所述表创建请求的用户所具有的针对所述数据库的权限是否能够覆盖全部表创建权限;
表授权模块,若所述用户所具有的针对所述数据库的权限能够覆盖全部表创建权限,则用于不再针对所述用户执行表创建权限的授权;若所述用户所具有的针对所述数据库的权限不能覆盖全部表创建权限,则用于执行所述用户所欠缺的表创建权限的授权;
表创建模块,用于创建表。
在一些实施方式中,所述权限覆盖判断模块,具体用于:
查询所述数据库的表权限数据表中存在的所述用户具有的权限;
判断所述用户具有的权限是否能够覆盖全部表创建权限;
如果用户具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
如果用户具有的权限不能覆盖全部表创建权限,则查询所述数据库的表权限数据表中存在的所述用户所在组具有的权限;
判断所述用户具有的权限以及所述用户所在组具有的权限是否能够覆盖全部表创建权限;
如果用户具有的权限以及所述用户所在组具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
如果用户具有的权限以及所述用户所在组具有的权限不能覆盖全部表创建权限,则查询所述数据库的表权限数据表中存在的所述用户所拥有的角色具有的权限;
判断所述用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限是否能够覆盖全部表创建权限;
如果用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
如果用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限不能覆盖全部表创建权限,则执行所述用户所欠缺的表创建权限的授权。
在一些实施方式中,所述权限覆盖判断模块,具体用于:
查询所述用户所具有的针对所述数据库的权限;
判断查询结果是否为空;
若查询结果为空,则重复发出所述用户所具有的针对所述数据库的权限查询请求。
在一些实施方式中,重复发出权限查询请求的次数大于或等于预设重试次数;所述权限覆盖判断模块,具体用于:
若重复发出权限查询请求的次数大于或等于预设重试次数之后,所述查询结果仍然为空,则不再重试,并返回查询失败的结果。
在一些实施方式中,所述的装置,还包括:
白名单创建模块,用于创建超级管理员账号白名单;
用户权限判断模块,在对所述用户执行授权或解除权限之前,用于判断所述用户是否存在于所述超级管理员账号白名单中;
用户授权模块,若所述用户存在于所述超级管理员账号白名单中,则用于对所述用户执行授权或解除权限;若所述用户不存在于所述超级管理员账号白名单中,则用于不对所述用户执行授权或解除权限。
从上面所述可以看出,本发明实施例提供的权限控制方法,通过在创建表之前判断用户已经具有的权限是否覆盖了全部表创建权限,从而根据用户权限的覆盖程度对用户进行相应的授权,而不是如现有技术中那样直接对创建表的用户赋予全部的表权限,从而能够避免对用户进行重复授权的问题,减小了元数据表的压力并减少了返回的数据结果,节约了***资源。
附图说明
图1为本发明提供的权限控制方法的一个实施例的流程示意图;
图2为本发明提供的权限控制方法实施例中用户的表创建权限判断过程的具体流程示意图;
图3为本发明提供的权限控制方法实施例中权限查询过程的具体流程示意图;
图4为本发明提供的权限控制方法实施例中用户权限判断过程的具体流程示意图;
图5为本发明提供的权限控制方法的另一个实施例的流程示意图;
图6为本发明提供的权限控制装置的一个实施例的模块结构示意图;
图7为本发明提供的权限控制装置的另一个实施例的模块结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。
需要说明的是,本发明实施例中所有使用“第一”和“第二”的表述均是为了区分两个相同名称非相同的实体或者非相同的参量,可见“第一”“第二”仅为了表述的方便,不应理解为对本发明实施例的限定,后续实施例对此不再一一说明。
本发明实施例的第一个方面,提出了一种能够避免重复授权的权限控制方法的一个实施例。如图1所示,为本发明提供的权限控制方法的一个实施例的流程示意图。
所述权限控制方法,包括以下步骤:
步骤101:接收针对数据库的表创建请求;
所述针对数据库的表创建请求是指,需要在所述数据库中创建一个新的表(TABLE)的请求,在接收到所述表创建请求,通常情况下,hive会自动根据hive.security.authorization.createtable.owner.grant参数中设置的权限对创建表的用户进行针对其创建的表的授权(即该用户对自己创建的表具有哪些权限),如果请求在所述数据库中创建表的用户已经具有了针对所述数据库的跟表有关的权限,就有极大可能会导致重复的授权;因此,这里,在接收到表创建请求后,并不直接根据hive.security.authorization.createtable.owner.grant参数中设置的权限对创建表的用户进行授权,而是首先进行步骤102;
步骤102:判断发出所述表创建请求的用户所具有的针对所述数据库的权限是否能够覆盖全部表创建权限;所述全部表创建权限是指用户创建表时会依照hive.security.authorization.createtable.owner.grant参数而被赋予的全部针对该被创建的表的权限,这里,需要判断所述用户已经具有的针对所述数据库的权限,是不是能够覆盖hive.security.authorization.createtable.owner.grant参数中设置的所有权限;
通常,Hive的权限参见下表1:
表1Hive权限
步骤103:若所述用户所具有的针对所述数据库的权限能够覆盖全部表创建权限,说明所述用户已经具备了创建表的用户所需要具备的权限,不需要执行额外的授权,则不再针对所述用户执行表创建权限的授权,并根据所述用户的请求创建一个新的表;
步骤104:若所述用户所具有的针对所述数据库的权限不能覆盖全部表创建权限,则执行所述用户所欠缺的表创建权限的授权,并创建表;即,在判断所述用户所具有的针对所述数据库的权限不能覆盖全部表创建权限时,则将所述用户已有的权限找出与hive.security.authorization.createtable.owner.grant参数中设置的所有权限进行比较,并得到用户不具有的权限,然后将用户不具有的权限(即所述用户所欠缺的表创建权限)授权给所述用户,一方面保证了用户权限的完整,另一方面又防止了重复授权。
从上述实施例可以看出,本发明实施例提供的权限控制方法,通过在创建表之前判断用户已经具有的权限是否覆盖了全部表创建权限,从而根据用户权限的覆盖程度对用户进行相应的授权,而不是如现有技术中那样直接对创建表的用户赋予全部的表权限,从而能够避免对用户进行重复授权的问题,减小了元数据表的压力并减少了返回的数据结果,节约了***资源。
hive中的权限控制分为用户(user)、角色(role)、组(group)。管理员可以对用户、组授予/解除权限,也可以对角色进行授予/解除权限。管理员用户也可以把角色授权给用户或者组,这样用户或者组就可以拥有该角色所拥有的权限了。可以将数据库的权限、表的权限、分区的权限分别授予用户、角色、组这三个不同的对象。
因此,进一步的,在一些可选实施方式中,所述判断发出所述表创建请求的用户所具有的针对所述数据库的权限是否能够覆盖全部表创建权限的步骤102还可具体包括以下步骤:
步骤201:查询所述数据库的表权限数据表中存在的所述用户具有的权限;
步骤202:判断所述用户具有的权限是否能够覆盖全部表创建权限;
步骤203:如果用户具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
步骤204:如果用户具有的权限不能覆盖全部表创建权限,则查询所述数据库的表权限数据表中存在的所述用户所在组(GROUP)具有的权限;
步骤205:判断所述用户具有的权限以及所述用户所在组具有的权限是否能够覆盖全部表创建权限;
步骤206:如果用户具有的权限以及所述用户所在组具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
步骤207:如果用户具有的权限以及所述用户所在组具有的权限不能覆盖全部表创建权限,则查询所述数据库的表权限数据表中存在的所述用户所拥有的角色(ROLE)具有的权限;
步骤208:判断所述用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限是否能够覆盖全部表创建权限;
步骤209:如果用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
步骤210:如果用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限不能覆盖全部表创建权限,则执行所述用户所欠缺的表创建权限的授权;
可选的,在进行每一步查询时,可以将查询得到的权限进行汇总,得到用户针对表的最大权限集合;在执行所述用户所欠缺的表创建权限的授权的步骤时,可以先比较所述最大权限集合和所述全部表创建权限之间的差别,从而提取出未被覆盖到的表创建权限,用于给用户进行授权。
通过上述实施例,将用户、用户所在组和用户所拥有的角色的权限均进行查询,从而完整的查询了所述用户所具备的权限,最大程度地减少了重复授权的几率。
hive使用DataNucleus(一种框架名称,中文直译可译为数据核)作为持久化方案。hive启用权限认证的情况下,在同一台机器上同时运行多个hive cli实例的时候,会有一定的几率返回空值,会导致授权结果查询错误。DataNucleus Access Platform(数据核访问平台)是一个兼容各种标准的Java数据持久化框架,兼容JDO1、JDO2、JDO2.1、JDO2.2、JDO2.3、JPA1、JPA2等Java标准。
因此,较佳的,在一些可选实施方式中,参照附图3,所述判断发出所述表创建请求的用户所具有的针对所述数据库的权限是否能够覆盖全部表创建权限的步骤102还可具体包括以下步骤:
步骤301:发出所述用户所具有的针对所述数据库的权限查询请求;
步骤302:判断查询结果是否为空;
步骤303:若查询结果为空,说明出现了权限查询错误,则重复发出所述用户所具有的针对所述数据库的权限查询请求。
通过上述实施例,增加查询重试机制,当获取权限查询结果为空的时候,进行重试,直到获取到权限数据或者达到预设重试次数后获取的查询结果均为空值时为止,从而减小了因查询结果为空而对授权过程产生的影响。
具体的,在一些可选实施方式中,上述实施例可以采用以下方法进行实现:
修改hive metastore(元数据存取)相关的代码,对于DataNucleus的持久化类中的与权限操作相关的类,其对应于元数据中的权限控制的表;hivemetastore是hive工程中的一个子项目,通常译为hive元数据存取,这个模块的主要作用是用来与存储元数据信息的库(支持mysql、oracle等关系型数据库)进行交互,这个模块存储hive的元数据信息,包括表信息、分区信息、权限信息等等;
每次查询(Query)操作,都会通过DataNucleus查询权限控制的表;
对于返回的查询结果,进行一个权限对象的检查;
如果发现为空,就需要进行重试。
可选的,在一些实施方式中,所述重复发出所述用户所具有的针对所述数据库的权限查询请求的步骤中的重复发出权限查询请求的次数大于或等于预设重试次数;所述预设重试次数的选取标准为,当达到所述预设重试次数时,基本上没有出现查询失败的结果,因此,根据不同的实际情况,所述预设重试次数可以选择不同的值;可选的,所述预设重试次数为3次,在压力测试下的结果,10000次并发过程中,并没有再次出现查询结果错误的情况;
这里,压力测试指的是,在高并发等极端情况下进行测试,看***是否能够正确执行相应的任务,这里指的是,在单位时间内有大量的请求同时查询表的权限的情况下,即高并发情况下,都能返回正确的结果;
参照附图3,所述判断发出所述表创建请求的用户所具有的针对所述数据库的权限是否能够覆盖全部表创建权限的步骤303之后还可进一步包括以下步骤:
步骤304:判断因查询结果为空而重复发出权限查询请求的次数是否大于或等于预设重试次数;
步骤305:若重复发出权限查询请求的次数大于或等于预设重试次数,所述查询结果仍然为空,则不再重试,并返回查询失败的结果。
根据上述实施例,能够很好的减小因查询结果为空而对授权过程产生的影响。
在hive中,任何用户都可以对数据库、表进行授权,而不区分用户具有的是完全管理权限的超级管理员账号还是普通账号,这种情况在生产环境中将会非常危险。
因此,较佳的,在一些可选实施方式中,所述接收针对数据库的表创建请求的步骤101之前还可进一步包括以下步骤:
步骤401:创建超级管理员账号白名单;
可选的,通过在hive的配置文件中,新建一个参数选项,用于创建超级管理员账号白名单,其中value的值设置为超级管理员的用户列表,以逗号进行分隔;其中,能够作为超级管理员的用户,可以根据实际需要进行设定,并可随时进行调整;
步骤402:在对所述用户执行授权或解除权限之前,判断所述用户是否存在于所述超级管理员账号白名单中;
可选的,在hive启动过程中,这些上述配置文件中的配置会加载到HiveConf对象中,hive每次执行语句,会在hive语法树中进行一个语义分析;在语义分析结束之后,开始真正执行语句之前,执行一个hook(hive.semantic.analyzer.hook)对某些特定的操作进行处理,其中,在判定需要执行权限相关的操作的时候,从当前session中存储的数据中获取用户名,并且跟白名单中设置的超级管理员进行比较,从而判断所述用户是否存在于所述超级管理员账号白名单中;
步骤403:若所述用户存在于所述超级管理员账号白名单中,则对所述用户执行授权或解除权限;
步骤404:若所述用户不存在于所述超级管理员账号白名单中,则不对所述用户执行授权或解除权限。
通过上述实施例,设置超级管理员账号白名单,并在用户执行授权或解除权限之前判断该用户是否存在于所述超级管理员账号白名单,用以判断该用户是否能够执行授权或解除权限的操作,从而能够保证***的安全性。
本发明实施例的第二个方面,提出了一种能够避免重复授权的权限控制方法的另一个实施例。如图2所示,为本发明提供的权限控制方法的另一个实施例的流程示意图。
所述权限控制方法,包括以下步骤:
步骤501:创建超级管理员账号白名单;
步骤502:在对所述用户执行授权或解除权限之前,判断所述用户是否存在于所述超级管理员账号白名单中;
步骤503:若所述用户存在于所述超级管理员账号白名单中,则对所述用户执行授权或解除权限;
步骤504:若所述用户不存在于所述超级管理员账号白名单中,则不对所述用户执行授权或解除权限;
步骤505:接收针对数据库的表创建请求;
步骤506:查询所述数据库的表权限数据表中存在的所述用户具有的权限;
步骤507:判断所述用户具有的权限是否能够覆盖全部表创建权限;
步骤508:如果用户具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权,并创建表;
步骤509:如果用户具有的权限不能覆盖全部表创建权限,则查询所述数据库的表权限数据表中存在的所述用户所在组具有的权限;
步骤510:判断所述用户具有的权限以及所述用户所在组具有的权限是否能够覆盖全部表创建权限;
步骤511:如果用户具有的权限以及所述用户所在组具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权,并创建表;
步骤512:如果用户具有的权限以及所述用户所在组具有的权限不能覆盖全部表创建权限,则查询所述数据库的表权限数据表中存在的所述用户所拥有的角色具有的权限;
步骤513:判断所述用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限是否能够覆盖全部表创建权限;
步骤514:如果用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权,并创建表;
步骤515:如果用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限不能覆盖全部表创建权限,则执行所述用户所欠缺的表创建权限的授权,并创建表。
从上述实施例可以看出,本发明实施例提供的权限控制方法,预先设置超级管理员账号白名单,在用户需要进行权限操作前,先判断其是否存在于所述超级管理员账号白名单中,只有存在其中的用户才能进一步进行权限操作,从而保证了***的安全性;在判断用户具有权限后,通过在用户创建表之前判断用户已经具有的权限是否覆盖了全部表创建权限,从而根据用户权限的覆盖程度对用户进行相应的授权,而不是如现有技术中那样直接对创建表的用户赋予全部的表权限,从而能够避免对用户进行重复授权的问题,减小了元数据表的压力并减少了返回的数据结果,节约了***资源。
本发明实施例的第三个方面,提出了一种能够避免重复授权的权限控制装置的实施例。如图6所示,为本发明提供的权限控制装置的一个实施例的模块结构示意图。
所述权限控制装置,包括:
请求接收模块601,用于接收针对数据库的表创建请求;
所述针对数据库的表创建请求是指,需要在所述数据库中创建一个新的表(TABLE)的请求,在接收到所述表创建请求,通常情况下,hive会自动根据hive.security.authorization.createtable.owner.grant参数中设置的权限对创建表的用户进行针对其创建的表的授权(即该用户对自己创建的表具有哪些权限),如果请求在所述数据库中创建表的用户已经具有了针对所述数据库的跟表有关的权限,就有极大可能会导致重复的授权;因此,这里,在接收到表创建请求后,并不直接根据hive.security.authorization.createtable.owner.grant参数中设置的权限对创建表的用户进行授权,而是首先通过权限覆盖判断模块302进行权限判断;
权限覆盖判断模块602,用于判断发出所述表创建请求的用户所具有的针对所述数据库的权限是否能够覆盖全部表创建权限;所述全部表创建权限是指用户创建表时会依照hive.security.authorization.createtable.owner.grant参数而被赋予的全部针对该被创建的表的权限,这里,需要判断所述用户已经具有的针对所述数据库的权限,是不是能够覆盖hive.security.authorization.createtable.owner.grant参数中设置的所有权限;通常,Hive的权限可参见表1;
表授权模块603,若所述用户所具有的针对所述数据库的权限能够覆盖全部表创建权限,说明所述用户已经具备了创建表的用户所需要具备的权限,不需要执行额外的授权,则用于不再针对所述用户执行表创建权限的授权;若所述用户所具有的针对所述数据库的权限不能覆盖全部表创建权限,则用于执行所述用户所欠缺的表创建权限的授权;即,在判断所述用户所具有的针对所述数据库的权限不能覆盖全部表创建权限时,则将所述用户已有的权限找出与hive.security.authorization.createtable.owner.grant参数中设置的所有权限进行比较,并得到用户不具有的权限,然后将用户不具有的权限(即所述用户所欠缺的表创建权限)授权给所述用户,一方面保证了用户权限的完整,另一方面又防止了重复授权;
表创建模块604,用于根据所述用户的请求创建一个新的表(TABLE)。
从上述实施例可以看出,本发明实施例提供的权限控制装置,通过在创建表之前判断用户已经具有的权限是否覆盖了全部表创建权限,从而根据用户权限的覆盖程度对用户进行相应的授权,而不是如现有技术中那样直接对创建表的用户赋予全部的表权限,从而能够避免对用户进行重复授权的问题,减小了元数据表的压力并减少了返回的数据结果,节约了***资源。
hive中的权限控制分为用户(user)、角色(role)、组(group)。管理员可以对用户、组授予/解除权限,也可以对角色进行授予/解除权限。管理员用户也可以把角色授权给用户或者组,这样用户或者组就可以拥有该角色所拥有的权限了。可以将数据库的权限、表的权限、分区的权限分别授予用户、角色、组这三个不同的对象。
因此,进一步的,在一些可选实施方式中,所述权限覆盖判断模块302,可具体用于:
查询所述数据库的表权限数据表中存在的所述用户具有的权限;
判断所述用户具有的权限是否能够覆盖全部表创建权限;
如果用户具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
如果用户具有的权限不能覆盖全部表创建权限,则查询所述数据库的表权限数据表中存在的所述用户所在组(GROUP)具有的权限;
判断所述用户具有的权限以及所述用户所在组具有的权限是否能够覆盖全部表创建权限;
如果用户具有的权限以及所述用户所在组具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
如果用户具有的权限以及所述用户所在组具有的权限不能覆盖全部表创建权限,则查询所述数据库的表权限数据表中存在的所述用户所拥有的角色具有的权限;
判断所述用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色(ROLE)具有的权限是否能够覆盖全部表创建权限;
如果用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
如果用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限不能覆盖全部表创建权限,则执行所述用户所欠缺的表创建权限的授权;
可选的,在进行每一步查询时,可以将查询得到的权限进行汇总,得到用户针对表的最大权限集合;在执行所述用户所欠缺的表创建权限的授权的步骤时,可以先比较所述最大权限集合和所述全部表创建权限之间的差别,从而提取出未被覆盖到的表创建权限,用于给用户进行授权。
通过上述实施例,将用户、用户所在组和用户所拥有的角色的权限均进行查询,从而完整的查询了所述用户所具备的权限,最大程度地减少了重复授权的几率。
hive使用DataNucleus(一种框架名称,中文直译可译为数据核)作为持久化方案。hive启用权限认证的情况下,在同一台机器上同时运行多个hive cli实例的时候,会有一定的几率返回空值,会导致授权结果查询错误。DataNucleus Access Platform(数据核访问平台)是一个兼容各种标准的Java数据持久化框架,兼容JDO1、JDO2、JDO2.1、JDO2.2、JDO2.3、JPA1、JPA2等Java标准。
因此,较佳的,在一些可选实施方式中,所述权限覆盖判断模块302,还可具体用于:
发出所述用户所具有的针对所述数据库的权限查询请求;
判断查询结果是否为空;
若查询结果为空,说明出现了权限查询错误,则重复查询所述用户所具有的针对所述数据库的权限。
通过上述实施例,增加查询重试机制,当获取权限查询结果为空的时候,进行重试,直到获取到权限数据或者达到预设重试次数后获取的查询结果均为空值时为止,从而减小了因查询结果为空而对授权过程产生的影响。
具体的,在一些可选实施方式中,上述实施例可以采用以下方法进行实现:
修改hive metastore(元数据存取)相关的代码,对于DataNucleus的持久化类的权限操作相关的类,对应元数据中的权限控制的表;hive metastore是hive工程中的一个子项目,通常译为hive元数据存取,这个模块的主要作用是用来与存储元数据信息的库(支持mysql、oracle等关系型数据库)进行交互,这个模块存储hive的元数据信息,包括表信息、分区信息、权限信息等等;
每次查询(Query)操作,都会通过DataNucleus查询权限控制的表;
对于返回的查询结果,进行一个权限对象的检查;
如果发现为空,就需要进行重试。
可选的,在一些实施方式中,上述实施例中重复发出权限查询请求的次数大于或等于预设重试次数;所述权限覆盖判断模块302,具体用于:
若重复发出权限查询请求的次数大于或等于预设重试次数之后,所述查询结果仍然为空,则不再重试,并返回查询失败的结果。所述预设重试次数的选取标准为,当达到所述预设重试次数时,基本上没有出现查询失败的结果,因此,根据不同的实际情况,所述预设重试次数可以选择不同的值;可选的,所述预设重试次数为3次,在压力测试下的结果,10000次并发过程中,并没有再次出现查询结果错误的情况;这里,压力测试指的是,在高并发等极端情况下进行测试,看***是否能够正确执行相应的任务,这里指的是,在单位时间内有大量的请求同时查询表的权限的情况下,即高并发情况下,都能返回正确的结果。根据上述实施例,能够很好的减小因查询结果为空而对授权过程产生的影响。
在hive中,任何用户都可以对数据库、表进行授权,而不区分用户具有的是完全管理权限的超级管理员账号还是普通账号,这种情况在生产环境中将会非常危险。
因此,较佳的,在一些可选实施方式中,参照附图7,所述权限控制装置还可包括:
白名单创建模块701,用于创建超级管理员账号白名单;
可选的,通过在hive的配置文件中,新建一个参数选项,用于创建超级管理员账号白名单,其中value的值设置为超级管理员的用户列表,以逗号进行分隔;其中,能够作为超级管理员的用户,可以根据实际需要进行设定,并可随时进行调整;
用户权限判断模块702,在对所述用户执行授权或解除权限之前,用于判断所述用户是否存在于所述超级管理员账号白名单中;
可选的,在hive启动过程中,这些上述配置文件中的配置会加载到HiveConf对象中,hive每次执行语句,会在hive语法树中进行一个语义分析;在语义分析结束之后,开始真正执行语句之前,执行一个hook(hive.semantic.analyzer.hook)对某些特定的操作进行处理,其中,在判定需要执行权限相关的操作的时候,从当前session中存储的数据中获取用户名,并且跟白名单中设置的超级管理员进行比较,从而判断所述用户是否存在于所述超级管理员账号白名单中;
用户授权模块703,若所述用户存在于所述超级管理员账号白名单中,则用于对所述用户执行授权或解除权限;若所述用户不存在于所述超级管理员账号白名单中,则用于不对所述用户执行授权或解除权限。
通过上述实施例,设置超级管理员账号白名单,并在用户执行授权或解除权限之前判断该用户是否存在于所述超级管理员账号白名单,用以判断该用户是否能够执行授权或解除权限的操作,从而能够保证***的安全性。
所属领域的普通技术人员应当理解:以上任何实施例的讨论仅为示例性的,并非旨在暗示本公开的范围(包括权利要求)被限于这些例子;在本发明的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本发明的不同方面的许多其它变化,为了简明它们没有在细节中提供。
另外,为简化说明和讨论,并且为了不会使本发明难以理解,在所提供的附图中可以示出或可以不示出与集成电路(IC)芯片和其它部件的公知的电源/接地连接。此外,可以以框图的形式示出装置,以便避免使本发明难以理解,并且这也考虑了以下事实,即关于这些框图装置的实施方式的细节是高度取决于将要实施本发明的平台的(即,这些细节应当完全处于本领域技术人员的理解范围内)。在阐述了具体细节(例如,电路)以描述本发明的示例性实施例的情况下,对本领域技术人员来说显而易见的是,可以在没有这些具体细节的情况下或者这些具体细节有变化的情况下实施本发明。因此,这些描述应被认为是说明性的而不是限制性的。
尽管已经结合了本发明的具体实施例对本发明进行了描述,但是根据前面的描述,这些实施例的很多替换、修改和变型对本领域普通技术人员来说将是显而易见的。例如,其它存储器架构(例如,动态RAM(DRAM))可以使用所讨论的实施例。
本发明的实施例旨在涵盖落入所附权利要求的宽泛范围之内的所有这样的替换、修改和变型。因此,凡在本发明的精神和原则之内,所做的任何省略、修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种权限控制方法,其特征在于,包括:
接收针对数据库的表创建请求;
判断发出所述表创建请求的用户所具有的针对所述数据库的权限是否能够覆盖全部表创建权限;
若所述用户所具有的针对所述数据库的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权,并创建表;
若所述用户所具有的针对所述数据库的权限不能覆盖全部表创建权限,则执行所述用户所欠缺的表创建权限的授权,并创建表。
2.根据权利要求1所述的方法,其特征在于,所述判断发出所述表创建请求的用户所具有的针对所述数据库的权限是否能够覆盖全部表创建权限的步骤包括:
查询所述数据库的表权限数据表中存在的所述用户具有的权限;
判断所述用户具有的权限是否能够覆盖全部表创建权限;
如果用户具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
如果用户具有的权限不能覆盖全部表创建权限,则查询所述数据库的表权限数据表中存在的所述用户所在组具有的权限;
判断所述用户具有的权限以及所述用户所在组具有的权限是否能够覆盖全部表创建权限;
如果用户具有的权限以及所述用户所在组具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
如果用户具有的权限以及所述用户所在组具有的权限不能覆盖全部表创建权限,则查询所述数据库的表权限数据表中存在的所述用户所拥有的角色具有的权限;
判断所述用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限是否能够覆盖全部表创建权限;
如果用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
如果用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限不能覆盖全部表创建权限,则执行所述用户所欠缺的表创建权限的授权。
3.根据权利要求1或2所述的方法,其特征在于,所述判断发出所述表创建请求的用户所具有的针对所述数据库的权限是否能够覆盖全部表创建权限的步骤包括:
发出所述用户所具有的针对所述数据库的权限查询请求;
判断查询结果是否为空;
若查询结果为空,则重复发出所述用户所具有的针对所述数据库的权限查询请求。
4.根据权利要求3所述的方法,其特征在于,所述重复发出所述用户所具有的针对所述数据库的权限查询请求的步骤中的重复发出权限查询请求的次数大于或等于预设重试次数;
若重复发出权限查询请求的次数大于或等于预设重试次数之后,所述查询结果仍然为空,则不再重试,并返回查询失败的结果。
5.根据权利要求1所述的方法,其特征在于,所述接收针对数据库的表创建请求的步骤之前还包括:
创建超级管理员账号白名单;
在对所述用户执行授权或解除权限之前,判断所述用户是否存在于所述超级管理员账号白名单中;
若所述用户存在于所述超级管理员账号白名单中,则对所述用户执行授权或解除权限;
若所述用户不存在于所述超级管理员账号白名单中,则不对所述用户执行授权或解除权限。
6.一种权限控制装置,其特征在于,包括:
请求接收模块,用于接收针对数据库的表创建请求;
权限覆盖判断模块,用于判断发出所述表创建请求的用户所具有的针对所述数据库的权限是否能够覆盖全部表创建权限;
表授权模块,若所述用户所具有的针对所述数据库的权限能够覆盖全部表创建权限,则用于不再针对所述用户执行表创建权限的授权;若所述用户所具有的针对所述数据库的权限不能覆盖全部表创建权限,则用于执行所述用户所欠缺的表创建权限的授权;
表创建模块,用于创建表。
7.根据权利要求6所述的装置,其特征在于,所述权限覆盖判断模块,具体用于:
查询所述数据库的表权限数据表中存在的所述用户具有的权限;
判断所述用户具有的权限是否能够覆盖全部表创建权限;
如果用户具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
如果用户具有的权限不能覆盖全部表创建权限,则查询所述数据库的表权限数据表中存在的所述用户所在组具有的权限;
判断所述用户具有的权限以及所述用户所在组具有的权限是否能够覆盖全部表创建权限;
如果用户具有的权限以及所述用户所在组具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
如果用户具有的权限以及所述用户所在组具有的权限不能覆盖全部表创建权限,则查询所述数据库的表权限数据表中存在的所述用户所拥有的角色具有的权限;
判断所述用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限是否能够覆盖全部表创建权限;
如果用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限能够覆盖全部表创建权限,则不再针对所述用户执行表创建权限的授权;
如果用户具有的权限、所述用户所在组具有的权限以及所述用户所拥有的角色具有的权限不能覆盖全部表创建权限,则执行所述用户所欠缺的表创建权限的授权。
8.根据权利要求6或7所述的装置,其特征在于,所述权限覆盖判断模块,具体用于:
查询所述用户所具有的针对所述数据库的权限;
判断查询结果是否为空;
若查询结果为空,则重复发出所述用户所具有的针对所述数据库的权限查询请求。
9.根据权利要求8所述的装置,其特征在于,重复发出权限查询请求的次数大于或等于预设重试次数;所述权限覆盖判断模块,具体用于:
若重复发出权限查询请求的次数大于或等于预设重试次数之后,所述查询结果仍然为空,则不再重试,并返回查询失败的结果。
10.根据权利要求6所述的装置,其特征在于,还包括:
白名单创建模块,用于创建超级管理员账号白名单;
用户权限判断模块,在对所述用户执行授权或解除权限之前,用于判断所述用户是否存在于所述超级管理员账号白名单中;
用户授权模块,若所述用户存在于所述超级管理员账号白名单中,则用于对所述用户执行授权或解除权限;若所述用户不存在于所述超级管理员账号白名单中,则用于不对所述用户执行授权或解除权限。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610321690.XA CN105956154A (zh) | 2016-05-16 | 2016-05-16 | 权限控制方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610321690.XA CN105956154A (zh) | 2016-05-16 | 2016-05-16 | 权限控制方法及装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN105956154A true CN105956154A (zh) | 2016-09-21 |
Family
ID=56911960
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610321690.XA Pending CN105956154A (zh) | 2016-05-16 | 2016-05-16 | 权限控制方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105956154A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107392053A (zh) * | 2017-08-11 | 2017-11-24 | 四川长虹电器股份有限公司 | 一种企业员工信息数据库中的数据权限控制方法 |
CN107579865A (zh) * | 2017-10-18 | 2018-01-12 | 北京奇虎科技有限公司 | 分布式代码服务器的权限管理方法、装置及*** |
CN110457307A (zh) * | 2018-05-03 | 2019-11-15 | 阿里巴巴集团控股有限公司 | 元数据管理***、用户集群创建方法、装置、设备和介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102917006A (zh) * | 2012-08-31 | 2013-02-06 | 杭州斯凯网络科技有限公司 | 一种实现计算资源和对象权限的统一控制管理方法及装置 |
CN105069370A (zh) * | 2015-07-22 | 2015-11-18 | 北京京东尚科信息技术有限公司 | 数据库自动授权访问方法 |
CN105205580A (zh) * | 2014-06-30 | 2015-12-30 | 青岛日日顺物流有限公司 | 一种权限设置方法和*** |
-
2016
- 2016-05-16 CN CN201610321690.XA patent/CN105956154A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102917006A (zh) * | 2012-08-31 | 2013-02-06 | 杭州斯凯网络科技有限公司 | 一种实现计算资源和对象权限的统一控制管理方法及装置 |
CN105205580A (zh) * | 2014-06-30 | 2015-12-30 | 青岛日日顺物流有限公司 | 一种权限设置方法和*** |
CN105069370A (zh) * | 2015-07-22 | 2015-11-18 | 北京京东尚科信息技术有限公司 | 数据库自动授权访问方法 |
Non-Patent Citations (1)
Title |
---|
张德阳等: "一种安全性的海量数据处理平台设计与实现", 《电信工程技术与标准化》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107392053A (zh) * | 2017-08-11 | 2017-11-24 | 四川长虹电器股份有限公司 | 一种企业员工信息数据库中的数据权限控制方法 |
CN107579865A (zh) * | 2017-10-18 | 2018-01-12 | 北京奇虎科技有限公司 | 分布式代码服务器的权限管理方法、装置及*** |
CN110457307A (zh) * | 2018-05-03 | 2019-11-15 | 阿里巴巴集团控股有限公司 | 元数据管理***、用户集群创建方法、装置、设备和介质 |
CN110457307B (zh) * | 2018-05-03 | 2023-10-24 | 阿里巴巴集团控股有限公司 | 元数据管理***、用户集群创建方法、装置、设备和介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8549065B2 (en) | Method and device for client/server communication according to the standard protocol OPC UA | |
CN106649630A (zh) | 数据查询方法及装置 | |
US20160164899A1 (en) | Data-oriented information technology system | |
CN102880780A (zh) | 产生用于分析数据的直观背景的***和方法 | |
CN105574082A (zh) | 基于Storm的流处理方法及*** | |
CN105956154A (zh) | 权限控制方法及装置 | |
CN109144978B (zh) | 权限管理方法及装置 | |
CN101639776A (zh) | 一种数据库访问和集成方法及其*** | |
CN109766686A (zh) | 权限管理 | |
CN105930417B (zh) | 一种基于云计算的大数据etl交互式处理平台 | |
CN103279416A (zh) | 一种存储软件自动化测试***和方法 | |
CN103617273B (zh) | Sql脚本对象化的方法及*** | |
CN114039792B (zh) | 一种数据访问权限控制方法、装置、设备及可读存储介质 | |
CN104598587A (zh) | ***真伪查询方法和*** | |
CN104156640A (zh) | 一种数据访问权限控制方法 | |
WO2018108423A1 (en) | System and method for user authorization | |
CN104392123A (zh) | 一种cda引擎***及实现方法 | |
CN105824926A (zh) | 一种动态选择调用外部***接口的方法 | |
CN106096400B (zh) | 一种Linux内核并行LSM框架实现方法 | |
CN103078946A (zh) | 一种海量实时数据分布方法及其访问方法 | |
CN106529230A (zh) | 基于角色的权限控制机制 | |
CN102819537B (zh) | 异构***中进行数据交换的方法及*** | |
CN108932121B (zh) | 一种面向多租户分布式服务组件研发的模块及方法 | |
CN111638939A (zh) | 一种Kubernetes容器平台应用生命周期的管理***和方法 | |
CN111400281B (zh) | 一种面向oss对象存储的gis数据质检与入库方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20160921 |