gpt4 book ai didi

security - postgres 公共(public)模式的不安全默认值?

转载 作者:行者123 更新时间:2023-11-29 11:26:51 24 4
gpt4 key购买 nike

问题基本上归结为:我如何在 postgres 上安全地创建新数据库,这意味着默认情况下没有人对新数据库有任何特权,并且必须明确定义所有访问权限。

我尝试了互联网上的各种资源,但无法得到明确的答案。我在带有 postgres 9.1 的 fedora 17 linux 上尝试过这个,但最终会在带有 postgres 8.4 的 redhat 6.3 上使用它。

过程:

  1. 安装 postgres,运行 initdb,启动服务器
  2. 在本地与 postgres super 用户联系
  3. 使用选项 createdb 和 createrole 创建新用户 u1
  4. 以 u1 身份断开并重新连接
  5. 创建数据库db1
  6. 创建用户 u2
  7. 以 u2 身份断开并重新连接
  8. 在 db1 中创建表 t1

我没想到最后一步会成功。 u2 没有被授予对 db1 的任何权限,并且在查询数据库或模式时也没有显示任何权限。据我了解,由于公共(public)模式和内置公共(public)角色的默认权限,u2 可以在 db1 上创建表。如果我想撤销它们,我只能在数据库上这样做,而不能在模式上这样做,因为它归 postgres 所有。所以最终我必须为我创建的每个新数据库撤销 super 用户的这些特权。我不能将它委托(delegate)给数据库的所有者,而且我不能忘记为每个新数据库做这件事。

默认值将允许每个用户向任何新数据库中的公共(public)模式发送垃圾邮件。这是危险的,因为其他用户可能默认在公共(public)模式上工作,而不检查表是否已经存在,而只是使用一些陌生人拥有的现有表。

我该如何修复这些不安全的默认设置?

最佳答案

您可以撤销 template1 数据库中的公共(public)模式“创建”权限,默认情况下这将传播到任何新创建的数据库:数据库是通过复制 template1(或标记为模板的其他一些数据库,但 template1 是默认值)。

实际上,在这种情况下,您可能只想完全删除 public 模式,并将创建作业(如果需要)委托(delegate)给数据库所有者。

关于security - postgres 公共(public)模式的不安全默认值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13087084/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com