如何解决团队访问数据库的 3 个致命问题?
面临的问题
在开发过程中避免不了需要访问数据库数据,尤其在团队协作中对于数据库数据的访问会更加频繁。
通常团队成员在管理员或者 DBA 在准备好数据源之后,就可以凭借数据库的账号和密码访问数据库中的数据了。
也正是从这一刻开始,这个团队访问数据库中的数据时就会面临诸多问题,本文枚举其中几个比较典型的问题:
- 团队成员在设计数据库表结构容易产生随意性,导致数据库结构规范不统一。
- 容易忽略账号和权限的管控,导致数据库访问缺失权限控制。
- 数据库的变更的发布在需要多个团队成员通过流程化的方式相互协作,如果协作过程不顺畅则会降低团队效率。
问题的严重性
如果这些问题没有被妥善处理好都会产生哪些影响呢?接下来我们举几个案例。
数据库结构规范不统一
表结构不规范会导致多种后果,包括数据分析困难、执行速度下降、以及数据可视化困难。这些问题普遍带有 滞后性、隐蔽性 特点,当解决这些问题时又容易产生更多连带风险。
- 数据分析困难:表结构不规范可能导致数据分析师在处理数据时遇到困难。例如,相同含义字段名称 不统一,又缺乏相应的元信息备注。导致后续分析数据时还需要消耗大量时间精力对数据关系进行梳理。
- 执行速度下降:不合理的表结构设计可能导致数据库查询执行速度下降。例如,某些查询语句的执行计划看似相同,但由于表结构的不合理设计,实际执行效果相差很大导致查询速度变慢。而这个问题往往在数据量变大之后才会凸显出来。
- 数据可视化困难:原本不为空的字段列由于表结构约束缺失导致脏数据被意外录入,进而在数据可视化结果呈现上产生误导,甚至还会影响用户对数据的准确理解。最直观的问题就是 “空字符串” 和 “空值” 之间的差别难以被有效界定。
综上所述,表结构不规范产生的不仅会增加数据分析的难度,降低数据库查询的执行速度,还会影响数据可视化的效果和质量。因此,规范化的表结构设计对于业务演进至关重要。
数据库访问缺失权限控制
数据库访问缺失权限控制的危害会比较严重,主要体现在以下几个方面:
- 敏感数据泄露更显:由于数据库访问权限的缺失容易让未经授权的用户访问到敏感数据。如,用户个人信息、财务数据等。当这些具有高度敏感性的数据被泄漏出去后,会造成更大的灾害。例如,被不法分子用于诈骗。以及错失优质商业机会等。
- 数据篡改风险:攻击者可能通过越权访问修改数据库中的数据,通过篡改数据谋取私利或者对整个业务运行造成严重影 响。如,修改账户余额,删库跑路等。
- 法律责任与声誉损害:由于缺乏权限控制导致用户敏感数据被泄露进而个人隐私被侵犯。企业可能临法律责任,同时企业的声誉也将受损。
综上所述,数据库访问缺失权限控制会带来更加严重安全风险和法律后果。所以团队中对于数据库数据的访问必须实施严格的访问控制和权限管理,以避免法律风险以及声誉影响。
协作过程不顺畅
协作过程不顺畅最主要的影响是团队效率,主要包括:
- 系统稳定性受损:协作不畅可能导致数据库变更过程中出现错误或遗漏,进而影响系统的稳定性和可靠性,增加系统崩溃的风险。
- 数据安全性问题:协作不顺畅还可能引发数据安全性问题,如数据丢失或泄露,对组织造成重大损失。
- 团队资源浪费:不顺畅的协作可能导致不必要的重复工作或错误操作,浪费人力和时间资源。
综上所述,数据库变更协作不顺畅会对系统稳定性、数据安全性、团队资源利用等多方面造成不良影响。进而使团队的效率变得更加底下。
解决问题的手段
这些问题在业内通常有着比较明确的解决思路,核心思想是通过团队化的工具将数据库的访问集中到统一平台上进行。并通过统一平台达成如 下几个关键控制手段:
- 通过SQL规则校验,拒绝不合理的数据库结构变更。从而保证数据库规范。
- 集中权限控制,方便一目了然的管理和控制。
- 避免直接连接数据库,保护数据库账号。
- 对查询结果进行脱敏保护,从而避免避免数据隐私及法律风险。
- 通过工单流程提升团队协作效率。
- 通过企业统一认证,让团队的账号管理变得更加轻松和简单。
目前能够提供上述问题解决方案的产品有很多这里就不再展开。
CloudDM Team 作为全新的企业级数据库数据访问工具,在团队使用场景中做了更加细致和深入的思考。自然也包含上述问题。
规则校验
使用脚本化方式实现 SQL 规则校验是一个比较常见的方法,常见的方案中有两种技术路线。
- 使用已有语言 Java、JavaScript、Lua、Groovy 作为规则引擎。
- 使用具有较高限制的自研 DSL 作为规则引擎。
使用已有语言通常会面临两个问题:
- 程序如何接入?
- 安全如何控制?
在采用通用编程语言作为规则引擎后,安全控制是最难以解决的。这是由于通用编程语言通常是面向更加广泛而又复杂的场景,需要提供更加灵活和底层的 API 作为保障。比如不受限制的访问网络、文件等资源。
如果采用通用编程语言作为引擎,虽然可以快速满足需求并节省开发成本。但需要在安全控制上做更加深入的控制,本文列出一些用于思考:
- 网络:通常 SQL 规则脚本中是用来承担逻辑判 断并不需要网络通信,因此网络能力通常是不必要的。
- 文件:理由同上
- CPU/内存:这两类资源具有高度相似性,都是难以被控制。例如:规则脚本出现一个死循环,通常作为脚本宿主程序是无法主动干预的。
- 调动外部程序:这和网络、文件、比较相像。原则上规则脚本的执行是不能调用外部程序的。
- 其它技术组件导致的安全漏洞:常见的如 OGNL 表达式的越权访问。
如果采用使用场景更加明确的自研 DSL 作为规则引擎,通常不会出现上述问题。因此普遍情况下只要技术投入成本可以接受都会选择此类技术方案,其主要优点是在于可控性较高。
CloudDM Team 采用了全新的自研 Rule Script 引擎,并通过 Rule Script 强大的编程能力使得 CloudDM Team 的所有内置规则实现了全部脚本化。这包括 SQL 规则和脱敏规则。下面这张图向大家展示了基于 Rule Script 的在 CloudDM Team 中的样貌。
SQL 查询规则展示
查询规则展示
权限控制
使用团队化的工具将数据库的访问集中到统一平台,天然的好处是可以避免直接连接数据库以保护数据库账号。而在权限控制方面,一个团队化的数据库访问工具必然会面临来自两个新维度上的要求:
- 功能上的权限控制
- 资源上的权限控制
在工程实践过程中权限系统的设计会受到诸多因素的影响,比较常见的权限控制模型和特点有:
- IBAC/ACL,基于身份的访问控制。核心思想是为资源制定一个 策略列表,当访问资源时通过策略列表来保护资源的访问。
- RBAC,基于角色的访问控制。模型核心定义了 用户、角色、权限 三个元素,在软件产品的功能控制中具有较为普遍的应用,它是一个静态模型。
- PBAC,基于策略的访问控制,相比较 RBAC 模型而言 PBAC 动态基于规则和策略动态确定访问权限。它属于动态模型。
- ABAC,基于属性的访问控制,模型重点在于对属性的策略化运用。角色、策略、身份 在 ABAC 模型中都是属性中的一种,ABAC 和 PBAC 某种程度上来看比较相似。而 ABAC 最大的弊端就是在于它的复杂性,在落地 ABAC 时某些情况下甚至需要借助 XACML 语言脚本来实现权限控制。
为了方便理解我们以 “资源是否具备某个权限的访问权限” 为典型内在需求。以 用户、角色、策略 为支点,对已知的权限模型做一个梳理可以做如下总结:
- 当选择 策略、权限、用户 三角关系作为权限访问控制三要素时,便是 ACL/IBAC 模型。
- 当某个资源被访问只需要执行一遍策略规则即可得到权限,这便是最简单的 ACL(Access Control Lists)
- 将用户/资源 进行 标识符 归类,在利用 ACL 对