我是 Postgres 的新手,我试图了解模式如何适应一切以及非“公共”模式的好处是什么。例如,它是否提供安全性、访问控制优势或其他优势?
我正在使用的设置是 postgres 拥有数据库和表,但向另一个用户授予选择、插入、更新和删除权限。在“公共”模式与“myotherschema”中创建表会有很大区别吗?
我正在创建一个 pre-prod Postgres 数据库,并希望确保访问用户具有有限的访问权限。
我想以这样的方式设置表的访问用户不能CREATE
,DROP
或ALTER
对象。目前,我可以看到将所有权更改为另一个用户的唯一方法,例如postgres
然后以某种方式仅授予所需的权限:
ALTER TABLE mytable SET OWNER TO postgres;
REVOKE connect ON DATABASE mydatabase FROM PUBLIC;
GRANT USAGE, SELECT, UPDATE ON ALL TABLES IN SCHEMA public TO dbuser;
GRANT connect ON DATABASE mydatabase TO dbuser;
Run Code Online (Sandbox Code Playgroud)
问题是当我执行上述操作SELECT
时,当我与应用了授权的用户连接时,我无法做一个简单的事情。例如:
select * from mytable;
Run Code Online (Sandbox Code Playgroud)
产量:
Run Code Online (Sandbox Code Playgroud)ERROR: permission denied for relation mytable
如何做到这一点?
此外,我应该使用public
?以外的命名模式吗?