防止用户更改 PostgreSQL 上的默认权限
Preventing users from altering default privileges on PostgreSQL
我正在测试 PostgreSQL 上的数据库权限,并试图阻止普通用户 (readuser) 执行 'ALTER DEFAULT PRIVILEGES' 语句。但是我找不到撤销此特定权限的方法,并且在文档中找不到任何相关信息。
我启动了一个本地 PostgreSQL 11.2 实例,删除了连接权限,创建了一个数据库 testdb 并在 [=35= 上撤销了 table 创建] 架构。
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;
然后创建一个架构 testschema 并授予其 tables:
的读取权限
grant usage
on schema testschema
to readuser;
grant select
on all tables
in schema testschema
to readuser;
即使我只对所有模式和 table 设置了读取权限,'readuser' 用户仍然可以在没有权限错误的情况下执行 'alter default privileges' 查询:
alter default privileges in schema testschema grant select on tables to readuser;
ALTER DEFAULT PRIVILEGES
我需要一些帮助来防止用户更改其默认权限,这样它就不会弄乱将来创建的 table 的权限。
通过撤销角色 postgres
的 EXECUTE 来尝试此操作,该角色 postgres
授予 readuser
默认的执行权限
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA testschema REVOKE EXECUTE ON FUNCTIONS FROM readuser;
我正在测试 PostgreSQL 上的数据库权限,并试图阻止普通用户 (readuser) 执行 'ALTER DEFAULT PRIVILEGES' 语句。但是我找不到撤销此特定权限的方法,并且在文档中找不到任何相关信息。
我启动了一个本地 PostgreSQL 11.2 实例,删除了连接权限,创建了一个数据库 testdb 并在 [=35= 上撤销了 table 创建] 架构。
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;
然后创建一个架构 testschema 并授予其 tables:
的读取权限grant usage
on schema testschema
to readuser;
grant select
on all tables
in schema testschema
to readuser;
即使我只对所有模式和 table 设置了读取权限,'readuser' 用户仍然可以在没有权限错误的情况下执行 'alter default privileges' 查询:
alter default privileges in schema testschema grant select on tables to readuser;
ALTER DEFAULT PRIVILEGES
我需要一些帮助来防止用户更改其默认权限,这样它就不会弄乱将来创建的 table 的权限。
通过撤销角色 postgres
的 EXECUTE 来尝试此操作,该角色 postgres
授予 readuser
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA testschema REVOKE EXECUTE ON FUNCTIONS FROM readuser;