Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 运行REPLMERG.EXE所需的权限_Sql Server_Sql Server 2000_Replication - Fatal编程技术网

Sql server 运行REPLMERG.EXE所需的权限

Sql server 运行REPLMERG.EXE所需的权限,sql-server,sql-server-2000,replication,Sql Server,Sql Server 2000,Replication,我们在其中一个程序中使用合并复制,我希望允许我们的用户根据需要强制他们的笔记本电脑与发布服务器同步(我们使用推送订阅)。我使用REPLMERG.EXE()实现了这一点 但是,当用户尝试运行脚本时,他们收到以下错误消息: 只有sysadmin或db_所有者角色的成员才能执行此操作。 … exec sp\u MSreplcheck\u subscribe 如果我将用户的组登录名添加为本地订阅数据库上的db_所有者,那么脚本将正常工作。问题是,他们最终还可以完全访问本地数据库中的每个表,这是我们无法

我们在其中一个程序中使用合并复制,我希望允许我们的用户根据需要强制他们的笔记本电脑与发布服务器同步(我们使用推送订阅)。我使用REPLMERG.EXE()实现了这一点

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

只有sysadmin或db_所有者角色的成员才能执行此操作。

exec sp\u MSreplcheck\u subscribe

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

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

来自:

请求订阅的合并代理

在其下运行的Windows帐户 代理运行时使用它 与订阅服务器的连接。这 帐户必须至少是数据库所有者的成员 订阅数据库

用于连接发布服务器和分发服务器的帐户必须:

  • 成为朋友中的一员
  • 是与发布数据库中的用户关联的登录名
  • 是与分发数据库中的用户关联的登录名。这个 用户可以是来宾用户
  • 对快照共享具有读取权限
因此,合并复制有一个成文的要求,即运行复制代理(replmerge.exe)的帐户必须是db_owner的成员。如果您认为这不适合您的情况,那么合并复制不是合适的技术,因为它有一个您无法满足的需求


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

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

正如Remus和Philippe所指出的,订阅数据库上的db_所有者是同步合并推送订阅的一个硬要求。然而,我们确实希望允许用户同步他们自己的笔记本电脑,而不给他们数据库的完全db_所有者权限

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

-订阅安全模式0-订阅登录同步用户-订阅密码4w3$0m3\u P4$$w0Rd


我们使用的是推式订阅,而不是拉式订阅。我不知道这是否会对权限产生任何影响。位于同一链接中:“用于连接订阅者的帐户必须至少是订阅数据库中db_owner固定数据库角色的成员。”准确回答了问题,谢谢Remus。对于其他可能面临与我们相同困境的人,请参阅下面的解决方法。如果有人感兴趣,我将很乐意详细介绍我们的解决方案。