我使用以下命令在本地 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_test1
的 CREATE
权限,否则只有当转储中的所有对象都在 中时,这才能工作公共(public)
模式。否则,您会在 pg_restore
尝试创建模式时立即收到错误。
您观察到的是由两件事引起的:
默认情况下,每个数据库都具有
PUBLIC
的CONNECT
权限。默认情况下,
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/