FlinkSQL 的行级权限解决方案及源码

本文详细介绍了FlinkSQL的行级权限解决方案,支持用户级别的行级数据访问控制,确保不同用户只能查看授权的行。通过在SQL解析阶段插入行级过滤条件,实现权限控制的透明化。同时,提供了多个测试用例,展示了在不同场景下如简单SELECT、JOIN操作等如何生效。此外,还概述了源码修改步骤,包括新增Parser和SqlSelect类以及封装SecurityContext类。
摘要由CSDN通过智能技术生成

flink-sql-security

FlinkSQL的行级权限解决方案及源码,支持面向用户级别的行级数据访问控制,即特定用户只能访问授权过的行,隐藏未授权的行数据。此方案是实时领域Flink的解决方案,类似离线数仓Hive中Ranger Row-level Filter方案。

序号 作者 版本 时间 备注
1 HamaWhite 1.0.0 2022-12-15 1. 增加文档和源码

源码地址: https://github.com/HamaWhiteGG/flink-sql-security

一、基础知识

1.1 行级权限

行级权限即横向数据安全保护,可以解决不同人员只允许访问不同数据行的问题。例如针对订单表,用户A只能查看到北京区域的数据,用户B只能查看到杭州区域的数据。

1.2 业务流程

1.2.1 设置行级权限

管理员配置用户、表、行级权限条件,例如下面的配置。

序号 用户名 表名 行级权限条件
1 用户A orders region = 'beijing'
2 用户B orders region = 'hangzhou'

1.2.2 用户查询数据

用户在系统上查询orders表的数据时,系统在底层查询时会根据该用户的行级权限条件来自动过滤数据,即让行级权限生效。

当用户A和用户B在执行下面相同的SQL时,会查看到不同的结果数据。

SELECT * FROM orders;

用户A查看到的结果数据是:

order_id order_date customer_name price product_id order_status region
10001 2020-07-30 10:08:22 Jack 50.50 102 false beijing
10002 2020-07-30 10:11:09 Sally 15.00 105 false beijing
注: 系统底层最终执行的SQL是:  SELECT * FROM orders WHERE region = 'beijing'

<br/>

用户B查看到的结果数据是:

order_id order_date customer_name price product_id order_status region
10003 2020-07-30 12:00:30 Edward 25.25 106 false hangzhou
10004 2022-12-15 12:11:09 John 78.00 103 false hangzhou
注: 系统底层最终执行的SQL是:  SELECT * FROM orders WHERE region = 'hangzhou' 。

1.3 组件版本

组件名称 版本 备注
Flink 1.16.0
Flink-connector-mysql-cdc 2.3.0

二、Hive行级权限解决方案

在离线数仓工具Hive领域,由于发展多年已有Ranger来支持表数据的行级权限控制,详见参考文献[[2]](

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值