暂留存储的安全配置

对 SQL Server 暂留数据库的访问通过以下 SQL Server 角色进行保护:

  • InstanceStoreUsers。此角色的成员可以加载/保存往来于实例存储的工作流实例。使用 WorkflowServiceHost 或 WorkflowApplication 托管服务以及使用 SqlWorkflowInstanceStore 进行暂留的应用程序应该在此角色的成员身份下运行。

  • InstanceStoreObservers。此角色的成员可以查询实例存储。使用 WorkflowServiceHost 或 WorkflowApplication 托管服务以及使用 SqlWorkflowInstanceStore 进行暂留的应用程序应该在此角色的成员身份下运行。

  • WorkflowAdministrators。此角色的成员可以将控制命令加入(添加到)实例存储中的命令队列。

  • WorkflowActivationUsers。此角色的成员可以为可激活的工作流实例查询实例存储。工作流管理服务 (WMS) 必须在此角色的成员身份下运行。

  • WorkflowManagementServiceUsers。此角色的成员可以从实例存储中的命令队列中调出(检索出)控制命令。WMS 必须在此角色的成员身份下运行。

对 SQL 暂留存储的访问权限是以每个存储为基础授予的。如果用户对实例存储中存储的某个工作流服务的实例具有访问权限,则此用户可以访问该存储中包括其他工作流服务的实例在内的所有实例。若要阻止对一个服务的实例具有访问权限的用户访问另一个服务的实例,您必须确保为这两个服务使用不同的实例存储。

例如,假设 Service1 在 User1 身份下运行,Reader1 可以查询 Service1 的实例,且 Admin1 可以控制 Service1 的实例。而 Service 2 在 User2 身份下运行,Reader2 可以查询 Service2 的实例,且 Admini2 可以控制 Service2 的实例。若要阻止 User1/Reader1/Admin1 加载/查询/控制 Service2 的实例,以及 User2/Reader2/Admin2 加载/查询/控制 Service1 的实例,必须将 Service1 的所有实例存储在实例存储 Store1 中,并将 Service2 的所有实例存储在实例存储 Store2 中。

在此方案中,用户必须将以下用户或 Windows 组添加到这些角色:

  • 将 User1 添加到 Store1 数据库中的 InstanceStoreUsers 角色。或者,将 User1 添加到 Windows 组 UserGroup1 并将 UserGroup1 添加到 Store1 数据库中的 InstanceStoreUsers 角色。

  • 将 Reader1 或 ReaderGroup1(Reader1 是该 Windows 组的成员)添加到 Store1 数据库中的 InstanceStoreObservers 角色。

  • 将 Admin1 或 AdminGroup1(Admin1 是该 Windows 组的成员)添加到 Store1 数据库中的 WorkflowAdminstrators 角色。

  • 将 User2 或 UserGroup2(User2 是该 Windows 组的成员)添加到 Store2 数据库中的 InstanceStoreUsers 角色。

  • 将 Reader2 或 ReaderGroup2(Reader2 是该 Windows 组的成员)添加到 Store2 数据库中的 InstanceStoreObservers 角色。

  • 将 Admin2 或 AdminGroup2(Admin2 是该 Windows 组的成员)添加到 Store2 数据库中的 WorkflowAdministrators 角色。

  • 将 WMS 的安全标识符 (SID) 添加到 Windows 组 AdminGroup1 和 AdminGroup2。

暂留安全示例

若要进一步提高安全性,可以运行 WMS 的多个实例。例如,假设您有两个运行中的工作流管理服务实例 WMS1 和 WMS2 且这两个实例都是在 BUILTIN\Local Services 帐户下运行。假定 WMS1 分配了安全标识符 WMS-SID1 且 WMS2 分配了安全标识符 WMS-SID2。在这种情况下,必须按照下列步骤执行操作,而不是执行前面步骤列表中的最后一个步骤:

  • 将 WMS-SID1 添加到 Windows 组 WMSGroup1 并将 WMSGroup1 添加到 Store1 数据库中的 WorkflowActivationUsers 和 WorkflowManagementServiceUsers。

  • 将 WMS-SID2 添加到 Windows 组 WMSGroup2 并将 WMSGroup2 添加到 Store2 数据库中的 WorkflowActivationUsers 和 WorkflowManagementServiceUsers。

实例控制终结点授权

对于上一部分中描述的方案,您应该将暂留至 Store1 的所有服务的实例控制终结点 (ICE) 授权更改为 WMSGroup1。同样,应该将暂留至 Store2 的所有服务的 ICE 授权更改为 WMSGroup2。以下示例显示了如何使用配制文件保护 ICE 访问的安全。

<configuration>
    <system.serviceModel>
        <behaviors>
            <serviceBehaviors>
                <behavior name="myServiceBehavior">
                    <workflowInstanceManagement authorizedWindowsGroup="WMSGroup1" />
                </behavior>
            </serviceBehaviors >
        </behaviors>
    </system.serviceModel>
</configuration>

服务管理终结点授权

对于本主题开头部分介绍的方案,您应该将暂留至 Store1 的所有服务的服务管理终结点 (SME) 授权更改为 WMSGroup1。同样,应该将暂留至 Store2 的所有服务的 SME 授权更改为 WMSGroup2。以下示例显示了如何使用配制文件保护 SME 访问的安全。

<configuration>
    <microsoft.applicationServer>
        <hosting>
            <serviceManagement enabled="true" authorizedWindowsGroup="WMSGroup1" endpointConfiguration="ServiceManagementNetPipeEndpoint" />
        </hosting>
    </microsoft.applicationServer>
</configuration>

工作流管理服务配制

对于本主题开头部分介绍的方案,您应该将 WMS1 配制为监控 Store1 并将 WMS2 配制为监控 Store2。为此,请按照以下示例配制修改根 Web.config 文件中的工作流管理服务配制部分。

<configuration>
    <microsoft.applicationServer>
        <persistence>
            <workflowManagement>
                <workflowManagementServiceInstances>
                    <workflowManagementServiceInstance name="WMS1">
                        <instanceStores>
                            <instanceStore name="Store1" location="[root, SiteName or VPath]" />
                        </instanceStores>
                    </workflowManagementServiceInstance>
                    <workflowManagementServiceInstance name="WMS2">
                        <instanceStores>
                            <instanceStore name="Store2" location="[root, SiteName or VPath]" />
                        </instanceStores>
                    </workflowManagementServiceInstance>
                </workflowManagementServiceInstances>
            </workflowManagement>
        </persistence>
    </microsoft.applicationServer>
</configuration>

Windows Server AppFabric 配制向导

通过 AppFabric 配制向导,可以将 Windows 组关联到三种类型的用户:管理员、读者和用户。默认情况下,Windows 组 AS_Administrators、AS_Observers 和 IIS_USRS 分别与管理员、读者和用户相关联。此向导会将 AS_Administrators 添加到 SQL Server 中的 InstanceStoreObservers、WorkflowActivationUsers、WorkflowAdministrators 和 WorkflowManagementServiceUsers 角色,将 AS_Observers 添加到 InstanceStoreObservers 角色,以及将 IIS_USRS 添加到 InstanceStoreUsers 角色。

此向导会将 workflowInstanceManagement 元素的 authorizedWindowsGroup 属性值以及 serviceManagement 元素的 authorizedWindowsGroup 属性值设置为 AS_Administrators。

  2011-12-05