分享:如何给 DBA 减负?

欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/

本文来自OceanBase社区分享,仅限交流探讨。原作者肖杨,OceanBase 软件开发工程师。


研发、数据分析师及运维内部人员有数据查询、数据订正等需求,若无管控平台,只能通过授予账号的形式,来授权这些用户直接访问数据库,一般会按类型建几个不同级别权限的账号给对应的同学使用,这会导致以下问题:

  1. 一个账号对应的使用人很多,无法精准定位请求人,同时只能依靠账号权限来限制用户行为,无法对请求进行流程上(经审批人审核)的约束;

  2. 同时受访问的数据库的稳定性无法得到保障,若有访问权限的用户执行了高消耗的 SQL ,很可能导致数据被打挂;

  3. 账号权限调整繁琐,若要限制某个用户访问,需要修改用户密码,然后再知会除限制人外的其它人修改信息。

从这些问题中我们发现,在企业级开发场景中,需要将数据库的访问权限纳入管控,以免造成数据泄露、丢失、滥用等问题。这时就需要一款具备权限管理和安全协同能力的数据库开发工具,帮助 DBA 在完成管控任务的同时,尽可能降低运维成本。

OceanBase 开发者中心(ODC)作为 OceanBase 数据库官方配套的开发平台,自 V3.2.0 版本引入权限模型以来,提供了公共资源的全生命周期权限管理能力,现已迭代至 V4.1.0 版本。为了帮助大家更顺畅地使用 ODC,以及遇到问题时能够更快速地解决,本文将以数据库的访问控制为例,分享 ODC 数据库访问权限管理背后的设计思考和基本原理,解答上述问题。

案例分析:如何给 DBA 减负?

首先来看一个真实案例:某互联网公司电商业务的开发环境共有 OceanBase 数据库 250 套,需要分配给 3 个业务部门使用,要求每个部门的数据库相互之间不可见。公司电商业务线拥有约 200 名研发人员,但仅有 1 个由 3 人组成的 DBA 团队,并且处于业务上升期,频繁有新员工加入和部门间人事调动。

Image

在大多数企业级场景下,研发人员数量远大于 DBA,如何给 DBA 减负是个亟需解决的问题:

问题一: 黑屏操作很繁琐,为了保证数据库安全可控,不能将连接账密直接给研发同学,该如何管理呢?

问题二: 研发人员太多管不过来,不如让各部门 Leader 自己管,如何优雅地下放权限?全公司用一套系统,怎么保证部门间的资源隔离?

问题三: 新员工加入到研发团队,每次都要手动给他/她授权,如何解放 DBA 的双手?

ODC 如何解决这些问题

我们来看使用 ODC 怎么解决上述问题,只需以下关键三点:

资源权限管理

ODC 提供了公共资源权限管理功能。 具备管理权限的用户登录 ODC 后,可以进入公共资源管控台后,进行数据库资源权限的分配和管控。

例如针对上述客户案例,可以进行如下配置:新建角色 department_A_RD 并为其分配生产库 A 的只读权限和研发库 A 的读写权限,然后将角色 department_A_RD 授予隶属部门 A 的研发人员。那么,部门 A 的研发人员登录 ODC 后将自动获得相应数据库的访问权限。

Image

灵活配置权限

ODC 提供两种授权方式供用户灵活选择:一是通过创建角色,配置角色拥有的权限,然后将角色授予用户,来让用户获得角色拥有的相应权限;二是直接以公共连接为单位,管理用户的访问权限。

Image

通过角色间接管理用户权限的方法适用于批量管理的场景。例如,需要让部门 A 的所有研发人员都拥有生产库 A 的只读权限,就可以通过创建角色配置生产库 A 的只读访问权限,并将该角色授予部门 A 的研发人员来实现。对于一些定制化场景,例如需要给部门 A 中的特定几名员工授予 高危数据库 的访问权限,就可以直接在 ODC 管控台中,将这几名员工的账号添加到可访问高危数据库的用户列表中,而不需要额外创建角色。

ODC V4.1.0 版本还支持为角色配置资源管理权限和系统操作权限。通过该功能,可以将部分低危数据库的管理权限下放给部门管理员,降低 DBA 的工作负担。

Image

自动授权规则

基于上述功能,ODC 已经能够解决规模用户的数据库访问权限管理问题。为了进一步减少人工干预、节省人力成本,ODC V4.1.0 推出了自动授权功能。该功能允许用户使用文本表达式配置授权规则,实现通用化场景下的自动授权操作。

例如,要让部门 A 的新员工首次登录 ODC 后自动获得部门 A 研发人员的权限和高危数据库的可申请权限,可配置图示自动授权规则:

Image

ODC 解决问题的背后逻辑

通过上面的例子,我们不难发现,ODC 解决问题背后的逻辑涉及两方面,一方面是权限模型,另一方面是权限框架。

权限模型

ODC 采用基于角色的访问控制(Role-Based Access Control, RBAC)和基于属性的访问控制(Attribute-Based Access Control, ABAC)并存的权限模型,如下图所示。基于 RBAC 模型,ODC 可以实现用户权限的批量操作和统一管理;基于 ABAC 模型,ODC 可以跳过角色直接将权限授予用户,适用于细粒度的访问控制。两种权限模型互不干扰:在对用户操作进行鉴权时,会同时从这两条线路计算用户权限,只要任意一条通过即通过鉴权。

Image

权限框架

权限框架主要完成两个任务:一是对权限本身进行抽象和管理;二是为鉴权提供接口和实现。

权限的抽象

权限可以抽象为对资源的行为。在 ODC 中,我们使用资源表达式对资源其进行表述,其采用层级化思想,结构为: R e s o u r c e T y p e : {ResourceType}: ResourceType:{ResourceId}[/ R e s o u r c e T y p e : {ResourceType}: ResourceType:{ResourceId}/…]。例如,对于 ID 为 1 的公共连接,用 ODC_CONNECTION:1表示;对于 ID 为 1 的资源组中的所有公共连接,可以用 ODC_RESOURCE_GROUP:1/CONNECTION:*表示。

ODC 用户可获得的数据库权限包括访问权限和管理权限。其中,访问权限包括可申请、只读和读写;管理权限包括仅查看、可编辑、可管理、可新建。使用行为描述符的组合来对资源的权限进行表述,具体如下:

Image

不同的行为之间可能存在隐含关系。例如,若用户拥有公共连接的读写(connect)权限,就自然应该有该公共连接的仅查看(read)和可申请(apply)权限。ODC 通过二进制掩码的位运算实现不同行为间隐含关系的判断:若行为 1 的掩码与行为 2 的掩码进行 按位与(&) 操作后等于行为 2 的掩码,则说明行为 2 隐含了行为 1。

鉴权流程

用户要想对数据库等公共资源进行访问和管理,都需要发起 API 调用请求,获取返回值。API 调用本质上是调用 ODC 后端的方法。因此,鉴权的时机可以放在方法调用前和执行结果返回前,具体鉴权流程如下图所示:

Image

鉴权的逻辑可以简要概括为:获取当前的用户信息,然后从元数据库中查询用户直接拥有的权限和通过关联角色而获得的权限,接着将用户已有的权限(acquiredPrivilege)和执行方法所需的权限(requiredPrivilege)进行比对,如果 acquiredPrivilege 隐含了 requiredPrivilege,则通过鉴权;否则鉴权不通过,程序抛出异常。

小结

管控协同在企业开发场景下实属刚需。本文以数据库的访问控制为例,向您介绍了 ODC 在权限管理上的产品形态和实现原理,由于内容不涉及太多技术细节,大家有相关疑问可以在评论区展开讨论。事实上,ODC 的管控协同能力才刚刚崭露头角,未来,我们将支持库、表、敏感列等更细粒度的权限管理,并提供更易用的团队协同交互体验,敬请期待!

欢迎访问 OceanBase 官网获取更多信息:https://www.oceanbase.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/7472.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Midjourney 使用总结

1.关键词提问 中国古典女性,东方美女极致面容站在运河码头遥望丈夫,史诗奇幻场景风格,深绿浅棕,细节风帆,柔焦,人像隐喻,4K,电影级高品质照片,全景图, 焦距 …

突破市场壁垒:如何利用关键词采集和市场调查找到你的细分市场?

在市场竞争日益激烈的今天,寻找一个适合自己的细分市场成为了每个企业和创业者的必要之举。然而,许多人在寻找细分市场时陷入了困境,不知道如何找到一个符合自己产品的市场,因此,在这种情况下,利用关键词采…

UVM response_handler和get_response机制

很多UVM用户平时更多的使用get_response()方式去获得uvm_driver的response,但get_response有些缺点:由于 get_response() 是一种阻塞方法,它会阻塞直到收到来自 UVM 驱动程序 (put_response()) 的响应。因此,如果我们使用 get_res…

CleanMyMac X4.20最新mac电脑优化工具好用吗?

如果你的Mac运行速度变慢,很有可能是因为RAM内存被过度占用了。本文将向Mac用户,尤其是小白用户归纳一些常见的Mac内存清理方法。通过释放RAM内存,你将会看到自己Mac的运行速度有显著提升。 你的Mac运行速度是否变得慢到让人抓狂?…

项目下载中心-超简单版解决方案

简单的下载中心的设计流程 直接上设计流程: 以上就是步骤了,至于每个步骤怎么实现,那方法就很多了 ,随意,达到目的就行。 至于各种问题,比如队列性能,消息重复或丢失,等等&#…

130亿参数,8个A100训练,UC伯克利发布对话模型Koala

平替再平替,可以在消费级 GPU 上运行的 Koala 模型能实现 ChatGPT 一半的性能。 自从 Meta 发布并开源了 LLaMA 系列模型,来自斯坦福大学、UC 伯克利等机构的研究者们纷纷在 LLaMA 的基础上进行「二创」,先后推出了 Alpaca、Vicuna 等多个「…

Solon v2.2.7 发布,支持 Java 20

Solon 是一个高效的 Java 应用开发框架:更快、更小、更简单。也是一个有自己接口标准规范的开放生态。 150来个生态插件,覆盖各种不同的应用开发场景: 相对于 Spring Boot 和 Spring Cloud 的项目: 启动快 5 ~ 10 倍…

【无功优化】基于改进遗传算法的电力系统无功优化研究【IEEE30节点】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

4.5--计算机网络之基础篇--1.模型分层--(复习+深入)---好好沉淀,加油呀

1.TCP/IP模型的分层 1.1.为什么要有 TCP/IP 网络模型? 对于同一台设备上的进程间通信,有很多种方式,比如有管道、消息队列、共享内存、信号等方式; 而对于不同设备上的进程间通信,就需要网络通信,而设备是…

2021蓝桥杯真题大写 C语言/C++

题目描述 给定一个只包含大写字母和小写字母的字符串,请将其中所有的小写字母转换成大写字母后将字符串输出。 输入描述 输入一行包含一个字符串。 输出描述 输出转换成大写后的字符串。 输入输出样例 示例 输入 LanQiao 输出 LANQIAO 评测用例规模与约定 对于…

python 生成器、迭代器、动态新增属性及方法

目录 一、生成器 1、生成器定义 2、生成器存在的意义 3、创建生成器方式一(生成器表达式) 4. 创建生成器方式二(生成器函数) 1. 生成器函数 2. 生成器函数的工作原理 5. 总结 1. 什么是生成器 2. 生成器特点 二、迭代器…

365天深度学习训练营-第J8周:Inception v1算法实战与解析

目录 一、前言 二、论文解读 1. Inception 模块 2. 网络深度问题 3. 全局平均池化 4. 卷积层的并行结构 5. 1x1 卷积核 6.详细的网络结构 三、代码复现 一、前言 🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者&#x…

微服务+springcloud+springcloud alibaba学习笔记【Eureka服务注册中心】(3/9)

Eureka服务注册中心 3/91、服务注册与发现1.1 什么是服务治理:1.2 什么是服务注册与发现:1.3 Eureka服务注册与发现2、单机版eureka2.1 创建module2.2改pom依赖2.3写yml配置文件:2.4主启动类2.5 修改服务提供者 cloud-provider-payment8001 模块&#xf…

Github库中的Languages显示与修改

目录 前言 【.gitattributes】文件 修改GitHub语言 前言 上传一个项目到GitHub时,发现显示的语言并非是自己项目所示的语言,这样的情况是经常发生的,为了能到达自己所需快速检索,或者是外部访问者能很好的搜索我们的项目&#…

Sentinel滑动时间窗限流算法原理及源码解析(中)

文章目录 MetricBucketMetricEvent数据统计的维度WindowWrap样本窗口实例 范型T为MetricBucket windowLengthInMs 样本窗口长度 windowStart 样本窗口的起始时间戳 value 当前样本窗口的统计数据 其类型为MetricBucket MetricBucket MetricEvent数据统计的维度 1、首先计算27t位…

【花雕学AI】09:发挥ChatGPT最大潜力——产生高质量内容的九种方法和建议

人工智能(AI)是当今科技领域最热门和最有前景的话题之一,它已经渗透到了我们生活和工作的方方面面,给我们带来了许多便利和惊喜。而在AI的众多分支中,自然语言处理(NLP)是最贴近人类的一个领域&…

6-python异常、错误、模块、包

文章目录1.异常2.错误3.模块4.包[综合练习]1.异常 打开一个不存在的文件会引发异常 FileNotFoundError: [Errno 2] No such file or directory: ‘D:/不存在的文件.txt’ fopen(file"D:/不存在的文件.txt",mode"r", encodingutf-8) print(f.read())&…

springboot-gateway注册nacos失败,控制台没有报错

目录 前言现象描述前言 最近springboot的gateway注册到nacos上,没有注册成功 现象描述 我是在common里面引入了nacos的依赖,依赖如下: <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-confi…

文件的随机读写

fseek fseek这个函数的作用是什么&#xff1f; 我们知道&#xff0c;如果对一个文件指针进行加减操作的话&#xff0c;这个文件指针会指向下一个文件&#xff0c;那么问题来了&#xff0c;我们如果想访问这个文件中的某一个内容&#xff0c;这个时候该怎么办呢&#xff0c;我们…

基于支持向量机SVM的脑部肿瘤识别,脑电波样本熵提取

目录 支持向量机SVM的详细原理 SVM的定义 SVM理论 Libsvm工具箱详解 简介 参数说明 易错及常见问题 SVM应用实例,基于SVM的的脑部肿瘤识别分类预测 代码 结果分析 展望 支持向量机SVM的详细原理 SVM的定义 支持向量机(support vector machines, SVM)是一种二分类模型,它…
最新文章