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 条评论
登录 后参与评论

相关文章

来自专栏phodal

你不再需要动态网页——编辑-发布-开发分离

尽管没有特别的动力去构建一个全新的CMS,但是我还是愿意去撰文一篇来书写如何去做这样的事——编辑-发布-开发分离模式是如何工作的。微服务是我们对于复杂应用的一种...

1999
来自专栏非著名程序员

下一代Android渠道打包工具

前面我们曾经讲过两种Android的渠道打包方式,包括其中的原理都有所涉及。今天给大家讲解的是packer-ng-plugin简称packer,号称是下一代的A...

2408
来自专栏技术栈大杂烩

Linux: Nginx proxy_pass域名解析引发的故障

部署细节:   两容器均部署在同一机器上,通过 docker-compose 编排,并且通过link方式链接。

942
来自专栏编程微刊

微信小程序从零开始开发步骤(一)搭建开发环境小程序初始化目录介绍:

2024
来自专栏阿杜的世界

JVM源码分析之perfData文件的创建

看泉子的一篇文章:JVM源码分析之Jstat工具原理完全解读 - 你假笨 里提到了两个JVM参数,可以控制perfdata文件是否共享,引用泉子对这两个参数的解...

1061
来自专栏FreeBuf

某云用户网站入侵应急响应

1、情况概述 该案例是前期应急处置的一起因安全问题导致的内网不稳定的情况。写下来,和大家一起讨论应急响应的一些思路及其中间遇到的一些坑,欢迎大牛指点、讨论。 情...

2267
来自专栏Aloys的开发之路

创建和使用Windows静态链接库

首先明确这篇文章的目的,我希望大家能够通过这篇文章了解一下如何在实际工作中创建和使用Windows平台下的静态链接库。关于链接库的概念,希望大家参考维基百科”L...

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

大数据查询——HBase读写设计与实践

背景介绍 本项目主要解决 check 和 opinion2 张历史数据表(历史数据是指当业务发生过程中的完整中间流程和结果数据)的在线查询。原实现基于 Orac...

2855
来自专栏Python中文社区

一个抓取豆瓣图书的开源爬虫的详细步骤

简介 基于numpy和bs4的豆瓣图书爬虫,可以分类爬取豆瓣读书300多万本图书信息,包括标题、作者、定价、页数、出版信息等 github地址:https://...

3739
来自专栏JackeyGao的博客

动态切换代理 - PAC方法

最近协助搭建了企业级翻墙系统, 由于没有现成的公司提供这些, 也没有成套比较成熟的方案(国外人用不着, 国内人不敢用的东西). 所以就自己摸索搭建而且也搭建了,...

852

扫码关注云+社区