Поделиться через


Типы изоляции

Доступ к изолированному хранилищу всегда ограничен пользователем, создавшим его. Для реализации этого типа изоляции общая языковая среда выполнения (CLR) использует то же понятие идентичности пользователя, которое распознает операционная система, — это идентичность, ассоциированная с процессом, в котором выполняется код при открытии хранилища. Это удостоверение пользователя, прошедшее проверку подлинности, но олицетворение может привести к динамическому изменению удостоверения текущего пользователя.

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

  • Удостоверение домена представляет собой свидетельство приложения, которое в случае веб-приложения может быть полным URL-адресом. Для кода, размещенного в оболочке, идентичность домена может быть основана на пути каталога приложения. Например, если исполняемый файл запускается из пути C:\Office\MyApp.exe, доменное имя будет C:\Office\MyApp.exe.

  • Удостоверение сборки является свидетельством сборки. Это может происходить из криптографической цифровой подписи, которая может быть строгим именем сборки, издателем программного обеспечения сборки или ее идентичностью URL-адреса. Если у сборки есть как строгое имя, так и идентификатор издателя программного обеспечения, используется идентификатор издателя программного обеспечения. Если сборка поступает из Интернета и является неподписанной, используется идентификация URL-адреса. Дополнительные сведения о сборках и строгих именах см. в статье "Программирование с помощью сборок".

  • Мобильные магазины перемещаются вместе с пользователем, имеющим мобильный профиль пользователя. Файлы записываются в сетевой каталог и загружаются на любой компьютер, в который входит пользователь. Дополнительные сведения о перемещаемых профилях пользователей см. в статье IsolatedStorageScope.Roaming.

Сочетая понятия пользователя, домена и удостоверения сборки, изолированное хранилище может изолировать данные следующим образом, каждый из которых имеет собственные сценарии использования:

Любую из этих изоляций можно объединить с перемещаемым профилем пользователя. Дополнительные сведения см. в разделе "Изолированное хранилище и перемещение".

На следующем рисунке показано, как хранилища изолированы в разных областях:

Диаграмма, показывающая изоляцию пользователей и сборок.

За исключением перемещаемых хранилищ, изолированное хранилище всегда неявно изолировано от компьютера, так как оно использует локальные хранилища для заданного компьютера.

Это важно

Изолированное хранилище недоступно для приложений Магазина Windows 8.x. Вместо этого используйте классы данных приложения в пространствах имен, включенных в Windows.Storage API среды выполнения Windows, для хранения локальных данных и файлов. Дополнительные сведения см. в разделе "Данные приложения " в Центре разработки для Windows.

Изоляция пользователем и сборкой

Если сборка, использующая хранилище данных, должна быть доступна в домене любого приложения, то уместно использовать изоляцию по пользователю и сборке. Как правило, в этом случае изолированное хранилище используется для хранения данных, которые применяются в нескольких приложениях и не привязаны к определенному приложению, например имени пользователя или информации о лицензии. Чтобы получить доступ к хранилищу, изолированному пользователем и сборкой, код должен быть доверен для передачи информации между приложениями. Как правило, изоляция пользователем и сборкой разрешена в интрасетях, но не в Интернете. Вызов статического метода IsolatedStorageFile.GetStore и передача в него пользователя и сборки IsolatedStorageScope приводит к созданию хранилища с такой изоляцией.

В следующем примере кода извлекается хранилище, изолированное пользователем и сборкой. К хранилищу можно получить доступ через объект isoFile.

IsolatedStorageFile isoFile =
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
    IsolatedStorageScope.Assembly, null, null);
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or _
        IsolatedStorageScope.Assembly, Nothing, Nothing)

Пример использования параметров доказательства см. в разделе GetStore(IsolatedStorageScope, Evidence, Type, Evidence, Type).

Метод GetUserStoreForAssembly доступен как ярлык, как показано в следующем примере кода. Это сочетание клавиш нельзя использовать для открытия хранилищ, которые поддерживают роуминг; в таких случаях используйте GetStore.

IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForAssembly();
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetUserStoreForAssembly()

Изоляция пользователей, домена и сборки

Если приложение использует стороннюю сборку, требующую частного хранилища данных, можно использовать изолированное хранилище для хранения частных данных. Изоляция по пользователю, домену и сборке гарантирует, что только код в данной сборке может получить доступ к данным, и только если сборка используется приложением, выполняющимся при создании хранилища, и только когда пользователь, для которого было создано хранилище, запускает приложение. Изоляция по пользователю, домену и сборке предотвращает утечку данных в другие приложения сторонними сборками. Этот тип изоляции должен быть вашим выбором по умолчанию, если вы знаете, что вы хотите использовать изолированное хранилище, но не уверены, какой тип изоляции следует использовать. Вызов статического метода GetStoreIsolatedStorageFile с передачей пользователя, домена и сборки IsolatedStorageScope возвращает хранилище с такой изоляцией.

В следующем примере кода извлекается хранилище, изолированное пользователем, доменом и сборкой. К хранилищу можно получить доступ через объект isoFile.

IsolatedStorageFile isoFile =
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
        IsolatedStorageScope.Domain |
        IsolatedStorageScope.Assembly, null, null);
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or _
        IsolatedStorageScope.Domain Or _
        IsolatedStorageScope.Assembly, Nothing, Nothing)

Другой метод доступен как сокращение, как показано в следующем примере кода. Это сочетание клавиш нельзя использовать для открытия хранилищ, которые поддерживают роуминг; в таких случаях используйте GetStore.

IsolatedStorageFile isoFile = IsolatedStorageFile.GetUserStoreForDomain();
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetUserStoreForDomain()

Изолированное хранилище и перемещение

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

В следующем примере кода извлекается перемещаемое хранилище, изолированное пользователем и сборкой. К хранилищу можно получить доступ через объект isoFile.

IsolatedStorageFile isoFile =
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
        IsolatedStorageScope.Assembly |
        IsolatedStorageScope.Roaming, null, null);
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or _
        IsolatedStorageScope.Assembly Or _
        IsolatedStorageScope.Roaming, Nothing, Nothing)

Область домена можно добавить для создания перемещаемого хранилища, изолированного пользователем, доменом и приложением. В следующем примере кода показано это.

IsolatedStorageFile isoFile =
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
        IsolatedStorageScope.Assembly | IsolatedStorageScope.Domain |
        IsolatedStorageScope.Roaming, null, null);
Dim isoFile As IsolatedStorageFile = _
    IsolatedStorageFile.GetStore(IsolatedStorageScope.User Or _
        IsolatedStorageScope.Assembly Or IsolatedStorageScope.Domain Or _
        IsolatedStorageScope.Roaming, Nothing, Nothing)

См. также