[英]Prevent roles from creating tables in public on postgresql
如何防止 ROLE 在 PUBLIC 模式中创建 TABLES?
这是我尝试过的:
# Logging in as administrator
PGPASSWORD=my_admin_password psql -h XXX.XXX.XXX.XXX --port XXXXX -d database -U admin_user
# Creating role/user
CREATE ROLE test_role;
GRANT CONNECT ON DATABASE database TO test_role;
CREATE USER test_user WITH ENCRYPTED PASSWORD 'password';
GRANT test_role TO test_user;
# Removing all permissions on public
REVOKE ALL ON DATABASE database FROM PUBLIC;
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM test_role;
现在让我们使用 test_user 登录:
# Logging in as test_user
PGPASSWORD=password psql -h XXX.XXX.XXX.XXX --port XXXXX -d database -U test_user
# Creating a table
CREATE TABLE test (id int, name text);
表已成功创建公开! 精彩的! 这里出了什么问题? 为什么一个用户将所有权限都撤销了仍然可以创建表?
正如建议的那样,我作为管理员已经写了一些撤销,它说没有什么可以撤销的。 仍然,我可以创建我想要的所有表test_user 。 我开始推测这是否可能是Managed Postgres的一些奇怪行为,我无法访问REAL管理员,并且它说public的所有者是_rdb_superadmin 。 Postgresql 消息不是很有帮助,因为它没有告诉我是否所有权限都已被撤销。
您的命令REVOKE ALL ON ALL TABLES IN SCHEMA public
仅撤销了对该模式中现有表的权限,而不是模式本身的任何权限。
您还需要撤销公共架构本身的权限:
revoke all on schema public from public;
如果您只想阻止创建表,这有点不清楚。 所以也许你只是想要
revoke create on schema public from public;
这将保留usage
权限。
在即将发布的 Postgres 15 中,默认情况下,public 角色将不再具有对public
模式的create
权限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.