【问题标题】:Make PostgreSQL BDR work without superuser (postgres user) privileges?让 PostgreSQL BDR 在没有超级用户(postgres 用户)权限的情况下工作?
【发布时间】:2015-09-02 07:14:12
【问题描述】:

我们在工作中从 MongoDB 切换到 Postgres,我正在建立一个 BDR 组。

在此步骤中,我正在考虑安全性并尽可能锁定。因此,我希望设置一个replication 用户(角色)并让 BDR 将其用于其复制内容。当使用受信任的连接或postgres 用户进行身份验证时,我已经让该组愉快地运行。对我来说,两者似乎都不是 100% 安全的,而且我特别不喜欢 postgres 用户的密码在 bdr.bdr_nodes 的 DSN 连接字符串中以明文形式出现。所以我尝试改用这个replication 用户。

也就是说,例如在pg_hba.conf:

hostssl appdb,replication replication 172.17.1.2 md5

以及匹配的DSN连接字符串,

host=172.17.1.1 dbname=appdb user=replication password=secret

发出bdr.bdr_group_create 时出现以下错误说明了这种方法的问题:

ERROR:  local dsn does not have superuser rights
DETAIL:  The dsn 'host=172.17.1.1 dbname=appdb user=replication password=secret' connects successfully but does not grant superuser rights

这就是我有点困惑的地方。 BDR 真的需要超级用户权限来进行复制吗?或者我是否可以向我的replication 角色授予特定权限,使其能够在不全能的情况下开展业务?

也许只是我偏执,但我觉得postgres 用户应该只用于系统管理员的东西,而且它的密码绝对不应该出现在明文 DSN 连接字符串的表中,即使如果您需要特殊权限才能从所述表中读取。

【问题讨论】:

    标签: database postgresql replication postgresql-bdr


    【解决方案1】:

    目前,您无法在没有超级用户连接的情况下使用 BDR 进行复制。它是逻辑解码所必需的。我们希望在 9.6 版的 BDR 中解决这个问题。

    在走这条路之前,请非常仔细考虑您是否真的需要多主机。您确定带有只读副本的活动/备用设置不足以满足您的需求吗?请仔细阅读手册中有关 BDR 限制和其他应用程序开发注意事项的部分。

    【讨论】:

    • 感谢克雷格提供的信息 :) 很高兴知道它可能会在未来得到解决。我将继续使用replication 用户进行 BDR 连接,然后授予它超级用户权限。这样,一旦需要较少的权限,我就可以撤销不需要的权限。我们将在不久的将来添加地理上独立的数据中心,这就是我们在 Postgres 可用的不同复制选项中选择 BDR 的原因。
    • @DanielSmedegaardBuus 酷。请先仔细测试,慎重考虑异步多主的后果。手册中的冲突章节确实需要阅读。
    • 哦,还有 DDL 锁定。您真的希望避免在正常操作期间执行 DDL。
    • 谢谢,@Craig。在过去的一个月里,我一直在研究不同的选择,重点是 BDR。虽然冲突问题确实有点令人担忧,但我觉得在我们现有的可行解决方案中(不幸的是,它取消了同步解决方案的资格),BDR 最适用于我们的应用程序。幸运的是,由于我们正在重写整个数据管理系统,我们应该能够围绕大多数问题进行设计并尽早发现冲突问题。我至少对或多或少的平稳过渡抱有希望 :) 是的,我的“注意”列表中有 DDL 锁定 :)
    • 听起来不错。保持联系,也请随时在 github 项目上提交错误。 9.4 的时间和资源有点有限,因为我们目前的目标是 9.6 集成 BDR 的更多部分,但我们始终欢迎反馈。
    猜你喜欢
    • 1970-01-01
    • 2018-04-12
    • 2018-02-06
    • 2021-02-03
    • 2012-05-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    相关资源
    最近更新 更多