PostgreSQL无法撤销默认权限问题咨询及arw权限缩写疑问
PostgreSQL默认权限撤销问题解答
问题背景
当前PostgreSQL默认访问权限状态:
postgres=> \ddp Default access privileges Owner | Schema | Type | Access privileges ----------+--------+-------+-------------------------- postgres | public | table | "app"=arw/postgres+ | | | dbt=arw/postgres (1 row)
执行以下撤销命令后未产生预期效果:
ALTER DEFAULT PRIVILEGES FOR USER postgres IN SCHEMA public REVOKE ALL ON TABLES FROM "app"; ALTER DEFAULT PRIVILEGES FOR USER postgres IN SCHEMA public REVOKE ALL ON TABLES FROM dbt;
1. 撤销命令存在的问题
你执行的命令中FOR USER postgres的用法有误:ALTER DEFAULT PRIVILEGES FOR USER X是用来修改X用户未来创建对象时会应用的默认权限规则,而非撤销X用户已经授予给其他用户的默认权限。
从\ddp输出的arw/postgres可以看出,这些默认权限是由postgres用户授予的。要撤销这类权限,需以授予者身份执行命令,或明确指定授予者:
- 如果当前登录用户是
postgres,直接执行:ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON TABLES FROM "app"; ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON TABLES FROM dbt; - 如果用其他超级用户执行,需明确指定授予者:
ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public REVOKE ALL ON TABLES FROM "app"; ALTER DEFAULT PRIVILEGES FOR ROLE postgres IN SCHEMA public REVOKE ALL ON TABLES FROM dbt;
你之前的命令因未正确匹配权限的授予关系,导致执行成功但未生效。
2. "arw"缩写的含义
PostgreSQL中权限缩写对应关系:
a=INSERT(插入数据权限)r=SELECT(查询数据权限)w=UPDATE(更新数据权限)
因此arw表示该用户拥有对应表的插入、查询、更新权限。
内容的提问来源于stack exchange,提问作者Bryan
相关产品推荐
相关产品推荐

