【重新发现PostgreSQL之美】- 39 谁动了我的奶酪

简介: 大家好,这里是重新发现PostgreSQL之美 - 39 谁动了我的奶酪

背景


场景:

  • 关键数据被误操作或篡改怎么办?

挑战:

  • 怎么发现和定位?
  • 怎么快速通知?
  • 能不能记下前后变化差异?
  • 能不能回退?
  • 采取什么行动?
  • 能不能限制?
  • 能不能藏起来, 基于行或者列?

PG 解决方案:

  • 发现并记下
  • 可回退
  • 拒绝执
  • 藏起
  • 细粒度权限控

例子


1、发现并记下来:

谁干的:

  • 客户端: ip, port
  • 数据库端: username, dbname, ip, port, timestamp, application_name等会话特

dml:

  • update old.value, new.value
  • delete old.value
  • insert new.value

PostgreSQL 触发器用法详解1
PostgreSQL 触发器用法详解2
PostgreSQL 闪回- flash back query emulate by trigger
PostgreSQL 跟踪记录是谁写入的,谁更新的, 什么时间点, 来源IP等》
PostgreSQL 跟踪记录被更新了多少次, 每次更新的前后值,
PostgreSQL 跟踪记录(row,tuple)的插入、更新时间- spi,moddatetime trigger
PostgreSQL 14 preview - System Versioned Temporal Table - flashback闪回、跟踪、审计record/row/tuple历史版本》

DDL:

  • drop, truncate 回收

PostgreSQL Oracle 兼容性之- 事件触发器实现类似Oracle的回收站功能》
PostgreSQL 回收站功能- 基于HOOKrecycle bin pgtrashcan

或者使用审计:
PostgreSQL 审计- pg_audit module
log_statement = all

2、可回退

PostgreSQL 最佳实践- 在线增量备份与任意时间点恢复》
PostgreSQL 闪回- flash back query emulate by trigger

3、可实时告

notify

SENDMAIL

4、拒绝、忽略执

拒绝执行: trigger 报错: raise exception
忽略执行: before trigger return null

5、藏起

EnterpriseDB & PostgreSQL RLS & Oracle VPD


         
[ AS { PERMISSIVE | RESTRICTIVE } ]
[ FOR { ALL | SELECT | INSERT | UPDATE | DELETE } ]
[ TO { role_name | PUBLIC | CURRENT_ROLE | CURRENT_USER | SESSION_USER } [, ...] ]
[ USING ( using_expression ) ]
[ WITH CHECK ( check_expression ) ]

6、细粒度权限控

权限: 查询、插入、更新、删除、截断、外键、触发器

粒度: 表、列、行


         
[, ...] | ALL [ PRIVILEGES ] }
ON { [ TABLE ] table_name [, ...]
| ALL TABLES IN SCHEMA schema_name [, ...] }
TO role_specification [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY role_specification ]

         
GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )
[, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
ON [ TABLE ] table_name [, ...]
TO role_specification [, ...] [ WITH GRANT OPTION ]
[ GRANTED BY role_specification ]

         
CREATE POLICY name ON table_name
[ AS { PERMISSIVE | RESTRICTIVE } ]
[ FOR { ALL | SELECT | INSERT | UPDATE | DELETE } ]
[ TO { role_name | PUBLIC | CURRENT_ROLE | CURRENT_USER | SESSION_USER } [, ...] ]
[ USING ( using_expression ) ]
[ WITH CHECK ( check_expression ) ]

 

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
消息中间件 监控 Kafka
Kafka集群监控系统Kafka Eagle部署与体验
Kafka集群监控系统Kafka Eagle部署与体验
1018 0
Kafka集群监控系统Kafka Eagle部署与体验
|
运维 安全 网络性能优化
工业路由器:企业网络的中流砥柱和个人路由器有什么区别?卓伊凡
工业路由器:企业网络的中流砥柱和个人路由器有什么区别?卓伊凡
1147 11
工业路由器:企业网络的中流砥柱和个人路由器有什么区别?卓伊凡
|
安全 持续交付 Docker
Docker:重塑现代软件交付的容器引擎
Docker:重塑现代软件交付的容器引擎
|
传感器 监控 数据可视化
手把手教你用IoT设备监控家庭环境数据
本实验带您体验如何通过六合一传感器(温度、湿度、二氧化碳、PM2.5、PM10、甲醛)实现家庭环境数据实时采集,并搭建可视化大屏实时监控。
|
负载均衡 网络协议 关系型数据库
docker swarm 使用网络启动服务
【10月更文挑战第15天】
476 4
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
1654 6
|
Kubernetes 应用服务中间件 nginx
K8S二进制部署详解,一文教会你部署高可用K8S集群(二)
K8S二进制部署详解,一文教会你部署高可用K8S集群(二)
1729 0
|
SQL 存储 关系型数据库
MySQL8.0之执行计划
MySQL8.0.17 执行计划
2971 0
|
安全 Java API
JDK 11 vs JDK 8:探索Java的新特性和改进
JDK 11 vs JDK 8:探索Java的新特性和改进
|
Android开发
android studio找不到aar问题解决
android studio找不到aar问题解决
1064 0