pg数据库有雷锋?用户已有权限为何无故消失?

简介:

越来越多的互联网企业在使用postgresql数据库,我们也不例外。接下来分享一个反复授权排查权限消失的案例。

发现问题

昨天开发请我建立了一个只读用户abc_tmp_test用户,并且将mkl_rw用户下的32个表授权给只读用户用。ok,请简单轻松的一个需求,很快就完成了。但是今天开发来和我说,昨天授权的几个表中,有部分表还是没有权限去读取,让我帮忙看看。

排查问题

第一次授权

一开始,我以为是昨天遗漏了,先道了一个歉,再次进行了授权,授权完成之后,检查了32个表,都能被只读用户查询,于是放心的告诉开发,昨天的所有表都已经授权好了,我也检查过一次了。这次肯定不会漏了。

万万没想到,半小时后,开发来和我说,不行,还是有其中几个表没有权限。我之前的连接还没断开,再次跑了一遍之前的检查语句,确实没有权限了。卧槽?这是咋回事?数据库中有雷锋了?

第二次授权

我再次授权了一次,并且检查了information_schema.table_privileges,确认了再次授权后,是新增了32行记录。这次我没有先通知开发,说已经授权完成了,而是过了一会,我再次去查,变成了28行,又过了一会,变成了16行!

也就是我授权的32个表的select权限给只读用户,过一段时间之后,这32个表中的一些表的权限会慢慢消失!而且消失权限的表,也没有发现先授权的先消失,后授权的后消息的规律,但是可以发现最终剩下的,就是那16个表。我开始怀疑起人生了……

难道是pg中授权的表的数量有限?不能超过16个?也没查到相关的参数啊。

难道是那16个表有什么特殊设置?从建表语句中也没看到啊。

难道授权之后需要checkpoint刷盘?测试了checkpoint还是一样丢权限。

难道真的有雷锋出现啊。还说什么pg和oracle一样牛,一样稳定,连基本的授权都会丢。

正在逐个检查参数之际,同事通过检查log,发现了drop table的语句……

测试模拟

原来如此,这个案例,可以用下面的测试过程模拟出来了:

71f7f7470e35aaa0a5a4e3d3c08d4ec98de94f14

是的,如果table被drop了之后,再次重建,此时原本授权给只读用户的权限,也会消失

向开发确认,是否有drop之后重建表的操作,开发确认,有段程序确实会定期的逐个drop表后重建表!!

为什么要进行drop表之后重建表的操作?开发说是通过调用框架清理数据,框架就是这么干的。

ok,明白了目的是为了清理数据,而不涉及到表结构的修改,那么其实用truncate来清理就可以了。如下测试,权限不会丢。

05ae8b6d29f15d0e404249dce7209f1383ea4646

最终,开发修改了代码,再次授权那32张表之后,权限不再慢慢消失了。

总结教训

1. 大千世界无奇不有,数据库中没有雷锋,而是有各种万万没想到的逻辑。
2. 幸亏我们在建库的时候,建库标准要求设置了log_statement=ddl, 才能在log中发现线索。(其实我们oracle和pg的建库标准,都设置了记录ddl)


原文发布时间为:2018-01-24

本文作者:何剑敏

本文来自云栖社区合作伙伴“数据和云”,了解相关信息可以关注“数据和云”微信公众号

相关文章
|
5月前
|
关系型数据库 数据库连接 数据库
Python执行PG数据库查询语句:以Markdown格式打印查询结果
使用Python的`psycopg2`和`pandas`库与PostgreSQL交互,执行查询并以Markdown格式打印结果。首先确保安装所需库:`pip install psycopg2 pandas`。接着建立数据库连接,执行查询,将查询结果转换为DataFrame,再用`tabulate`库将DataFrame格式化为Markdown。代码示例包括连接函数、查询函数、转换和打印函数。最后限制列宽以适应输出。
|
4月前
|
Oracle 安全 关系型数据库
|
3月前
|
SQL 安全 数据库
"数据库守卫战:揭秘SQL Server中角色与权限的神秘面纱,一键打造坚不可摧的安全堡垒!"
【8月更文挑战第21天】数据库安全性对企业至关重要。SQL Server提供强大机制保障数据安全,包括用户角色管理和权限授权。本文以杂文形式介绍如何创建服务器角色和数据库角色,并通过SQL语句进行权限分配。从创建角色到添加用户、授权和撤销权限,再到最佳实践,帮助读者掌握SQL Server中的角色和权限管理,确保数据安全与完整性。
52 0
|
3月前
|
SQL 数据库
拒绝了对对象 ‘GetTips‘ (数据库 ‘vipsoft‘,架构 ‘dbo‘)的 EXECUTE 权限
拒绝了对对象 ‘GetTips‘ (数据库 ‘vipsoft‘,架构 ‘dbo‘)的 EXECUTE 权限
37 0
|
4月前
|
关系型数据库 Java 数据库
实时计算 Flink版操作报错合集之flinksql采PG数据库时报错,该如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
4月前
|
数据可视化 安全 API
数据库开放权限风险高,API非唯一选择:DataV为您开启安全高效的数据可视化之旅
良好的用户体验:DataV注重用户体验设计,提供了丰富的交互效果和动画效果,使得数据可视化大屏更加生动、吸引人。这有助于提升用户的参与度和满意度,促进数据的广泛应用
|
5月前
|
运维 数据管理 数据库
数据管理DMS产品使用合集之遇到报错:数据库账号没有权限执行,该如何排查
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
50 2
|
5月前
|
SQL 关系型数据库 MySQL
【权限提升】六种数据库提权&口令获取
【权限提升】六种数据库提权&口令获取
|
4月前
|
关系型数据库 MySQL 数据库
MybatisPlus添加数据数据库没有数据,数据消失,使用Navicate看不到数据,Navicate中Mysql的数据与idea的数据不一定同步,Navicate与idea的数据库同步,其实有分页
MybatisPlus添加数据数据库没有数据,数据消失,使用Navicate看不到数据,Navicate中Mysql的数据与idea的数据不一定同步,Navicate与idea的数据库同步,其实有分页
|
5月前
|
NoSQL 关系型数据库 Serverless
Serverless 应用引擎产品使用合集之连接RDS、Redis等数据库时,是否需要通过安全组来控制访问权限
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。