postgresql PG11:用户(不是所有者)如何在模式中创建表而不授予在模式上创建的权限

mzillmmw  于 2023-08-04  发布在  PostgreSQL
关注(0)|答案(1)|浏览(139)

我花了一个小时试图理解为什么我的odi角色(既不是公共模式的所有者,也不是数据库的所有者)可以在这个模式中创建表。

|          | odi=U/eos            |
 public   | postgres | postgres=UC/postgres+| standard public schema
          |          | =UC/postgres        +|
          |          | odi=U/postgres      +|
          |          | visu=U/postgres      |

字符串
最奇怪的是,即使我明确地剥夺了这个权利(从ODI中撤销在模式公共上创建),这个动作也没有阻止他这样做。
有什么建议吗?PG服务器v11.5非常感谢

bxjv4tth

bxjv4tth1#

原因就是这个访问控制项:=UC/postgres:它赠款USAGECREATE授予PUBLIC(每个人)。
您应该删除不安全的默认设置。就像文档说的:
请注意,默认情况下,每个人都对模式public具有CREATEUSAGE特权。这允许所有能够连接到给定数据库的用户在其public模式中创建对象。某些使用模式要求撤销该权限:

REVOKE CREATE ON SCHEMA public FROM PUBLIC;

字符串
请至少升级到最新的次要版本(当前为11.20)。更好的是,升级到v15或更高版本,因为PUBLIC上的版本不再具有这种不安全的默认权限。

相关问题