找回密码
 立即注册
首页 业界区 业界 《数据资产管理核心技术与应用》读书笔记- 第七章- 数据 ...

《数据资产管理核心技术与应用》读书笔记- 第七章- 数据权限与安全(一)

阎一禾 4 小时前
《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,全书共分10章,第1章主要让读者认识数据资产,了解数据资产相关的基础概念,以及数据资产的发展情况。第2~8章主要介绍大数据时代数据资产管理所涉及的核心技术,内容包括元数据的采集与存储、数据血缘、数据质量、数据监控与告警、数据服务、数据权限与安全、数据资产管理架构等。第9~10章主要从实战的角度介绍数据资产管理技术的应用实践,包括如何对元数据进行管理以发挥出数据资产的更大潜力,以及如何对数据进行建模以挖掘出数据中更大的价值。
关注清哥聊技术公众号,了解更多技术文章
图书介绍:数据资产管理核心技术与应用
今天主要是给大家分享一下第七章的的内容:
第七章的标题为数据权限与安全 ->  关注清哥聊技术公众号,了解更多技术文章
在数据资产的应用中,数据安全、权限以及隐私保护是数据资产管理中绝对不能忽视的核心要素,在数据资产中,需要建立完善的权限管理和安全保障机制,以确保在数据的整个生命周期中,不会出现数据在未经授权的情况下被滥用,从而保护数据的安全和隐私不受侵犯。
1、常见的权限设计模式
在软件工程的发展过程中,随着软件技术和各类软件产品的不断发展,人们从实践中总结出了很多常用的权限设计模式,每一种权限设计模式都有其自身的特点,如下表所示。
权限设计模式
优点
缺点
基于角色的访问控制(RBAC):给每个访问的用户定义角色,通过角色来控制权限。
对于页面、菜单、按钮等的访问权限能够很好的去控制,便于职责分离等
没有提供操作顺序等的复杂又灵活的权限控制机制,对于一些复杂的权限场景无法实现
基于属性的访问控制(ABAC):通过动态的计算一组或者多组属性来判断是否满足某种权限的机制,比如某个操作是否有权限通常是通过对象、资源、操作和环境信息等多组属性来共同完成判断的。
权限模型非常灵活,可以实现不同粒度的权限控制,可扩展性很强
规则过于复杂,权限模型在技术实现时通常非常难,并且不易于维护
基于对象的访问控制(OBAC):给每个访问的用户分配不同的受控对象, 将访问权限直接与受控对象相关联
通过定义了受控对象的访问控制权限,当受控对象的属性发生变化,或者出现继承、衍生等操作时,不用去更新访问主体的权限,而只需要修改受控对象的相应访问控制权限即可,可以减少访问主体的权限管理和降低授权管理的复杂度
在软件产品中实际应用较少,缺乏实际的软件产品的实践经验
从表中可以看到,每一种权限模式都会有其自身的优点和缺点,在实际使用时,需要根据对应的数据产品的特点来选择哪种权限设计模式是最合适的。
1.1、基于角色的访问控制
基于角色的访问控制又叫RBAC权限控制模式,是Role-Based Access Control的简写,是一种最常见的权限控制模式,广泛的应用于软件工程或者网络安全都很多领域中。
RBAC的核心机制就是将权限分配给角色,再将角色分配给需要授权的用户,来实现对软件系统的访问控制,如下图所示
1.png

《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,作者为张永清等著
在RBAC权限模型中,通常会先有一个管理员的角色,管理员拥有最高的所有软件系统资源的访问权限,然后将管理员的角色赋予给管理员用户,然后管理员用户就可以通过分配和调整角色来管理其他的访问用户的权限了。
在RBAC中虽然引用了角色的概念,因为当访问的用户的数量非常大时,就要给每个访问的用户逐一进行赋权,在系统运维时会是一件很繁琐的事情,所以在RBAC中权限控制中,建议

  • 引入用户组的概念,每个用户组中可以批量关联多个用户,除了可以给用户授权外,还可以给用户组授权,用户的访问权限就可以由用户自己的角色和用户组的角色两部分组成,如果是通用的权限,只需要批量将用户添加到用户组中即可,如下图所示。
2.png


  • 除了用户可以绑定角色外,还可以在系统中支持角色批量绑定用户,这样当存在大量的访问用户时,可以在操作角色时,通过批量勾选的方式让一个角色可以同时绑定多个访问的用户,这样就减轻了管理员逐一给每个访问用户分配权限带来的大量工作量了。
RBAC通常适用于以下的场景:

  • 通过组织架构来管理用户和访问的软件系统,不同组织下的员工可以分别授予不同的角色,以便根据其工作岗位限制对应的用户对软件系统资源的访问。
  • 还适用于多租户的软件系统,在多租户的软件系统中,RBAC的权限控制模型刚好可以完成不同租户之间的访问的隔离和管理,每个租户可以分配不同的角色,每个角色定义相应的系统权限。
1.2、     基于属性的访问控制
基于属性的访问控制又叫ABAC权限控制模式,是Attribute-Based Access Control的简写,是一种比较复杂的权限控制模式,是通过多种属性相结合的方式来实现的权限访问控制。ABAC的权限控制模式可以解决RBAC权限控制模式中一些不足或者无法实现的权限控制,如下图所示。
3.png
《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,作者为张永清等著
ABAC与RBAC之间的主要区别在于授权的方式不一样,RBAC按照角色授予访问权限,ABAC可以根据用户属性、环境属性、资源属性等多种属性综合计算来确定访问权限。而且ABAC 可以更加细粒度控制权限和能根据上下文动态执行权限判断,而RBAC通常只能基于静态的参数进行权限的判断。在开源社区中,Apache Ranger就是ABAC权限控制模式的典型项目,其底层的相关实现可以参考网址https://ranger.apache.org/blogs/adventures_in_abac_1.html和https://ranger.apache.org/blogs/adventures_in_abac_2.html中的相关介绍。
1.3、 基于对象的访问控制
基于对象的访问控制又叫OBAC权限控制模式,是Object-based Access Control的简写,OBAC权限控制会从受控对象的角度出发,将访问主体(比如待访问的系统)的访问权限直接与受控对象相关联,如下图所示。
4.png

策略和规则是OBAC权限访问控制的核心,同时允许用户对策略和规则进行重用、继承和派生操作,减少访问主体的权限管理,降低授权数据管理的复杂性。
2、数据权限
数据权限通常指的是对待访问的数据仓库或者数据湖中的数据表的权限的控制,数据权限的控制通常包含数据表操作权限的控制以及数据表查询权限的控制,如下图所示。《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,作者为张永清等著
5.png

从图中可以看到,数据权限的类型通常包括表结构的权限控制、表中数据的变更以及表中数据的查询等这几种。

  • 表结构的修改:通常指的是表的创建,表结构变更(比如增加字段或者修改字段等),这块的权限通常由管理员这个角色来负责管理。
  • 数据变更:通常指的是数据写入、修改、删除等,这些操作由于涉及到数据的处理,通常由数据开发工程师来负责维护。
  • 数据查询:数据查询一般是直接把数据开放给相关的业务需求直接做查询或者给数据服务使用,所以这块主要是针对数据查询权限的控制,而数据查询权限的控制又主要包括列(字段)权限控制和数据行的权限控制,如下图所示。
6.png

列的权限控制主要是有些列不能给对应的业务做查询,比如一些包含用户敏感信息(比如密码)的列。行的权限主要是不同的用户或者不同的业务可能只能看到部分行中的数据,比如一个组织架构下有很多部门,每个部门只能看到每个部门下的数据,那这时候就需要对数据行做权限控制了。
从对数据权限的分析来看,基于角色的RBAC权限控制模式比较适合数据权限的控制,因为数据的管理通常也是基于角色来完成的,不同的角色完成不同的操作,这样在数据管理是,职责和权责都相对比较分明。
2.1、列权限控制
列权限控制通常是对数据湖或者数据仓库中的表的列的访问进行权限控制。访问数据的方式通常包含如下两种:

  • SQL直接查询访问:顾名思义就是直接连接到数据湖或者数据仓库中,直接通过SQL语句查询的方式来读取数据。
  • 通过数据服务访问:虽然是通过数据服务的方式来获取数据,但是数据服务的底层通常还是连接到数据湖或者数据仓库中,通过SQL查询的方式获取数据。
所以数据权限中列权限的控制,其实会直接体现到对SQL查询语句的权限控制,如下图7-2-3所示为列权限控制的技术实现设计图。
从图中可以看到,列权限控制核心技术在于SQL语句的解析,需要解析出SQL语句中涉及到了哪些表以及对应的哪些字段,然后再去和权限数据表进行比对,看是否访问的表以及字段都拥有了对应的权限。
解析一条SQL语句中涉及到了哪些表以及对应的哪些字段,通常还可以借助第三方的工具包,在开源社区中有很多这样的工具包,通常数据仓库或者数据湖的底层实现中也有对应的SQL语句语法分析器,通过官方的代码,通常可以更准确的分析出一条SQL语句中涉及到的表以及对应的字段有哪些。比如Apache Hive 在底层解析SQL语句时就是用的Apache Calcite来实现的,Apache Calcite是一个开源的SQL解析工具,在解析SQL语句时会将各种语法的SQL语句解析成AST(Abstract Syntax Tree),然后再通过AST来获取SQL语句中涉及到表和字段。Apache Calcite除了可以用于SQL解析外,还可以用于SQL校验、查询优化等,除了Hive外,Apache Flink底层也使用了Apache Calcite 来作为SQL的解析工具。Apache Calcite的Github 地址为https://github.com/apache/calcite/,相关的更多介绍可以参考官方文档网址:https://calcite.apache.org/docs/。
7.png

 对于 关系型数据库的SQL解析,通常可以使用Apache Jsqlparser来实现, Jsqlparser也是Apache 下的一个开源项目,其Github的访问地址为:https://github.com/JSQLParser/JSqlParser,如下图所示。《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,作者为张永清等著

8.png

Jsqlparser解析时支持的数据库类型包括Oracle、MS SQL Server、Sybase、Postgres、MySQL 、MariaDB、DB2等。在使用时,可以通过如下Maven 的方式引入Jsqlparser 。
  1. [/code][code]    <groupId>com.github.jsqlparser</groupId>
复制代码
  1.     jsqlparser</artifactId>
复制代码
[code][/code]如下图所示,为Jsqlparser 官网提供的一个解析Select查询的SQL语句的示例代码,下图中是对“select 1 from dual where 1=1”这条SQL语句进行的表和字段的解析,从解析的结果可以看到,通过Jsqlparser 这个工具,可以获取到查询的表、字段以及查询的条件等。除了支持Select 查询语句的解析,Jsqlparser还可以支持:

  • Insert 语句解析:比如Insert Into table_xxx(column1, column2, column3) Values('xx', 'xx', 'xx')以及同时带有Insert和Select 的语句,比如Insert Into table_xxx(column1, column2, column3) Select column1, column2, column3 From table_xxxname。
  • Update 语句解析:比如Update table_xxx  Set column1 = 'xx' , column2='xx' Where column4='xx'。
  • Delete 语句解析:比如Delete From table_xxx   Where column4='xx'。
更多有关Jsqlparser对SQL语句的解析介绍,可以参考网址https://jsqlparser.github.io/JSqlParser/usage.html#。
9.png

2.2、行权限控制
行的权限控制和列的权限控制很类似,行权限控制通常是对数据湖或者数据仓库中的表的数据行的访问进行权限控制,也就是在一个表中,有些数据记录是可以访问的,有些数据记录是不可以访问的。不管是行还是列,数据表的访问主要都是通过SQL语句来查询的,所以数据行的权限控制也是直接体现到对SQL查询语句的权限控制。另外数据行的权限控制本质上也是需要借助列来实现和完成。例如一个组织架构下有很多部门,在一张数据表中,每个部门只能看到每个部门下的数据,如下图所示,在查询图中右侧的数据表时,需要在SQL语句中通过部门ID这列来做数据的过滤以达到数据行的权限控制的效果。《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,作者为张永清等著
10.png

从图中可以看到,行的权限控制是需要借助列来做过滤以达到行权限控制,也就是说如果要实现行的权限控制,那么数据表中需要有一些和权限控制相关的列作为过滤条件,比如用户ID,部门ID,角色ID 等。
如下图所示为行权限控制的技术实现设计图,从图中可以看到,行权限控制的关键在于SQL语句中Where 条件的拼接,需要把行控制的规则动态的拼接到Where条件做数据过滤以达到行权限的控制。
11.png

通常来说,行权限控制要比列权限控制更加复杂,所以行权限控制的配置通常会通过配置表达式的方式来实现,如下图所示。
12.png

在做SQL查询时,会先将表达式解析为可以拼接到SQL查询的Where 条件后的列规则,比如"Where 字段xxx=xxxx" 或者"Where 字段xxx In (Select 字段xxx From Table_xxxx)"等。
未完待续 《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,作者为张永清等著

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册