需要了解如何在SQL Server数据库上设置适当的权限以允许通过Sync Framework 2.1进行同步

时间:2011-11-07 03:21:27

标签: sql permissions synchronization microsoft-sync-framework

SQL Server不是我的强项,当我超越基本的Create Table,Select from Table等时,我开始迷失方向。

我正在尝试设置数据库同步方案,其中Microsoft SQLCompact 3.5数据库通过Proxy to SQL 2008 R2数据库同步。它正在通过Microsoft Sync Framework 2.1进行同步。

当用户帐户是数据库的db_owner时,我通过代理设置了一切并正常工作。

当然现在需要锁定 - 所以我一直在尝试将权限限制为同步所需的最低限度。

根据微软的文章,我需要做以下事情......

  

使用最少许可的原则。不授予超出执行特定任务所需的权限。例如,不要为仅下载同步中涉及的服务器数据库表授予INSERT权限。同步操作需要以下权限:

     
    

对Sync Framework用于读取和写入元数据表和基表的所有存储过程的EXECUTE权限。

         

元数据表的SELECT,INSERT,UPDATE和DELETE权限以及将在同步会话期间更新的任何基表。

  
     

配置使用SqlSyncProvider的SQL Server数据库时,请注意以下配置权限要求:

     
    

CREATE TABLE权限以启用元数据表的创建:scope_info和scope_config,以及为每个基表创建的跟踪表。

         

ALTER TABLE将触发器添加到基表。

         

CREATE PROCEDURE权限,用于创建Sync Framework所需的过程。

         

scope_info和scope_config表的SELECT和INSERT权限。

         

基表的SELECT权限。

  

我允许Visual Studio 2010中的向导为我创建Sync数据库和代理。

因此 - 我无法在SQL Server数据库中找到scope_info和scope_config表,我也无法找到元数据表,因此无法在这些表上设置权限。另外 - 我在哪里可以找到同步框架试图使用的存储过程 - 我已经查看但是无法找到它们。

我会在哪里找到这些以及如何设置相应的权限?

我已授予SQL Server数据库的datareader和datawriter,Insert,Update,Delete和Select以及Execute权限,但同步失败。我还为用户授予了数据库的创建表,创建过程和ALTER权限,但它仍然失败。

如果我为用户启用了db_owner角色 - 它可以正常工作。

我收到的错误是:

  

无法初始化客户端数据库,因为架构表“tblApplications,tblApplicationConfiguration,tblApplicationInstallProperties,tblApplicationPreRequisites,tblApplicationTypes,tblComputerApps,tblComputers,tblComputerTypes,tblDriveHWSerials,tblDrives,tblDriveTypes,tblFunctions,tblLocationApps,tblLocationComputers,tblLocationIPAddress,tblLocations,tblLocationUsers, tblPermissions,tblRegionLocations,tblRegions,tblRegisteredModules,tblRequestFormats,tblRequestStatus,tblRequestTypes,tblRoles,tblRoleUsers,tblSecurity,向tblUsers,tblVehicle,tblVehicleLocationMap,tblVehicleMake,tblRequestProcessingStatus,tblDriveStatus,tblVideoViewTypes'无法通过的getSchema DbServerSyncProvider的()方法检索。   确保您可以建立与客户端数据库的连接,并且正确指定了SyncAdapter的SelectIncrementalInsertsCommand属性或SelectIncrementalUpdatesCommand属性。

我发布时无法使用db_owner角色。

3 个答案:

答案 0 :(得分:2)

Sync Framework中有两种类型的数据库提供程序,即脱机提供程序(SqlCeClientSyncProvider / DbServerSyncProvider),它由本地数据库缓存项目项和协作/对等提供程序(SqlSyncProvider / SqlCeSyncProvider)使用。

离线提供商不要使用scope_xxx表,因为你不会找到它。

假设您在通过向导配置同步时使用了默认的SQL Server更改跟踪,请尝试向您用于连接数据库的帐户授予VIEW CHANGE TRACKING权限。

答案 1 :(得分:0)

我不确定它是否会有所帮助,但我找到this

  

尝试在SyncTable对象上设置UploadOnly。在SyncAdapterBuidler上设置它时,构建器不会生成选择增量命令。这些命令用于从数据库中获取表模式。由于缺少这些,您将收到架构错误。

此外,也许this博客条目会有所帮助。

答案 2 :(得分:0)

正如JuneT提到的,您应该启用更改跟踪

ALTER DATABASE YourDataBaseName  
SET CHANGE_TRACKING = ON  
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON)