Jes*_*ose 13 postgresql permissions
我按照两个教程创建了一个数据库:
然后我从CJ Estel 的教程中得到了一条提示,指出“即使我们从未明确将其提供给我们的新用户,您也可能继承了创建表的能力”。果然,只读用户能够创建和拥有表!
CJ Estel 很好地指出了根本原因,即模板数据库。但是,创建表格的能力破坏了您通过谷歌搜索“只读用户 postgres”获得的大多数教程,包括在 postgresql.org 上托管的教程。您的用户拥有的不仅仅是只读权限!
为什么新用户有这种能力?撤销此权限后,该用户的数据库是否真的是只读的?
Cra*_*ger 13
TL;DR:新用户可以在public
模式中创建表,因为人们抱怨他们不能创建表太难了。
如果您不喜欢默认设置,您可能应该使用您想要的初始配置创建一个新的模板数据库。例如,您可能会:
DROP SCHEMA public;
Run Code Online (Sandbox Code Playgroud)
或者
REVOKE ALL ON SCHEMA public FROM public;
GRANT USAGE ON SCHEMA public TO public;
Run Code Online (Sandbox Code Playgroud)
在您的模板中。
如果您希望public
用户对数据库没有任何权限,您还应该:
REVOKE ALL ON DATABASE mydbname FROM public;
GRANT CONNECT ON DATABASE mydbname TO public;
Run Code Online (Sandbox Code Playgroud)
以便public
用户无法创建架构或使用临时表。
就我个人而言,如果我正在设计这个,我会TEMP
默认为用户提供数据库的权限,但不是CREATE
(数据库CREATE
中的public
模式)或(模式中的表)。我会为业主保留那些。
然而,它们是很久以前做出的选择,现在很难改变它们。
事实上,经常有人抱怨 PostgreSQL 太难开始使用,因为您必须创建一个用户帐户并且通常还想创建一个数据库。为什么我们不只是自动创建它们并默认为“信任”作为身份验证模式以使其变得容易?为什么postgres
用户默认没有密码postgres
?如果操作系统中存在用户,我们为什么不自动创建用户?等等。
对于新用户来说,存在一些真正的可用性问题 - 特别是,大多数人不知道peer
auth 是什么,或者为什么psql
在安装 PostgreSQL 后运行会告诉他们没有他们登录的用户名。
pg_hba.conf
配置文件也很乱,但用户是在 SQL 级别创建的。这种分裂让用户感到困惑。
但是,很多事情都是安全默认值和简单默认值之间的折衷,项目永远不会让每个人都满意。
归档时间: |
|
查看次数: |
2541 次 |
最近记录: |