使用更改的权限恢复数据库

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

【讨论】:

以上是关于使用更改的权限恢复数据库的主要内容,如果未能解决你的问题,请参考以下文章

如何恢复或更改Oracle sysdba密码[关闭]

备份恢复

是否可以创建脚本来保存和恢复权限?

RMAN异机恢复全过程

使用实体框架恢复数据库中的更改

如何恢复 MySQL root 用户的完全权限?