Настройка безопасности для хранилищ сохраняемости

Доступ к базе данных сохраняемости SQL Server защищается с помощью следующих ролей SQL Server.

  • InstanceStoreUsers. Члены этой роли могут загружать экземпляры рабочих процессов из хранилища экземпляров и сохранять их в этом хранилище. Приложение, которое использует WorkflowServiceHost или WorkflowApplication для размещения служб и SqlWorkflowInstanceStore для сохраняемости, должно запускаться с учетными данными, являющимися членом этой роли.

  • InstanceStoreObservers. Члены этой роли могут запрашивать хранилище экземпляров. Приложение, которое использует WorkflowServiceHost или WorkflowApplication для размещения служб и SqlWorkflowInstanceStore для сохраняемости, должно запускаться с учетными данными, являющимися членом этой роли.

  • WorkflowAdministrators. Члены этой роли могут помещать (добавлять) команды управления в очередь команд хранилища экземпляров.

  • WorkflowActivationUsers. Члены этой роли могут запрашивать экземпляры рабочих процессов, готовые к активации, в хранилище экземпляров. Служба управления рабочими процессами (WMS) должна запускаться с учетными данными, являющимися членом этой роли.

  • WorkflowManagementServiceUsers. Члены этой роли могут удалять (извлекать) команды управления из очереди команд в хранилище экземпляров. Служба управления рабочими процессами должна запускаться с учетными данными, являющимися членом этой роли.

Доступ к хранилищу сохраняемости SQL предоставляется на базе хранилища. Пользователь, имеющий доступ к экземплярам службы рабочих процессов в хранилище экземпляров, имеет доступ ко всем экземплярам в этом хранилище, включая экземпляры других служб рабочих процессов. Чтобы пользователи, имеющие доступ к экземплярам одной службы, не имели доступ к экземплярам другой службы, необходимо обеспечить, чтобы эти две службы использовали разные хранилища экземпляров.

Например, предположим, что служба Service1 выполняется с учетными данными пользователя User1, пользователь Reader1 может запрашивать экземпляры службы Service1, и пользователь Admin1 может управлять экземплярами службы Service1. Также предположим, что служба Service2 выполняется с учетными данными пользователя User2, пользователь Reader2 может запрашивать экземпляры службы Service2, и пользователь Admin2 может управлять экземплярами службы Service2. Чтобы пользователи User1, Reader1 и Admin1 не могли загружать и запрашивать экземпляры службы Service2 и не могли управлять ими, а пользователи User2, Reader2 и Admin2 не могли загружать и запрашивать экземпляры службы Service1 и не могли управлять ими, все экземпляры службы Service1 должны сохраняться в хранилище Store1, а все экземпляры службы Service2 должны сохраняться в хранилище Store2.

В этом сценарии пользователю придется добавить пользователей или группы Windows в роли следующим образом.

  • Добавить пользователя User1 в роль InstanceStoreUsers базы данных Store1, или добавить пользователя User1 в группу Windows UserGroup1, а затем добавить группу UserGroup1 в роль InstanceStoreUsers базы данных Store1.

  • Добавить пользователя Reader1 или группу Windows ReaderGroup1, в которую входит Reader1, в роль InstanceStoreObservers базы данных Store1.

  • Добавить пользователя Admin1 или группу Windows, в которую входит Admin1, в роль WorkflowAdminstrators базы данных Store1.

  • Добавить пользователя User2 или группу Windows, в которую входит User2, в роль InstanceStoreUsers базы данных Store2.

  • Добавить пользователя Reader2 или группу Windows ReaderGroup2, в которую входит Reader2, в роль InstanceStoreObservers базы данных Store2.

  • Добавить пользователя Admin2 или группу Windows AdminGroup2, в которую входит Admin2, в роль WorkflowAdminstrators базы данных Store2.

  • Добавить идентификатор безопасности (SID) службы управления рабочими процессами в группы Windows AdminGroup1 и AdminGroup2.

Пример безопасности сохраняемости

Чтобы дополнительно увеличить безопасность, можно запустить насколько экземпляров службы управления рабочими процессами. Например, предположим, что имеется два запущенных экземпляра службы управления рабочими процессами, WMS1 и WMS2, и оба экземпляра запущены с учетной записью BUILTIN\Local Services. Предположим, что WMS1 назначен идентификатор безопасности WMS-SID1, а WMS2 назначен идентификатор безопасности WMS-SID2. В таком случае необходимо выполнить следующие действия вместо последнего действия из предыдущего примера.

  • Добавить WMS-SID1 в группу Windows WMSGroup1 и добавить группу WMSGroup1 в роли WorkflowActivationUsers и WorkflowManagementServiceUsers базы данных Store1.

  • Добавить WMS-SID2 в группу Windows WMSGroup2 и добавить группу WMSGroup2 в роли WorkflowActivationUsers и WorkflowManagementServiceUsers базы данных Store2.

Авторизация конечной точки управления экземплярами

Для сценария, приведенного в предыдущем разделе, следует изменить авторизацию конечных точек управления экземплярами всех служб, которые существуют в хранилище Store1, на WMSGroup1. Аналогично, следует изменить авторизацию конечных точек управления экземплярами всех служб, которые существуют в хранилище Store2, на WMSGroup2. В следующем показан способ защиты доступа к конечной точке управления экземплярами с помощью файла конфигурации.

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

Авторизация конечной точки управления службами

Для сценария, приведенного в начале раздела, следует изменить авторизацию конечных точек управления службами всех служб, которые существуют в хранилище Store1, на WMSGroup1. Аналогично, следует изменить авторизацию конечных точек управления службами всех служб, которые существуют в хранилище Store2, на WMSGroup2. В следующем показан способ защиты доступа к конечной точке управления службами с помощью файла конфигурации.

<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.

Мастер устанавливает для атрибута authorizedWindowsGroup элемента workflowInstanceManagement и для атрибута authorizedWindowsGroup элемента serviceManagement значение «AS_Administrators».

  2011-12-05