PolarDB-X 企业级特性之三权分立

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介: PolarDB-X 支持三权分立模式,打破了传统数据库运维由 DBA 行使特权的独立控制体系,使得数据库管理员 DBA、安全管理员 DSA 和审计管理员 DAA 三者的权责更加清晰。

背景

image.png

看到以上的场景,可能不少 DBA 都会感同身受;同时,老板还可能会担心 DBA 的人品,就比如去年才发生了某科技公司删库导致业务瘫痪的事件。当然现在连很多小公司或开发团队也懂得象征性地设置一些数据库账号权限(不少时候可能会为了便捷而混用权限账号),但如果对于已经初具规模的企业来说的话,即使已经严格划分为有 SUPERUSER 权限的 DBA 账号和按需授权的开发账号,老板仍会担心 DBA 有权限访问业务敏感数据、或者授权给不明身份人士、甚至可以通过审计日志看到不同业务部门对数据库的操作,总之“只手遮天”的 DBA 仿佛就是把握了企业数据的命脉。

针对以上问题,PolarDB-X 新增支持三权分立模式,打破了传统数据库运维由 DBA 行使特权的独立控制体系,使得数据库管理员 DBA、安全管理员 DSA 和审计管理员 DAA 三者的权责更加清晰。其中:

  • 数据库管理员(DBA, Database Administrator):只具备 DDL 权限
  • 安全管理员(DSA,Department Security Administrator):只具备管理角色(Role)或用户(User)以及为其他账号授予权限的权限
  • 审计管理员(DAA,Data Audit Administrator):只具备查看审计日志的权限

该功能特性强调的是通过访问层次上的控制体系,来从数据库层面降低安全风险。

原理简介

以 Oracle 这一款王者级别的数据库管理系统为例,其从 Oracle 10g 开始推出了 Database Vault [2]这一运维安全体系框架。在这套框架内,其定义了数据库中以下三种核心职责:

  • 账号管理:包括创建、修改、删除用户账号
  • 安全管理:设置账户对数据库的访问权限,授权用户对数据库表上可执行的操作
  • 资源管理:管理数据库系统的资源,但无权访问业务数据,比如进行定期备份、性能监控与调优等操作

可以看出,其核心思想是将原来单一的数据库管理员超级权限进行拆分。在此基础上,PolarDB-X 的三权分立管理模式则结合了分布式数据库的特点,将权限信息保存在独立的 GMS 元数据中心,并且权限职责划分得更加清晰明确,下表展示了三权分立与默认模式的权限区别:

权限 默认模式 三权分立-DBA 三权分立-DSA 三权分立-DAA
DML ✔️
DQL ✔️
DAL ✔️
DDL ✔️ ✔️
账号角色管理 ✔️ ✔️
审计日志 ✔️ ✔️

其中,具体的权限分类如下所示:

  • DML 包括 INSERT、UPDATE、DELETE语句权限
  • DQL 包括 SELECT语句权限
  • DAL 包括 EXPLAIN、SHOW、sql限流等语句权限
  • DDL 包括 CREATE TABLE / VIEW / INDEX、DROP TABLE / VIEW / INDEX等语句权限
  • 账号角色管理包括 CREATE USER / ROLE、GRANT、REVOKE 等语句权限
  • 审计日志则包括对 information_schema 下 polardbx_audit_log 系统表的访问权限

功能场景展示

功能开启
开启三权分立模式均为白屏化操作

  1. 在 PolarDB-X 控制台开启三权分立:

image.png

  1. 依次创建安全管理员账号和审计管理员账号:

image.png

image.png

  1. 创建成功后可以看到三个管理员账号:

image.png

下面将将结合具体的场景、以上述三个类型管理员的身份来演示不同类型的SQL操作,并展示三权分立支持的核心功能,其中三类管理员的账号名分别如下所示:

  • 系统管理员:admin_dba
  • 安全管理员:admin_security
  • 审计管理员:admin_audit

场景一 隔离敏感数据
image.png

-- 登录admin_dba
mysql> select USER();
+---------------------------+
| USER()                    |
+---------------------------+
| admin_dba@100.120.138.141 |
+---------------------------+
1 row in set (0.00 sec)

mysql> select * from orders;
ERROR 5108 (HY000): [13aaee05c5003000][11.115.153.234:3035][tmall]ERR-CODE: [TDDL-5108][ERR_CHECK_PRIVILEGE_FAILED_ON_TABLE] User admin_dba@'100.120.138.141' does not have 'SELECT' privilege on table 'ORDERS'. Database is TMALL.

mysql> insert into orders (`o_id`,`o_c_id`,`o_s_id`) values (162103411, 1, 123);
ERROR 5108 (HY000): [13aaee0c37803000][11.115.153.234:3035][tmall]ERR-CODE: [TDDL-5108][ERR_CHECK_PRIVILEGE_FAILED_ON_TABLE] User admin_dba@'100.120.138.141' does not have 'INSERT' privilege on table 'ORDERS'. Database is TMALL.

场景二 隔离权限授予
image.png

-- 登录admin_dba
mysql> select USER();
+---------------------------+
| USER()                    |
+---------------------------+
| admin_dba@100.120.138.141 |
+---------------------------+
1 row in set (0.00 sec)

mysql> CREATE USER 'user1'@'%' IDENTIFIED BY 'polarX123456';
ERROR 5110 (HY000): [13aaee115fc03000][11.115.153.234:3035][tmall]ERR-CODE: [TDDL-5110][ERR_CHECK_PRIVILEGE_FAILED] User admin_dba@'100.120.138.141' does not have 'CREATE ACCOUNT' privilege. Database is TMALL.

-- 登录admin_security
mysql> select USER();
+--------------------------------+
| USER()                         |
+--------------------------------+
| admin_security@100.120.137.141 |
+--------------------------------+
1 row in set (0.00 sec)

mysql> CREATE USER 'tmall_dev'@'192.168.0.%' IDENTIFIED BY 'polarX123456';
Query OK, 0 rows affected (0.07 sec)

mysql> grant select,insert,update on tmall.* to 'tmall_dev'@'192.168.0.%';
Query OK, 0 rows affected (0.03 sec)

mysql> show grants for 'tmall_dev'@'192.168.0.%';
+----------------------------------------------------------------------+
| GRANTS FOR 'TMALL_DEV'@'192.168.0.%'                                 |
+----------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'tmall_dev'@'192.168.0.%'                      |
| GRANT SELECT, INSERT, UPDATE ON tmall.* TO 'tmall_dev'@'192.168.0.%' |
+----------------------------------------------------------------------+
2 rows in set (0.00 sec)

场景三 隔离sql日志
image.png

-- 登录admin_audit
mysql> select USER();
+-----------------------------+
| USER()                      |
+-----------------------------+
| admin_audit@100.120.138.141 |
+-----------------------------+
1 row in set (0.00 sec)

mysql> use information_schema;
Database changed
mysql> select USER_NAME,HOST,PORT,AUDIT_INFO,ACTION,TRACE_ID from polardbx_audit_log where SCHEMA = 'tmall';
+----------------+-----------------+------+--------------------------------------------------------------------+-------------+------------------+
| USER_NAME      | HOST            | PORT | AUDIT_INFO                                                         | ACTION      | TRACE_ID         |
+----------------+-----------------+------+--------------------------------------------------------------------+-------------+------------------+
| admin_security | 100.120.137.141 | 9635 | CREATE USER 'tmall_dev'@'192.168.0.%' IDENTIFIED BY 'polarX123456' | CREATE_USER | 13aaef15fd004000 |
| admin_security | 100.120.137.141 | 9635 | grant select,insert,update on tmall.* to 'tmall_dev'@'192.168.0.%' | GRANT       | 13aaef5d78804000 |
+----------------+-----------------+------+--------------------------------------------------------------------+-------------+------------------+
2 rows in set (0.01 sec)

关于详细使用方法与实践可参考官方文档

总结

回过头来看,三权分立是不是能彻底解决在开篇背景中提到的删库跑路的问题呢?事实上,看完这篇文章,你会知道并不能;如果想知道如何避免删库等操作带来的风险,可以参考系列文章《PolarDB-X 如何拯救误删数据的你》。

那么三权分立究竟带来了什么呢?三权分立本质就是权力的分散,而这并不意味着会导致效率的低下;相反实行分责制度,避免一些误操作的风险,还可以有效降低敏感数据泄露的风险。

笔者相信,在数据保护越来越严格、企业操作规范越来越健全的如今,三权分立模式将为需要管理大规模数据库的企业降低运维风险、提供敏感数据访问保护,从而企业不仅能够同时减少来自内、外部的威胁,还能满足相应的合规需求。


参考

  1. https://docs.oracle.com/en/database/oracle/oracle-database/21/dvadm/oracle-database-vault-schemas-roles-and-accounts.html#GUID-4E1707B4-F9BB-4131-9D3E-90BB273F2832
  2. https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html
相关实践学习
快速体验PolarDB开源数据库
本实验环境已内置PostgreSQL数据库以及PolarDB开源数据库:PolarDB PostgreSQL版和PolarDB分布式版,支持一键拉起使用,方便各位开发者学习使用。
目录
相关文章
|
SQL 存储 安全
PolarDB-X 企业级特性之行级访问权限控制
本文介绍PolarDB-X数据库实现了基于标签的访问控制功能,可以在行、列级别对数据访问进行控制,精细化的限制用户对数据的访问和操作,保证了读写数据的安全。下文根据实际应用场景,介绍PolarDB-X的LBAC功能设计以及使用方法。
|
存储 SQL 运维
云栖大会开源重磅升级![版本更新]PolarDB-X v2.2: 企业级和国产ARM适配
PolarDB-X 正式发布2.2.0版本,这是一个重要的里程碑版本,重点推出符合分布式数据库金融标准下的企业级和国产ARM适配,共包括八大核心特性,全面提升 PolarDB-X 分布式数据库在金融、通讯、政务等行业的普适性。
|
1月前
|
关系型数据库 MySQL 分布式数据库
零基础教你用云数据库PolarDB搭建企业网站,完成就送桌面收纳桶!
零基础教你用云数据库PolarDB搭建企业网站,完成就送桌面收纳桶,邀请好友完成更有机会获得​小米Watch S3、小米体重称​等诸多好礼!
零基础教你用云数据库PolarDB搭建企业网站,完成就送桌面收纳桶!
|
2月前
|
关系型数据库 MySQL Serverless
探索PolarDB MySQL版:Serverless数据库的灵活性与性能
本文介绍了个人开发者对阿里云PolarDB MySQL版,特别是其Serverless特性的详细评测体验。评测涵盖了产品初体验、性能观测、Serverless特性深度评测及成本效益分析等方面。尽管试用过程中遇到一些小问题,但总体而言,PolarDB MySQL版表现出色,提供了高性能、高可用性和灵活的资源管理,是个人开发者和企业用户的优秀选择。
|
3月前
|
关系型数据库 MySQL 分布式数据库
PolarDB 与传统数据库的性能对比分析
【8月更文第27天】随着云计算技术的发展,越来越多的企业开始将数据管理和存储迁移到云端。阿里云的 PolarDB 作为一款兼容 MySQL 和 PostgreSQL 的关系型数据库服务,提供了高性能、高可用和弹性伸缩的能力。本文将从不同角度对比 PolarDB 与本地部署的传统数据库(如 MySQL、PostgreSQL)在性能上的差异。
231 1
|
15天前
|
关系型数据库 分布式数据库 数据库
锦鲤附体 | PolarDB数据库创新设计赛,好礼不停!
锦鲤附体 | PolarDB数据库创新设计赛,好礼不停!
|
1月前
|
关系型数据库 分布式数据库 数据库
PolarDB 开源:推动数据库技术新变革
在数字化时代,数据成为核心资产,数据库的性能和可靠性至关重要。阿里云的PolarDB作为新一代云原生数据库,凭借卓越性能和创新技术脱颖而出。其开源不仅让开发者深入了解内部架构,还促进了数据库生态共建,提升了稳定性与可靠性。PolarDB采用云原生架构,支持快速弹性扩展和高并发访问,具备强大的事务处理能力及数据一致性保证,并且与多种应用无缝兼容。开源PolarDB为国内数据库产业注入新活力,打破国外垄断,推动国产数据库崛起,降低企业成本与风险。未来,PolarDB将在生态建设中持续壮大,助力企业数字化转型。
85 2
|
2月前
|
关系型数据库 分布式数据库 数据库
2024年全国大学生计算机系统能力大赛PolarDB数据库创新设计赛(天池杯)等你来战!
2024年全国大学生计算机系统能力大赛PolarDB数据库创新设计赛(天池杯)等你来战!
2024年全国大学生计算机系统能力大赛PolarDB数据库创新设计赛(天池杯)等你来战!
|
2月前
|
关系型数据库 分布式数据库 数据库
来!跟通义灵码一起参加PolarDB 数据库创新设计赛,突破传统,探索人机协作
无论你是数据库新手,还是技术大咖,通义灵码邀请你参加2024 年全国大学生计算机系统能力大赛 PolarDB 数据库创新设计赛(天池杯),新参赛模式启动,挑战极限!
109 11
|
2月前
|
关系型数据库 MySQL 分布式数据库
PolarDB MySQL数据库场景体验与测评
本文介绍如何在PolarDB上部署数据库,包括登录控制台、配置账号与数据库管理、执行SQL查询及调整Serverless配置等内容。通过创建测试表和数据操作演示了基本数据库管理功能,并展示了如何设置资源弹性扩缩、监控及备份数据。此外,还提供了关于节点切换、压测、加速复杂SQL查询、弹性并行查询及高可用性的详细场景体验说明,全方位展示了PolarDB的强大功能。