ans*_*elm 5 security postgresql
问题基本上归结为:如何在postgres上安全地创建新数据库,这意味着默认情况下,没有人对新数据库拥有任何权限,并且必须明确定义所有访问权限.
我尝试了互联网上的各种资源,但无法得到明确的答案.我在fedora 17 linux上使用postgres 9.1尝试了这个,但最终会在redhat 6.3上使用postgres 8.4.
过程:
我不希望最后一步成功.u2没有在db1上获得任何权限,并且在查询数据库或模式时也没有显示任何权限.根据我的理解,u2可以在db1上创建表,因为公共模式和内置公共角色的默认权限.如果我想撤销它们,我只能在数据库上这样做,但不能在模式上这样做,因为它是由postgres拥有的.所以最终我必须为我所创建的每个新数据库撤销超级用户的权限.我不能将它委托给数据库的所有者,我也不能忘记为每个新数据库执行此操作.
默认设置将允许每个用户在任何新数据库中垃圾邮件公共模式.这是危险的,因为其他用户可能默认处理公共模式而不检查表是否已存在,只使用某些陌生人拥有的现有表.
我怎样才能修复这些不安全的默认值?
您可以撤消数据库中的公共模式"创建"权限,template1默认情况下,这将传播到任何新创建的数据库:数据库是通过复制template1(或标记为模板的其他数据库,但是template1默认值)创建的.
实际上,您可能希望public在这种情况下完全删除模式,并在将作业(如果需要)创建到数据库所有者时委派作业.