使用更改的权限恢复数据库
Posted
技术标签:
【中文标题】使用更改的权限恢复数据库【英文标题】:Restore database with changed privileges 【发布时间】:2012-07-10 22:50:57 【问题描述】:我们有两台 PostgreSQL 服务器。在 Web 服务器 1 上,pguser1
是关联用户,他创建了使用 Web 应用程序所需的所有数据库对象。假设所有对象都在schema1
.
同样,在 server2 上 pguser2
为 Web 服务器 2 创建数据。
我从 server1 获取了模式备份(pgadmin 备份窗口中的自定义选项)。当我恢复到 server2 时,我希望对象的所有权限和所有权都属于 pguser2
而不是 pguser1
。
如何做到这一点?如果可能,最好在还原期间使用一个选项(pg_restore 命令)。
【问题讨论】:
【参考方案1】:如果您将GRANT
特权和所有权授予非登录角色(又名组),这将大大简化您的任务。让我们将其命名为foo_admin
。在server1上你
GRANT foo_admin TO pguser1;
你在 server2 上
REVOKE foo_admin FROM pguser1;
GRANT foo_admin TO pguser2;
全部完成。或者更好:破解转储文件并将1
替换为2
GRANT foo_admin TO pguser1;
.. 恢复之前。当然,pguser2
必须先创建。
现在,请确保,当您在 server1 上创建任何内容时
ALTER TABLE wuchtel12.game OWNER TO foo_admin;
并设置权限。您可以为每个架构预设权限。比如:
ALTER DEFAULT PRIVILEGES IN SCHEMA schema1
GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES
TO foo_admin;
ALTER DEFAULT PRIVILEGES IN SCHEMA schema1
GRANT SELECT, UPDATE, USAGE ON SEQUENCES
TO foo_admin;
这在 server1 和 server2 上的工作方式相同。More details and links in this related answer。
您可能还对 pgAdmin 的 Grant Wizard 感兴趣。详情在this related answer
【讨论】:
以上是关于使用更改的权限恢复数据库的主要内容,如果未能解决你的问题,请参考以下文章