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


    0?wx_fmt=gif&wxfrom=5&wx_lazy=1

    作者介绍:何剑敏 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的语句……

    测试模拟

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


    0?wx_fmt=png


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


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


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


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


    0?wx_fmt=png


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

    总结教训

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


    0?wx_fmt=jpeg


    相关阅读:

    Oracle 12.2 新特性:只读分区的使用和维护

    Oracle12.2 多租户环境下的授权管理

    听说你最喜欢给所有用户授DBA的权限

    聊一聊Oracle数据库的用户权限

    资源下载

    关注公众号:数据和云(OraNews)回复关键字获取

    ‘2017DTC’,2017DTC大会PPT

    ‘DBALIFE’,“DBA的一天”海报

    ‘DBA04’,DBA手记4经典篇章电子书

    ‘RACV1’, RAC系列课程视频及ppt

    ‘122ARCH’,Oracle 12.2体系结构图

    ‘2017OOW’,Oracle OpenWorld资料

    ‘PRELECTION’,大讲堂讲师课程资料

    0?wx_fmt=png

  • 相关阅读:
    5个最佳WordPress通知栏插件
    最新lombok插件和IDEA2020.1不兼容,Plugin "Lombok" is incompatible (until build 193.SNAPSHOT < IU-201.6668....
    nuxt中localstorage的替代方案
    nuxt或者vue,axios中如何发送多个请求
    wordpress nginx详细环境配置安装命令和相关问题解决
    [no_perms] Private mode enable, only admin can publish this module
    vue bootstrap中modal对话框不显示遮挡打不开
    vue监听当前页面的地址变化/路由变化
    来看看JDK13的81个新特性和API
    Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test java.lang.IllegalStateException
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13312453.html
Copyright © 2020-2023  润新知