“
Hi,朋友。openLooKeng近期带来了许多技术干货,前有安装部署,后有安全认证机制、Hash Join的使用介绍等等,如果您正在使用openLooKeng, 希望这些技术博客能够帮助到您。本期,社区小伙伴将用一个简单的User Case,介绍openLooKeng的行级权限控制。
openLooKeng的行级权限控制
行级权限的作用
通过 Rowfilter 实现对表数据行级别的权限控制:指定特定用户只能访问授权过的行,隐藏未授权的行数据。
Use Case
源数据表:
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211215_5e3ab658-5dad-11ec-ae82-fa163eb4f6be.png)
配置Rowfilter策略:
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211215_5e72d0ba-5dad-11ec-ae82-fa163eb4f6be.png)
查询效果:
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211215_5ea79da4-5dad-11ec-ae82-fa163eb4f6be.png)
Rowfilter实现方式
回顾一下openLooKeng的coordinator接收到一个SQL的处理过程:终端用户通过ODBC或者JDBC driver将一个SQL语句发送到coordinator,这时SQL是以文本的形式被接收的。coordinator会解析parse和分析analysis,然后生成query plan。
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211215_5eda76c0-5dad-11ec-ae82-fa163eb4f6be.png)
openLooKeng analysis过程分为两部分:StatementRewrite和StatementAnalyzer。这两部分中都有权限相关的检查。
考虑到:
Rangeradmin侧仅存储鉴权策略,而鉴权逻辑在openLooKeng侧的ranger-plugin中完成。
Rowfilter策略实际就是where条件子句。
所以,在StatementRewrite中将Rowfilter条件子句重写到sql中。
主要的代码修改涉及:
Ranger侧:修改openLooKeng数据源的策略定义,增加行权限策略的配置界面。
openLooKeng侧:增加一个新的rewrite类:RowFilteRewrite,将条件子句加到sql中。
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211215_5f0e3406-5dad-11ec-ae82-fa163eb4f6be.png)
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211215_5f4edf1a-5dad-11ec-ae82-fa163eb4f6be.png)
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211215_5f98daa2-5dad-11ec-ae82-fa163eb4f6be.png)
以上便是本期小伙伴带来的分享。如果您也想在社区分享您的文章,欢迎联系openLooKeng小助手。
推荐阅读
![](https://oss-emcsprod-public.modb.pro/wechatSpider/modb_20211215_5feab034-5dad-11ec-ae82-fa163eb4f6be.png)
CCF BDCI大赛报名中,openLooKeng诚邀您来参加
报名截止时间: 2021年11月20日
openLooKeng
欢迎访问openLooKeng官网
https://openlookeng.io
社区代码仓
https://gitee.com/openlookeng
欢迎关注我们
微信公众号 | openLooKeng
社群助手 | openLooKengoss