掌桥专利:专业的专利平台
掌桥专利
首页

基于FlinkSQL实时数仓领域的行级权限控制方法和电子设备

文献发布时间:2023-06-19 19:21:53


基于FlinkSQL实时数仓领域的行级权限控制方法和电子设备

技术领域

本发明涉及数据处理技术领域,特别涉及一种基于FlinkSQL实时数仓领域的行级权限控制方法和电子设备。

背景技术

随着近年来大数据、数字化转型的兴起,数据已成为企业和国家的“战略资源”和“生产要素”。大数据技术在推动经济转型升级的同时,数据规模不断扩大,数据泄露、滥用等风险日益凸显,防范数据安全风险、构建数据安全保护体系成为重中之重。行级权限即横向数据安全保护,可以解决不同人员只允许访问不同数据行的问题。在离线数仓工具Hive领域,由于发展多年已有第三方工具Apache Ranger来支持表数据的行级权限控制;但此方法要求用户额外部署一套Ranger系统,会带来非常高的运维成本;而且此方法不支持实时数仓FlinkSQL中的表行级权限。

发明内容

为了解决上述问题,本发明提供以下技术方案:

本发明提供一种基于FlinkSQL实时数仓领域的行级权限控制方法,所述控制方法包括:

(1)输入SQL信息;

(2)通过执行SQL信息中的用户名和表名来查找配置的行级约束条件;

(3)用Calcite解析表达式操作生成行级权限条件SqlBasicCall对象;

(4)构建Calcite SqlSelect对象,结合用户输入SQL信息中的原where和配置的行级权限条件SqlBasicCall重新组装来生成新的带行级过滤条件的抽象语法树;

(5)基于新的带行级过滤条件的抽象语法树AST执行后续的语法校验、语义分析、优化和执行阶段。

所述语法解析使用JavaCC把输入SQL信息转换成抽象语法树。

所述语法校验根据元数据信息进行语法验证,包括对查询的表、字段、函数是否存在进行验证,并分别对from、where、group by、having、select、orader by子句进行语法校验。

所述语义分析对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。

进一步的,所述SQL信息包括SQL文件、SQL字符串和SQL字符流。

进一步的,生成新的带行级过滤条件的抽象语法树的具体步骤为:

(41)定位到构建Calcite SqlSelect对象的函数中;

(42)判断From类型,

如果From类型是SqlJoin,则分别遍历其左节点和右节点,

如果From类型是SqlIdentifier,则判断是否来自于Join,如果是并且用户输入的SQL未定义表别名,则用表名作为别名;如果是并且用户输入的SQL定义了表别名,则执行步骤(43);

如果From类型是SqlBasicCall,判断是否来自于子查询,如果是说明已在子查询中组装过行级权限条件,则返回当前的where,如果否,则执行步骤(43);

(43)根据当前执行SQL信息的用户名和表名来查找已配置的行级约束条件,并调用Calcite进行解析表达式操作,生成行级权限permissions,其类型为SqlBasicCall;

(44)给行级权限解析后的行级权限permissions增加别名;

(45)判断原where是否等于空,如是则返回行级权限permissions作为新的where,否则组装原where和行级权限permissions来生成新的where;

(46)返回新的where。

进一步的,在步骤(42)中,From类型是SqlJoin且是三张表及以上连接(Join),则需要对其左节点和右节点进行递归处理。

本发明提供一种电子设备,包括:

处理器;以及

存储计算机可执行指令的存储器,所述计算机可执行指令在被执行时使所述处理器执行上所述的方法。

本发明提供一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,当所述一个或多个程序被处理器执行时,实现上所述的方法。

本发明具有以下有益效果:

(1)本发明在语法解析阶段通过组装行级过滤条件生成新的AST来实现行级权限控制,整个过程对执行SQL的用户都是透明和无感知的,用户还是调用Flink自带的执行方法,无需做额外的操作配置;

(2)本发明仅对对where条件进行拦截即可,而不需要解析用户输入的各种SQL来查找配置过行级权限条件约束的表,简化了整个流程;

(3)本发明不要求用户额外部署其他系统,运维成本较低;

(4)本发明支持实时数仓FlinkSQL中的表行级权限的控制。

附图说明

图1是本发明的行级权限控制方法流程图。

图2是本发明的行级权限控制方法的示意图。

图3是本发明中生成新的带行级过滤条件的抽象语法树的流程图。

图4是FlinkSQL的执行流程图。

具体实施方式

以下结合附图对本发明的具体实施方式做详细描述,应当指出的是,实施例只是对发明的具体阐述,不应视为对发明的限定,实施例的目的是为了让本领域技术人员更好地理解和再现本发明的技术方案,本发明的保护范围仍应当以权利要求书所限定的范围为准。

如图1-2所示,本发明提供一种基于FlinkSQL实时数仓领域的行级权限控制方法,所述控制方法包括:

S1,输入SQL信息;所述SQL信息包括SQL文件、SQL字符串和SQL字符流。

S2,通过执行SQL信息中的用户名和表名来查找配置的行级约束条件;

S3,用Calcite解析表达式操作生成行级权限条件SqlBasicCall对象;

S4,构建Calcite SqlSelect对象,结合用户输入SQL信息中的原where和配置的行级权限条件SqlBasicCall重新组装来生成新的带行级过滤条件的抽象语法树;

如图3所示,生成新的带行级过滤条件的抽象语法树的具体步骤为:

S41,定位到构建Calcite SqlSelect对象的函数中;

S42,判断From类型,

如果From类型是SqlJoin,则分别遍历其左节点和右节点,如是三张表及以上连接(Join),则需要对其左节点和右节点进行递归处理。

如果From类型是SqlIdentifier,则判断是否来自于Join,如果是并且用户输入的SQL未定义表别名,则用表名作为别名;如果是并且用户输入的SQL定义了表别名,则执行步骤S43;

如果From类型是SqlBasicCall,判断是否来自于子查询,如果是说明已在子查询中组装过行级权限条件,则返回当前的where,如果否,则执行步骤S43;

S43,根据当前执行SQL信息的用户名和表名来查找已配置的行级约束条件,并调用Calcite进行解析表达式操作,生成行级权限permissions,其类型为SqlBasicCall;

S44,给行级权限解析后的行级权限permissions增加别名;例如行级约束条件是region='北京',来自于orders表,别名是o;则此步骤处理后的结果是o.region='北京';

S45,判断原where是否等于空,如是则返回行级权限permissions作为新的where,否则组装原where和行级权限permissions来生成新的where;

S46,返回新的where。

S5,基于新的带行级过滤条件的抽象语法树AST执行后续的语法校验、语义分析、优化和执行阶段,如图4所示。

所述语法解析使用JavaCC把输入SQL信息转换成抽象语法树。

所述语法校验根据元数据信息进行语法验证,包括对查询的表、字段、函数是否存在进行验证,并分别对from、where、group by、having、select、orader by子句进行语法校验。

所述语义分析对结构上正确的源程序进行上下文有关性质的审查,进行类型审查。

语义优化包括subquery_rewrite(重写子查询)、temporal_join_rewrite(重写临时连接)、decorrelate(关联)、default_rewrite(默认重写)、predicate_pushdown(谓词下推)、join_reorder(重写连接)、project_rewrite(重写投影)、logical(逻辑计划)、logical_rewrite(重写逻辑计划)和time_indicator(时间指示器)等等。

例如针对表1中定义的行级权限条件,即针对订单表orders,用户A只能查看到北京区域的数据,用户B只能查看到杭州区域的数据。

表1

当用户A和用户B在执行相同的查询‘SELECT*FROM orders’时,系统会自动组装行级约束条件到原SQL上,下面是两个用户最终真实执行的SQL:

用户A的执行SQL:SELECT*FROM orders WHERE region='北京';

用户B的执行SQL:SELECT*FROM orders WHERE region='杭州'。

本发明提供一种电子设备,包括:

处理器;以及

存储计算机可执行指令的存储器,所述计算机可执行指令在被执行时使所述处理器执行上所述的方法。

本发明提供一种计算机可读存储介质,其中,所述计算机可读存储介质存储一个或多个程序,当所述一个或多个程序被处理器执行时,实现上所述的方法。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。

需注意的是,本发明中所未详细描述的技术特征,均可以通过任一现有技术实现。

相关技术
  • 权限控制方法、装置、电子设备及计算机可读存储介质
  • 智能家居设备的权限控制方法、装置、系统及电子设备
  • 实时数据库同步方法、装置、电子设备及存储介质
  • 一种基于FlinkSQL与达梦的实时数仓方法
  • 基于AOP的行级权限控制方法、装置及客户端
技术分类

06120115887580