《PostgreSQL服务器编程》一一1.5 审核更改

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
日志服务 SLS,月写入数据量 50GB 1个月
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介:

本节书摘来自华章计算机《PostgreSQL服务器编程》一书中的第1章,第1.5节,作者:(美)Hannu Krosing, Jim Mlodgenski, Kirk Roybal 著,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.5 审核更改

如果你需要知道谁对数据做了什么操作、是在什么时候进行的操作,一个简单的方法就是用日志来记录每个在重要的数据表上执行的动作。
这里至少有两种等效的方法可进行这种审核:
使用审核触发器
仅允许通过函数的方式来访问表,并且仅在函数内完成审核
接下来,我们将分别看一下每种方法的简单示例。
首先,我们创建这些表:
image

在一般情况下,并不希望用户可以更改审核日志,所以你只会把权限给到管理员,让他们可以访问这些表。而如果你计划让用户直接访问薪资表,为了达到审核的目的,你应该在这个表上放置一个触发器:
image

现在,让我们测试一下一些薪资管理:
image
image

为了达到审核的目的,每个更改都被保存到薪资变更日志表:
image

另一方面,你可能并不希望每个人都有直接访问薪资表的权限,在这种情况下,你可以执行以下语句:
image

同时,你给用户仅仅开放了两个函数的访问权限:一个是为了让任何用户可以查询薪资,另外一个是为了更改薪资,这个是只有管理员才可以操作的。
这些函数本身都有所有基础表的访问权限,因为它们被声明为安全定义者(SECURITY DEFINER),也就意味着它们执行的时候有创建者的权限。
薪资查看函数如下所示:
image

请注意,这里我们实现了一个“软件安全”(soft security)的方法,即你可以查看别人的薪资,但是你必须为这件事情负责,就是说,仅仅当你需要这样做时才有必要进行这样的操作,因为管理员将会知道你已经查看过别人的薪资。
set_salary()函数抽象出一个需求——检查用户是否存在,如果用户不存在,则创建用户。如果将用户的薪资设置为0,则会将用户从薪资表中删除。因此这个接口是被彻底简化的,这些函数的客户端应用程序需要知道的和完成的则会更少:
image
image

现在删除audit触发器(否则,更改会被日志记录两次),并测试新的功能:

image
image

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
12月前
|
网络协议 iOS开发
iOS 给服务器添加 ipv6 支持 以通过苹果审核
iOS 给服务器添加 ipv6 支持 以通过苹果审核
96 0
|
4月前
|
移动开发 网络协议 安全
iOS审核在ipv6网络下无法访问服务器的问题及解决方案
iOS审核在ipv6网络下无法访问服务器的问题及解决方案
138 0
|
SQL 关系型数据库 数据库
PostgreSQL 12 文档: 部分 V. 服务器编程
部分 V. 服务器编程 这部分关于使用用户定义的函数、数据类型、触发器等扩展服务器功能。这些是高级主题,读者应该在理解了有关PostgreSQL的所有其他用户文档之后才阅读这些主题。这一部分的后面一些章节描述PostgreSQL发布中可用的服务器端编程语言,以及与服务器端编程语言相关的一般性问题。在深入研究服务器端编程语言的材料之前,请至少阅读第 37 章中前几节(覆盖函数)。
81 0