【问题标题】: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 命令)。

【问题讨论】:

    标签: postgresql privileges grant postgresql-9.0 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

    【讨论】:

      猜你喜欢
      • 2021-11-21
      • 1970-01-01
      • 2014-02-16
      • 2015-12-24
      • 2010-09-21
      • 2022-08-15
      • 2017-01-03
      • 2016-06-02
      • 1970-01-01
      相关资源
      最近更新 更多