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

作者介绍:何剑敏 Oracle ACS华南区售后团队,首席技术工程师。多年从事一线的数据库运维工作,有丰富项目经验、维护经验和调优经验,专注于数据库的整体运维。

越来越多的互联网企业在使用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的语句……

测试模拟

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

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

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

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

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

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

总结教训

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

原文发布于微信公众号 - 数据和云(OraNews)

原文发表时间:2018-01-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏微信小程序开发

开发小程序被问到最频繁的问题(下)

连胜老师在自己的微信小程序开发群里,也经常帮人解答问题,在这里整理一下最频繁被问到的小程序问题。本篇是《开发小程序被问到最频繁的问题(上)》的续篇。 9、用户不...

5409
来自专栏FreeBuf

针对近期“博全球眼球的OAuth漏洞”的分析与防范建议

据Cnet报道,新加坡南洋理工大学一位名叫Wang Jing的博士生,发现了OAuth和OpenID开源登录工具的“隐蔽重定向”漏洞(Covert Redire...

17310
来自专栏Golang语言社区

Terratest:一个用于自动化基础设施测试的开源Go库

Gruntwork开源了他们的Go框架Terratest。该框架可以用于编写测试基础设施的自动化测试。该库内置了对Terraform和Packer的支持。

893
来自专栏IT技术精选文摘

当代码变更遇上精准测试的总结

敏捷模式下迭代频繁,回归测试时总是不知道变动的范围。Devlop 有的时候也不知道他改了哪些东西,影响到哪些节点,或者是很多人改的,彼此不知道。遇到有代码洁癖的...

1145
来自专栏BestSDK

一款完美的SDK产品,肯定具备这9个特质

即保证用户能够在5分钟以内学会使用代码。这一点非常重要,特别是考虑到有时候用户会评估我们的产品——如果无法轻松上手,他们很可能直接选择放弃。 ? 1. 简单性 ...

37610
来自专栏杨建荣的学习笔记

循序渐进调优ddl的案例 (79天)

在平时的工作中,可能需要导入一些数据,有些表可能比较大,对于constraint的操作可能会耗费大量的时间,今天简单做了一些相关的测试,也提出了一些相关的优化方...

2558
来自专栏腾讯IVWEB团队的专栏

ESLint 可共享配置发布,团队自定义 ESLint 规则新鲜出炉

为了更好的统一团队的 JS 编程风格和代码质量。feflow 官方经过调研和探索,终于迎来了ESLint 的解决方案,最核心的理念是:基于 eslint:rec...

2550
来自专栏杨建荣的学习笔记

数据整合式迁移的一些总结(r8笔记第38天)

说起数据迁移,感觉也算是有些感受了,但是最近参与的几个迁移案例还是和以前大大不同,以前的迁移项目是比拼停机维护时间,尽可能在短时间诶导入大批量的 数据,有参与表...

2995
来自专栏zingpLiu

python【第十三篇】可以写一个堡垒机了

到目前为止,很多公司对堡垒机依然不太感冒,其实是没有充分认识到堡垒机在IT管理中的重要作用的,很多人觉得,堡垒机就是跳板机,其实这个认识是不全面的,跳板功能只是...

693
来自专栏ImportSource

微服务应具备的12个属性

该文翻译自Pivotal公司的 Matt Stine大牛的书籍《Migrating to Cloud Native Application Architectu...

2619

扫描关注云+社区