【DB吐槽大会】第34期 - PG 全局catalog全局可见

简介: 大家好,这里是DB吐槽大会,第34期 - PG 全局catalog全局可见

背景


1、产品的问题点

  • PG catalog全局可见

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

  • 任何用户都可以查看目前PG实例中有哪些用户名、它们的权限、有哪些数据库、有哪些表空间、有哪些权限设置等
postgres=> \du  
                                        List of roles  
 Role name |                         Attributes                         |      Member of        
-----------+------------------------------------------------------------+---------------------  
 abc       | Cannot login                                               | {}  
 d         | Cannot login                                               | {}  
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}  
 ro        |                                                            | {pg_read_all_data}  
 rw        |                                                            | {pg_write_all_data}  
postgres=> \db  
       List of tablespaces  
    Name    |  Owner   | Location   
------------+----------+----------  
 pg_default | postgres |   
 pg_global  | postgres |   
(2 rows)  
postgres=> \l  
                             List of databases  
   Name    |  Owner   | Encoding | Collate | Ctype |   Access privileges     
-----------+----------+----------+---------+-------+-----------------------  
 postgres  | postgres | UTF8     | C       | en_US |   
 template0 | postgres | UTF8     | C       | en_US | =c/postgres          +  
           |          |          |         |       | postgres=CTc/postgres  
 template1 | postgres | UTF8     | C       | en_US | =c/postgres          +  
           |          |          |         |       | postgres=CTc/postgres  
(3 rows)  
postgres=> \dp+  
                                     Access privileges  
 Schema |      Name      | Type  |     Access privileges     | Column privileges | Policies   
--------+----------------+-------+---------------------------+-------------------+----------  
 public | a              | table |                           |                   |   
 public | b              | table |                           |                   |   
 public | c              | table |                           |                   |   
 public | comments       | table |                           |                   |   
 public | pg_buffercache | view  | postgres=arwdDxt/postgres+|                   |   
        |                |       | pg_monitor=r/postgres     |                   |   
 public | posts          | table |                           |                   |   
 public | t              | table |                           |                   |   
(7 rows)  
postgres=> \dx  
                      List of installed extensions  
      Name      | Version |   Schema   |           Description             
----------------+---------+------------+---------------------------------  
 pg_buffercache | 1.3     | public     | examine the shared buffer cache  
 pgcrypto       | 1.3     | public     | cryptographic functions  
 plpgsql        | 1.0     | pg_catalog | PL/pgSQL procedural language  
 roaringbitmap  | 0.5     | public     | support for Roaring Bitmaps  
(4 rows)  

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

  • SaaS类业务
  • DBaaS类业务

4、会导致什么问题?

  • SaaS类业务, 一个数据库实例可能给多个客户使用, 每个客户分配1个数据库账号, 给予1个私有数据库. 但是它可以看到这个实例中还有哪些用户、哪些数据库, 虽然可以从权限上隔离DB之间的互相访问, 但是依旧可能在名字上泄露商业机密.
  • DBaaS类业务, 与之类似.

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

  • 每个用户使用一个实例, 而不是通过实例中的 不同用户 和 不同数据库 来进行区分.

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

  • 实例过多, 需要为每个实例分配独立的内存, 比较浪费资源.
  • 一个大实例中创建多个DB和USER可以更好的实现资源的共享, 充分利用资源, 同时能支持更好的弹性伸缩.

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

  • 希望内核支持, 对普通用户隐藏敏感的全局数据. 例如设计实例级全局用户专门用来管理集群, 其他的是普通超级用户, 普通用户



相关文章
|
数据中心 Anolis
性能优化特性之:LSE指令集编译优化
本文介绍了倚天实例上的编译优化特性:LSE,并从优化原理、使用方法进行了详细阐述。
|
关系型数据库 PostgreSQL
PostgreSQL listagg within group (order by) 聚合兼容用法 string_agg ( order by) - 行列变换,CSV构造...
标签 PostgreSQL , order-set agg , listagg , string_agg , order 背景 listagg — Rows to Delimited Strings The listagg function transforms values from a g...
7377 0
|
Java 测试技术 数据库
使用benchmarksql测试数据库处理能力
传统的OLTP业务,应用系统使用 java 开发,并且不建议使用存储过程,使用 benchmarksql 压测数据库最公平,既可以测试数据库性能,也可以测试JDBC驱动
1105 88
|
消息中间件 存储 监控
深度写作:深入源码理解MQ长轮询优化机制
【11月更文挑战第22天】在分布式系统中,消息队列(Message Queue, MQ)扮演着至关重要的角色。MQ不仅实现了应用间的解耦,还提供了异步消息处理、流量削峰等功能。而在MQ的众多特性中,长轮询(Long Polling)机制因其能有效提升消息处理的实时性和效率,备受关注。
702 12
|
人工智能 JSON API
使用 Qwen 生成数据模型和进行结构化输出
本教程展示如何使用CAMEL框架和Qwen模型生成结构化数据。CAMEL是一个强大的多智能体框架,支持复杂的AI任务;Qwen由阿里云开发,具备自然语言处理等先进能力。教程涵盖安装、API密钥设置、定义Pydantic模型,并演示了通过Qwen生成JSON格式的学生信息。最后,介绍了如何利用Qwen生成多个随机学生信息的JSON格式数据。欢迎在[CAMEL GitHub](https://github.com/camel-ai/camel)上为项目点星支持。
4444 70
|
存储 关系型数据库 分布式数据库
PolarDB开源数据库进阶课18 通过pg_bulkload适配pfs实现批量导入提速
本文介绍了如何修改 `pg_bulkload` 工具以适配 PolarDB 的 PFS(Polar File System),从而加速批量导入数据。实验环境依赖于 Docker 容器中的 loop 设备模拟共享存储。通过对 `writer_direct.c` 文件的修改,替换了一些标准文件操作接口为 PFS 对应接口,实现了对 PolarDB 15 版本的支持。测试结果显示,使用 `pg_bulkload` 导入 1000 万条数据的速度是 COPY 命令的三倍多。此外,文章还提供了详细的步骤和代码示例,帮助读者理解和实践这一过程。
804 0
|
人工智能 自然语言处理 自动驾驶
Qwen-Agent:基于Qwen 2.5模型的智能Agent构建与应用
Qwen-Agent:基于Qwen 2.5模型的智能Agent构建与应用
4008 20
io_uring之liburing库安装
io_uring之liburing库安装
1761 0
|
负载均衡 前端开发 应用服务中间件
Nginx安装与使用
Nginx安装与使用
688 0