普通用户在postgres数据库下创建对象失败
问题描述
- 普通用户创建schema失败
命令:CREATE SCHEMA my_schema;
报错:ERROR: permission denied for database postgres
- 普通用户创建表失败
命令:CREATE TABLE my_table(id int PRIMARY KEY,name VARCHAR(30));
ERROR: permission denied for schema public
解决方法
云数据库 RDS for PostgreSQL禁止普通用户在postgres数据库创建对象,您可以使用root用户在postgres数据库下创建对象。
root用户可在postgres数据库下创建对象需要内核版本为支持root提权的版本,具体请参见root用户权限说明。
root用户权限说明
RDS for PostgreSQL开放了root用户权限。为了便于用户使用RDS for PostgreSQL并保证在无操作风险的前提下,为root用户在特定场景进行了提权。
各个版本root用户提权情况见下表。
版本 |
是否提权 |
提权起始版本 |
---|---|---|
pgcore9 |
否 |
不涉及 |
pgcore10 |
否 |
不涉及 |
pgcore11 |
是 |
11.11 |
pgcore12 |
是 |
12.6 |
pgcore13 |
是 |
13.2 |
pgcore14 |
是 |
14.4 |
pgcore15 |
是 |
15.4 |
pgcore16 |
是 |
16.2 |
root提权涉及以下场景:
- 创建事件触发器
- 创建包装器
- 创建逻辑复制-发布
- 创建逻辑复制-订阅
- 查询和维护复制源
- 创建replication用户
- 创建全文索引模板以及Parser
- 对系统表执行vacuum
- 对系统表执行analyze
- 创建插件
- 授予用户某个对象的权限