postgresql - 每个用户都可以使用 pg_restore 恢复转储吗?

标签 postgresql postgresql-9.6 pg-restore

我使用以下命令在本地 PostgreSQL 实例上创建了一个用户:

create role testuser with login password 'test' 

然后我创建了一个空白数据库并使用 pg_restore 使用以下命令在新创建的数据库上恢复备份:

pg_restore -c -h 172.27.211.11 -U testuser -d abcd_test1  "E:\testbackup_20180509_2330.backup"

令人惊讶的是,备份已恢复。这是否意味着所有用户都有权恢复数据库?

有什么方法可以阻止用户恢复数据库吗?

最佳答案

除非您向 testuser 授予对 abcd_test1CREATE 权限,否则只有当转储中的所有对象都在 中时,这才能工作公共(public) 模式。否则,您会在 pg_restore 尝试创建模式时立即收到错误。

您观察到的是由两件事引起的:

  1. 默认情况下,每个数据库都具有 PUBLICCONNECT 权限。

  2. 默认情况下,public 架构对 PUBLIC 具有 CREATE 权限。

由于PUBLIC 是每个人都属于的伪角色,testuser 可以在public 模式中连接和创建对象。

限制每个新 PostgreSQL 数据库的权限是个好主意:

REVOKE ALL ON DATABASE abcd_test1 FROM PUBLIC;
REVOKE CREATE ON SCHEMA public FROM PUBLIC;

然后您可以以更严格的方式处理权限。

关于postgresql - 每个用户都可以使用 pg_restore 恢复转储吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50279578/

相关文章:

postgresql - Postgres : pg_restore/pg_dump everything EXCEPT the table id's for a table

php - 外键一对多(postgresql、php、yii2)

postgresql - 是否可以在排除约束中使用 IS NOT DISTINCT FROM?

sql - postgres 中 SQL 以外的语言

postgresql - 如果不存在则插入行会导致竞争条件?

sql - 用函数反转 where 子句,这可能吗?

sql - 将 LIMIT 添加到 ARRAY_TO_JSON 或 ARRAY_AGG

Postgresql 四舍五入到有效数字

postgresql - 如何将docker postgres镜像10.3中的pg_restore升级到10.5

postgresql - 如何恢复 postgres 备份 - 错误 : cannot drop the currently open database