sql - 防止用户更改 PostgreSQL 上的默认权限
问题描述
我正在 PostgreSQL 上测试数据库权限,并试图阻止普通用户(readuser)执行“ALTER DEFAULT PRIVILEGES”语句。但是,我找不到撤销此特定权限的方法,并且在文档中找不到任何有关它的信息。
我启动了一个本地 PostgreSQL 11.2 实例,删除了连接权限,创建了一个数据库testdb并撤销了在公共模式上的表创建。
revoke connect on database postgres from public;
create database testdb with template template0 --lc_collate "pt_BR.utf8" lc_ctype "pt_BR.utf8";
revoke connect on database testdb from public;
\c :database
revoke all on schema public from public;
grant all on schema public to postgres;
create schema private;
之后,我创建了一个只有读取权限的用户:
create user readuser
with nosuperuser
nocreatedb
nocreaterole
noreplication
login
encrypted password 'testpassword';
grant connect
on database testdb
to readuser;
然后创建一个模式测试模式并授予对其表的读取权限:
grant usage
on schema testschema
to readuser;
grant select
on all tables
in schema testschema
to readuser;
即使我只对所有模式和表设置读取权限,“readuser”用户仍然可以执行“更改默认权限”查询而不会出现权限错误:
alter default privileges in schema testschema grant select on tables to readuser;
ALTER DEFAULT PRIVILEGES
我需要一些帮助来防止用户更改其默认权限,以便它不会弄乱将来创建的表的权限。
解决方案
postgres
通过从授予默认执行权限的角色撤销 EXECUTE 来尝试此操作readuser
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA testschema REVOKE EXECUTE ON FUNCTIONS FROM readuser;
推荐阅读
- javascript - Javascript 从 Math.random 中提取最后一个数字
- log4j2 - 如何控制 Karaf 的 log4j 2 PAX 缩减/截断多少行?
- c++ - 如何模拟一个采用已经定义的 lambda 函数并覆盖 lambda 函数的函数
- python - 30秒后实时解析日志文件
- java - 如何检查请求对象是否包含给定参数
- drools - 流口水的变体
- javascript - Change.call 不适用于可绑定属性
- sql-server - MS SQL:检查多个条件并将组合结果作为选择语句中的字段返回
- javascript - Gmail 附加组件:未触发 Oauth
- git - 使用 LINK 签出 gerrit 补丁集