【问题标题】:Permissions required to run REPLMERG.EXE运行 REPLMERG.EXE 所需的权限
【发布时间】:2010-05-21 15:52:41
【问题描述】:

我们在我们的一个程序中使用合并复制,我希望允许我们的用户根据需要强制他们的笔记本电脑与发布者同步(我们使用推送订阅)。我使用 REPLMERG.EXE (see my previous question) 完成了这项工作。

但是,当用户尝试运行脚本时,他们收到以下错误消息:

只有 sysadmin 或 db_owner 角色的成员才能执行此操作。
...
执行 sp_MSreplcheck_subscribe
...

如果我在他们的本地订阅数据库上添加用户的组登录作为 db_owner,那么脚本可以正常工作。问题是他们最终还可以完全访问本地数据库中的每个表,这不是我们可以忍受的。

允许合并复制拓扑中的用户按需同步他们的本地推送订阅而不给予他们对数据库的全面控制似乎是一个非常简单的用例,但我无法让它工作。

【问题讨论】:

    标签: sql-server sql-server-2000 replication


    【解决方案1】:

    来自Replication Agent Security Model

    合并代理以进行拉取订阅

    在其下的 Windows 帐户 代理运行时使用 与订阅者的连接。这 帐户必须至少是 db_owner 固定数据库角色的成员 订阅数据库。

    用于连接发布者和分销商的帐户必须:

    • 成为 PAL 的成员。
    • 是与发布数据库中的用户关联的登录名。
    • 是与分发数据库中的用户关联的登录名。这 用户可以是访客用户。
    • 拥有快照共享的读取权限。

    因此,合并复制的记录要求是运行复制代理 (replmerge.exe) 的帐户是 db_owner 的成员。如果这对您的情况不起作用,那么合并复制不是正确使用的技术,因为它有一个您无法满足的要求。

    现在理论上,应用程序可以执行 REPLMERGE 从另一个应用程序执行的任何操作,并且您可以利用代码签名的强大功能来运行一组通过代码签名授予 dbo 权限的包装程序,因此不需要提升登录,但是这只是理论,因为复制过程并不完全易于使用,也没有记录在需要重新实现代理的级别...

    【讨论】:

    • 我们使用的是推送订阅,而不是拉取订阅。我不知道这对权限是否有任何影响。
    • 在同一个链接中:“用于连接订阅者的帐户必须至少是订阅数据库中 db_owner 固定数据库角色的成员。”
    • 准确回答了所提出的问题,谢谢 Remus。对于可能面临与我们相同的困境的其他人,请参阅下面的解决方法。如果有任何兴趣,我会很乐意扩展我们的解决方案。
    【解决方案2】:

    订阅者必须有权复制发布者发送的数据定义指令。其中一些指令甚至可能导致订阅者重新初始化,这需要删除\重新创建相应数据库的权限。在这些情况下,Microsoft 设定的安全要求听起来非常合理。

    【讨论】:

      【解决方案3】:

      正如 Remus 和 Philippe 所指出的,订阅数据库上的 db_owner 是同步合并推送订阅的硬性要求。但是,我们确实希望允许我们的用户同步他们自己的笔记本电脑,而无需授予他们对数据库的完全 db_owner 权限。

      我们的解决方案是对订阅者启用混合模式身份验证,并添加一个 SQL Server 用户,其唯一目的是使我们的最终用户能够同步他们的笔记本电脑。 SQL Server 用户“syncuser”在本地订阅数据库中被赋予了 db_owner 角色。然后,当我们从程序中调用 replmerg.exe 时,我们指定了以下开关:

      -SubscriberSecurityMode 0 -SubscriberLogin syncuser -SubscriberPassword 4w3$0m3_P4$$w0Rd

      【讨论】:

        猜你喜欢
        • 2020-11-27
        • 2021-05-09
        • 2020-05-03
        • 2011-01-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多