在阐述 CloudQuery 权限体系之前,想先跟大家分享下我们团队在客户侧收集到了的一些真实场景与诉求:
- 对特定对象进行操作管控(SQL 命令)
- 对某个字段实现精确动态脱敏
- 对某一条 SQL 语句进行精确提权
- 对高危命令进行拦截
- 实现用户登录时的数据精准过滤
- 实现动态脱敏
- 实现数据导出的管控
- 实现结果集复制的管控
- 实现数据修订的管控
- 希望能对数据库的访问时间做限制
- 希望能对用户查询的行数,次数做限制
这些诉求涵盖了对数据库操作的权限管理、数据保护、访问安全控制等,看上去这些需求好像比较离散,但总结下来我们可以将它们归纳为 「不同维度的管控需求」。
那让我们来回顾下 CloudQuery 社区版 1.x 系列是如何来满足这些需求的。在产品形态上,CloudQuery 1.x 系列将用户的管控需求统一称为“权限”。在「数据库连接管理」模块之下,通过数据操作权限、时间权限、受限资源权限、动态脱敏管理以满足用户不同的“管控”诉求。
然而,“权限”这个词包含了太多的需求,基于此前提, 2.x 系列中,我们希望以更加具体、明确的方式来引用它。在 CloudQuery 权限概念上,通过采用不同的“术语”来区分这些权限需求,所以我们设计了全新「多模型、多层级」的权限体系。
程序员眼中的"权限"有多种模型,包括 ACL、DAC、MAC、RBAC、ABAC,针对主体(人)与资源(数据库资源)不同模型对应着不同的交互表现。在进行权限改造之前,我们围绕着管控需求、系统菜单、功能菜单进行分类,拆分系统与业务,并对20多种数据库的 SQL 语法和数据类型重新进行了整理。
在 2.x 系列的产品中,我们对业务进行拆分,将以往的权限管理分为两个不同的模块:数据库管理和数据保护,其中数据库管理又拆分成连接管理与授权管理两部分,这样的拆分旨在实现更精确的管控目的。
连接管理,是针对访问数据库时创建的连接进行管理。在连接管理中,我们增加了连接管控与资源纳管。
连接管控: 通过对连接的管理和控制,可以确定当前数据库是否允许建立连接。这个维度确保只有经过授权的主体能够访问数据库,从而保障数据的安全性。
资源纳管: 对数据库中的资源进行纳管,将承载数据库对象的最小容易单位(schema)定义为纳管操作的最小单位资源。这样的定义有助于我们以更精细的方式管理和控制数据库中的资源,并满足不同数据库类型和概念的管控诉求。
授权管理,则是针对我们纳管的资源进行授权管控。值得注意的是,授权管理又分为针对纳管资源的最大单位(schema)管控、针对最小单位(数据库对象)的细粒度授权。
schema的基础设置: 我们为每个连接和资源分配唯一的标识符,以便在权限控制中准确定位和识别这些资源。这些标识符可以包括测试环境标识、复核方式标识以及无权对象隐藏标识,以满足客户对不同管控方式的需求。
安全设置: 对每个资源和数据库对象,我们提供了丰富的访问策略设置。客户可以根据具体需求,为每个资源定义访问策略,如限制查询、进行二次复核等。这样的安全设置使得客户能够实现对资源的精细化管理。
操作权限等级: 我们定义了不同的操作权限等级,以定义每个主体对资源的具体操作级别。大家可以发现 2.x 系列提供了默认的五个权限等级,包括无权限、仅访问、仅查询、可编辑和可管理。默认的权限等级可以帮助客户更方便地授权给不同的主体,也可以为我们下一步授权改造提供基础的权限标准。
细粒度授权: 在数据库对象层级,我们可以针对用户分配不同的细粒度权限,包括查询、修改、添加、删除、导入和导出等操作权限。同时,也支持对单个用户或批量用户进行权限管理。
通过功能上的细分,我们可以更加精确地管理和控制人员对数据库资源的访问行为,确保数据的安全性和可控性。
值得一提的是,在 2.x 系列中,我们对权限一词进行了简化,它仅代表数据库 SQL 操作的聚合以构建权限体系。目前,我们发布了资源授权视图,并计划在后续版本中推出主体授权和项目封装授权,以满足更多的授权需求。我们致力于提升权限体系的完备性和灵活性,以满足用户在数据安全管控方面的多样需求。
在 2.x 系列产品中,提供了数据保护功能,旨在增强数据的安全性和隐私保护。
数据保护经常会涉及两个关键词:数据脱敏和数据过滤。通常,数据查询结果以二维表的形式展示,其中相似类型的数据以列的方式存储。然而,数据保护的需求并不仅限于特定数据类型,而是适用于所有相关数据的展示和保护。因此,我们将对相似类型数据进行安全处理称为脱敏,而对相关展示数据进行安全处理称为过滤。
简而言之,脱敏关注的是表的列,而过滤涉及表的行。我们的数据保护功能正是基于这两个概念而设计的。
关于脱敏和过滤的实现,我们采用了两种技术方式,分别是前置规则和后置规则。前置规则使用 SQL 改写方式对数据进行处理,而后置规则则通过结果集命中方式进行改写。虽然后置规则相对简单,但容易被绕过。因此,我们建议在使用时主要采用前置规则,辅以后置规则来实现数据展示的保护。通过这种组合方式,能更有效地确保数据的安全性。
在 2.x 系列产品中,具体实现了以下数据保护功能:
CloudQuery 2.x 系列通过多维度的权限体系,满足用户对数据安全管理和访问控制的需求。连接管理和授权管理的拆分,实现对连接和资源的管控与纳管,以及对资源的授权管理。数据保护功能包括数据脱敏和数据过滤,通过前置规则和后置规则对敏感数据进行处理和结果集的筛选。
这种多维度权限体系可满足各种离散的管控需求,实现数据的安全管理和访问控制。
另外,我们将在 7月19日(周三)晚 19:00 开展第一期 CQ 用户说栏目直播,邀请到大型保险公司 DBA 王珂进行 CloudQuery 使用分享!直播将在 bilibili(CloudQuery 询盾)和视频号(BinTools 图尔兹) 进行,欢迎大家预约观看~