首页 > 解决方案 > 防止用户更改 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

我需要一些帮助来防止用户更改其默认权限,以便它不会弄乱将来创建的表的权限。

标签: sqlprivilegespostgresql-11

解决方案


postgres通过从授予默认执行权限的角色撤销 EXECUTE 来尝试此操作readuser

ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA testschema REVOKE EXECUTE ON FUNCTIONS FROM readuser;

推荐阅读