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

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
简介: 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-X v2.4.1 增强企业级运维能力
PolarDB-X 是阿里云推出的云原生分布式数据库,自2021年10月开源以来,持续迭代升级,至2024年4月发布的v2.4.1版本,重点增强了企业级运维能力,如无锁变更、物理扩缩容、数据TTL等,提供金融级高可用、透明分布式、HTAP一体化等特性。PolarDB-X 支持集中式和分布式一体化形态,兼容MySQL生态,适用于金融、通信、政务等行业。
1902 101
|
SQL 存储 安全
PolarDB-X 企业级特性之行级访问权限控制
本文介绍PolarDB-X数据库实现了基于标签的访问控制功能,可以在行、列级别对数据访问进行控制,精细化的限制用户对数据的访问和操作,保证了读写数据的安全。下文根据实际应用场景,介绍PolarDB-X的LBAC功能设计以及使用方法。
|
存储 SQL 运维
云栖大会开源重磅升级![版本更新]PolarDB-X v2.2: 企业级和国产ARM适配
PolarDB-X 正式发布2.2.0版本,这是一个重要的里程碑版本,重点推出符合分布式数据库金融标准下的企业级和国产ARM适配,共包括八大核心特性,全面提升 PolarDB-X 分布式数据库在金融、通讯、政务等行业的普适性。
|
安全 druid Java
Seata 1.8.0 正式发布,支持达梦和 PolarDB-X 数据库
Seata 1.8.0 正式发布,支持达梦和 PolarDB-X 数据库
1197 95
Seata 1.8.0 正式发布,支持达梦和 PolarDB-X 数据库
|
存储 DataWorks 监控
DataWorks,一个 polar db 有上万个数据库,解决方案
DataWorks,一个 polar db 有上万个数据库,解决方案
|
SQL 存储 Web App开发
PolarDB-X 分布式数据库中的外键
外键是关系型数据库中非常便利的一种功能,它通过一个或多个列为两张表建立连接,从而允许跨表交叉引用相关数据。外键通过约束来保持数据的一致性,通过级联来同步数据在多表间的更新和删除。在关系数据库系统中,大多数表都遵循外键的概念。
|
2月前
|
Cloud Native 关系型数据库 MySQL
免费体验!高效实现自建 MySQL 数据库平滑迁移至 PolarDB-X
PolarDB-X 是阿里云推出的云原生分布式数据库,支持PB级存储扩展、高并发访问与数据强一致,助力企业实现MySQL平滑迁移。现已开放免费体验,点击即享高效、稳定的数据库升级方案。
免费体验!高效实现自建 MySQL 数据库平滑迁移至 PolarDB-X
|
缓存 运维 关系型数据库
数据库容灾 | MySQL MGR与阿里云PolarDB-X Paxos的深度对比
经过深入的技术剖析与性能对比,PolarDB-X DN凭借其自研的X-Paxos协议和一系列优化设计,在性能、正确性、可用性及资源开销等方面展现出对MySQL MGR的多项优势,但MGR在MySQL生态体系内也占据重要地位,但需要考虑备库宕机抖动、跨机房容灾性能波动、稳定性等各种情况,因此如果想用好MGR,必须配备专业的技术和运维团队的支持。 在面对大规模、高并发、高可用性需求时,PolarDB-X存储引擎以其独特的技术优势和优异的性能表现,相比于MGR在开箱即用的场景下,PolarDB-X基于DN的集中式(标准版)在功能和性能都做到了很好的平衡,成为了极具竞争力的数据库解决方案。
|
存储 缓存 负载均衡
【PolarDB-X 技术揭秘】Lizard B+tree:揭秘分布式数据库索引优化的终极奥秘!
【8月更文挑战第25天】PolarDB-X是阿里云的一款分布式数据库产品,其核心组件Lizard B+tree针对分布式环境优化,解决了传统B+tree面临的数据分片与跨节点查询等问题。Lizard B+tree通过一致性哈希实现数据分片,确保分布式一致性;智能分区实现了负载均衡;高效的搜索算法与缓存机制降低了查询延迟;副本机制确保了系统的高可用性。此外,PolarDB-X通过自适应分支因子、缓存优化、异步写入、数据压缩和智能分片等策略进一步提升了Lizard B+tree的性能,使其能够在分布式环境下提供高性能的索引服务。这些优化不仅提高了查询速度,还确保了系统的稳定性和可靠性。
287 5
|
存储 SQL 运维
“震撼发布!PolarDB-X:云原生分布式数据库巨擘,超高并发、海量存储、复杂查询,一网打尽!错过等哭!”
【8月更文挑战第7天】PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
279 1