【DB吐槽大会】第26期 - PG 没有基于角色权限的ACL控制

简介: 大家好,这里是DB吐槽大会,第26期 - PG 没有基于角色权限的ACL控制

背景



1、产品的问题点

  • PG 没有基于角色权限的ACL控制

2、问题点背后涉及的技术原理

  • PG 通过pg_hba.conf 配置访问控制规则, 配置条目包括
# local         DATABASE  USER  METHOD  [OPTIONS]    
# host          DATABASE  USER  ADDRESS  METHOD  [OPTIONS]    
# hostssl       DATABASE  USER  ADDRESS  METHOD  [OPTIONS]    
# hostnossl     DATABASE  USER  ADDRESS  METHOD  [OPTIONS]    
# hostgssenc    DATABASE  USER  ADDRESS  METHOD  [OPTIONS]    
# hostnogssenc  DATABASE  USER  ADDRESS  METHOD  [OPTIONS]    
  • 只能控制到user级别, 而这个USER到底是普通用户还是superuser并不知道
  • 拒绝或允许连接是在建立连接之前完成, 数据库端通过协议层获取到客户连接的username, dbname, IP, 即可通过ACL规则进行判断是否放行.
  • 如果要实现USER对应的角色来进行判定, 需要查询元数据, 使得认证过程变得更复杂.


postgres=# \d pg_shadow     
                       View "pg_catalog.pg_shadow"    
    Column    |           Type           | Collation | Nullable | Default     
--------------+--------------------------+-----------+----------+---------    
 usename      | name                     |           |          |     
 usesysid     | oid                      |           |          |     
 usecreatedb  | boolean                  |           |          |     
 usesuper     | boolean                  |           |          |     
 userepl      | boolean                  |           |          |     
 usebypassrls | boolean                  |           |          |     
 passwd       | text                     | C         |          |     
 valuntil     | timestamp with time zone |           |          |     
 useconfig    | text[]                   | C         |          |     
postgres=# \d pg_roles     
                         View "pg_catalog.pg_roles"    
     Column     |           Type           | Collation | Nullable | Default     
----------------+--------------------------+-----------+----------+---------    
 rolname        | name                     |           |          |     
 rolsuper       | boolean                  |           |          |     
 rolinherit     | boolean                  |           |          |     
 rolcreaterole  | boolean                  |           |          |     
 rolcreatedb    | boolean                  |           |          |     
 rolcanlogin    | boolean                  |           |          |     
 rolreplication | boolean                  |           |          |     
 rolconnlimit   | integer                  |           |          |     
 rolpassword    | text                     |           |          |     
 rolvaliduntil  | timestamp with time zone |           |          |     
 rolbypassrls   | boolean                  |           |          |     
 rolconfig      | text[]                   | C         |          |     
 oid            | oid                      |           |          |     

3、这个问题将影响哪些行业以及业务场景

  • 通用

4、会导致什么问题?

  • 无法满足超级用户角色的通用规则配置, 例如不允许超级用户使用非unix socket端口连接, 这也可能是某些企业的安全规则. 防止超级用户通过tcpip从本地或网络层访问, 造成更大破坏力.

5、业务上应该如何避免这个坑

  • 找到所有的超级用户, 并在pg_hba.conf中逐条配置, 例如
host all sup1,sup2,sup3 0.0.0.0/0 reject    
local all sup1,sup2,sup3 md5    

6、业务上避免这个坑牺牲了什么, 会引入什么新的问题

  • 如果用户的角色权限发生变化, 需要重新调整pg_hba.conf, 管理成本增加, 也容易出现遗漏.

7、数据库未来产品迭代如何修复这个坑

  • 希望内核层支持, 例如使用login hook来进行多重条件判定, 支持更多的规则.



相关文章
|
2月前
|
人工智能 编解码 自然语言处理
大模型图像生成技术深度解析:从文字到视觉的魔法
图片识别的核心原理 从像素到理解:视觉特征的层次化提取
|
传感器 Android开发 开发者
构建高效Android应用:Kotlin的协程与Flow
【4月更文挑战第26天】随着移动应用开发的不断进步,开发者寻求更简洁高效的编码方式以应对复杂多变的业务需求。在众多技术方案中,Kotlin语言凭借其简洁性和强大的功能库逐渐成为Android开发的主流选择。特别是Kotlin的协程和Flow这两个特性,它们为处理异步任务和数据流提供了强大而灵活的工具。本文将深入探讨如何通过Kotlin协程和Flow来优化Android应用性能,实现更加流畅的用户体验,并展示在实际开发中的应用实例。
|
JavaScript 前端开发
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。
原型与原型链,数形结合搞懂原型与原型链,真正理解原型链,面试官直呼内行。
461 0
|
存储 资源调度 算法
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
Opencv(C++)系列学习---SIFT、SURF、ORB算子特征检测
1070 0
|
12月前
|
人工智能 Java API
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手
本次分享的主题是阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手,由阿里云两位工程师分享。
626 2
阿里云工程师跟通义灵码结伴编程, 用Spring AI Alibaba来开发 AI 答疑助手
|
10月前
|
Ubuntu 安全 Linux
Linux错误排查:解决Ubuntu 20.4执行sudo apt-get update时出现的libnettle.so.6错误。
很有可能在你得到解决方案时,你也学到了不少Linux修复技巧。祝你处理计算机问题时顺利如麻!永远记得,各种问题总是像老鼠一样从意想不到的地方冒出来。但记住,不管它们跑到哪里,最终都逃不过你的捕鼠器。盖起你的计算机,拾起你的代码,大步向前!
315 28
|
运维 监控 Linux
BPF及Linux性能调试探索初探
BPF技术从最初的网络数据包过滤发展为强大的系统性能优化工具,无需修改内核代码即可实现实时监控、动态调整和精确分析。本文深入探讨BPF在Linux性能调试中的应用,介绍bpftune和BPF-tools等工具,并通过具体案例展示其优化效果。
576 14
|
安全 Linux
Linux系统之lsof命令的基本使用
【10月更文挑战第14天】Linux系统之lsof命令的基本使用
590 2
Linux系统之lsof命令的基本使用
|
负载均衡 算法 应用服务中间件
Nginx 常用的负载均衡算法
【10月更文挑战第22天】不同的负载均衡算法各有特点和适用场景。在实际应用中,需要根据具体的业务需求、服务器性能和网络环境等因素来选择合适的算法。
393 3
|
缓存 监控 网络协议
移动端常见白屏问题优化之网络优化篇
本文将要分享的是得物技术团队针对移动端最常见的图片加载导致的端侧白屏问题,而进行的的移动网络方向的技术优化实践,希望能带给你启发。
236 2
移动端常见白屏问题优化之网络优化篇

热门文章

最新文章