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

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

В этом разделе содержатся следующие подразделы.

  • Секции данных и хранилища

  • Безопасный доступ

  • Расположения изолированных хранилищ

  • Создание, перечисление и удаление изолированного хранилища

  • Сценарии изолированного хранилища

  • Связанные разделы

  • Ссылки

Секции данных и хранилища

Когда приложение сохраняет данные в файле, выбирать имя файла и место его хранения следует так, чтобы минимизировать вероятность того, что место хранения данных будет доступно другим приложениям и, следовательно, станет уязвимым к повреждению. В отсутствие стандартной системы для решения подобных проблем разработка специальных средств минимизации конфликтов хранения может стать запутанной, а ее результаты — ненадежными.

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

В изолированном хранилище приложения сохраняют данные в уникальной ячейке данных, привязанной к одному из аспектов, идентифицирующих код, таких издатель или подпись. Ячейка данных — это абстракция, а не определенное место хранения. Она состоит из одного или нескольких файлов для изолированного хранения, называемых хранилищами, которые содержат действительные адреса каталогов, в которых хранятся данные. Например, приложение может иметь связанную с ним ячейку данных, а действительное хранение данных для этого приложения может осуществляться в каталоге файловой системы. Данные, сохраняемые в хранилище, могут быть любого типа, от информации о пользовательских настройках до состояния приложения. Для разработчика размещение ячейки данных прозрачно. Хранилища обычно размещаются на стороне клиента, но серверное приложение может использовать изолированные хранилища для олицетворения пользователя, от лица которого оно действует. В изолированном хранилище информация также может храниться на сервере с перемещаемым профилем пользователя, что обеспечивает ее перемещение вместе с пользователем.

К началу

Безопасный доступ

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

Администраторы могут ограничивать размеры изолированного хранилища, доступного приложению или пользователю, в зависимости от соответствующего уровня доверия. Кроме того, администраторы могут удалить все хранящиеся данные. Чтобы создать изолированное хранилище или получить доступ к нему, в коде необходимо указать соответствующие разрешения IsolatedStorageFilePermission.

Для доступа к изолированному хранилищу коду должны быть назначены все необходимые права операционной системы собственной платформы. Например, при работе с Windows 2000 должны быть выполнены требования списков управления доступом (ACL), которые определяют, какие пользователи имеют права на пользование файловой системой. Приложения платформы .NET Framework по умолчанию имеют права доступа к изолированному хранилищу на уровне операционной системы, если только они не выполняют олицетворение (специфическое для платформы). В таком случае ответственность за обеспечение наличия у олицетворяемого пользователя прав, необходимых для доступа к изолированному хранилищу, несет приложение. Такой доступ позволяет коду, запускаемому или загружаемому через Интернет, выполнять чтение и запись в области хранения, относящейся к конкретному пользователю.

К началу

Расположения изолированных хранилищ

В некоторых случаях рекомендуется проверять изменения в изолированном хранилище, используя файловую систему операционной системы. Разработчикам могут потребоваться сведения о размещении файлов изолированного хранилища. Место их размещения зависит от операционной системы. Ниже в таблице приведены корневые адреса файлов изолированного хранилища для некоторых распространенных операционных систем. В корневых адресах см. каталоги Microsoft\IsolatedStorage. Для того чтобы отобразить изолированное хранилище в файловой системе, нужно изменить настройки папки, установив для нее отображение скрытых файлов и папок.

Операционная система

Местоположение в файловой системе

Windows 98, Windows ME — профили пользователей запрещены

Перемещаемые хранилища =

<КОРНЕВАЯ ПАПКА>\Application Data

Неперемещаемые хранилища = WINDOWS\Local Settings\Application Data

Windows 98, Windows ME — профили пользователей разрешены

Перемещаемые хранилища =

<КОРНЕВАЯ ПАПКА>\Profiles\<пользователь>\Application Data

Неперемещаемые хранилища = Windows\Local Settings\Application Data

Windows NT 4.0

<КОРНЕВАЯ ПАПКА>\Profiles\<пользователь>\Application Data

Windows NT 4.0 с пакетом обновления 4 (SP4)

Перемещаемые хранилища =

<КОРНЕВАЯ ПАПКА>\Profiles\<пользователь>\Application Data

Неперемещаемые хранилища =

<КОРНЕВАЯ ПАПКА>\Profiles\<пользователь>\Local Settings\Application Data

Windows 2000, Windows XP, Windows Server 2003 — обновление Windows NT 4.0

Перемещаемые хранилища =

<КОРНЕВАЯ ПАПКА>\Profiles\<пользователь>\Application Data

Неперемещаемые хранилища =

<КОРНЕВАЯ ПАПКА>\Profiles\<пользователь>\Local Settings\Application Data

Windows 2000 — чистая установка (и обновление с Windows 98 и Windows NT 3.51)

Перемещаемые хранилища =

<СИСТЕМНЫЙ ДИСК>\Documents and Settings\<пользователь>\Application Data

Неперемещаемые хранилища =

<СИСТЕМНЫЙ ДИСК>\Documents and Settings\<пользователь>\Application Data

Windows XP, Windows Server 2003 — чистая установка (или обновление с Windows 2000 и Windows 98)

Перемещаемые хранилища =

<СИСТЕМНЫЙ ДИСК>\Documents and Settings\<пользователь>\Application Data

Неперемещаемые хранилища =

<СИСТЕМНЫЙ ДИСК>\Documents and Settings\<пользователь>\Application Data

Windows Vista

Перемещаемые хранилища =

<СИСТЕМНЫЙ ДИСК>\Пользователи\<пользователь>\AppData\Roaming

Неперемещаемые хранилища =

<СИСТЕМНЫЙ ДИСК>\Users\<пользователь>\AppData\Local

К началу

Создание, перечисление и удаление изолированного хранилища

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

  • Класс IsolatedStorageFile, наследующий отIsolatedStorage, обеспечивает базовую функциональность для управления хранимыми сборками и файлами приложений. Экземпляр класса IsolatedStorageFile служит для представления единичного хранилища, расположенного в файловой системе.

  • Класс IsolatedStorageFileStream, наследующий отSystem.IO.FileStream, предоставляет доступ к файлам, расположенным в хранилище.

  • Класс IsolatedStorageScope — это перечисление, позволяющее создавать и выбирать хранилища с необходимым типом изоляции.

Классы, предназначенные для работы с изолированными хранилищами, позволяют создавать, перечислять и удалять изолированные хранилища. Доступ к методам, используемым для выполнения этих действий, осуществляется с помощью объекта IsolatedStorageFile. Для выполнения некоторых операций необходимы полномочия IsolatedStorageFilePermission, обеспечивающие право администрирования изолированного хранилища. Для доступа к некоторым файлам и каталогам также могут потребоваться права операционной системы. В операционных системах Microsoft Windows NT, Microsoft Windows 2000, Windows XP и Windows Vista доступу к изолированному хранилищу могут препятствовать настройки списка управления доступом (ACL) файла. Программа изолированного хранения Storeadm.exe также может быть использована для осуществления простых функций управления хранилищами — например, для перечисления или удаления всех хранилищ текущего пользователя.

Несколько примеров, демонстрирующих часто встречающиеся задачи изолированного хранения см. в практических руководствах, перечисленных в разделе Связанные разделы. Каждый из этих примеров содержит файл с исходным кодом, демонстрирующим выполнение отдельной задачи. Инструкции по установке, компиляции и выполнению приведены на главной странице каждого примера. Все примеры приводятся только на языке C#.

К началу

Сценарии изолированного хранилища

Изолированные хранилища полезно использовать во многих ситуациях. Здесь приведены пять наиболее известных сценариев:

  • Загружаемые элементы управления. Элементам управления, загружаемым через Интернет, не разрешено записывать данные на жесткий диск посредством обычных классов ввода-вывода, но они могут использовать изолированное хранилище для хранения параметров пользователя и состояний приложения.

  • Хранение общих компонентов. Компоненты, общие для нескольких приложений, могут использовать изолированное хранилище для обеспечения управляемого доступа к хранилищам данных.

  • Хранение на сервере. Серверные приложения могут использовать изолированные хранилища для представления отдельных хранилищ большому числу пользователей, обращающихся с запросами к приложению. Так как изолированное хранилище всегда выделяется пользователем, сервер должен выполнять роль пользователя, создающего запрос. В этом случае данные изолируются на основе идентификатора principal, который является тем же идентификатором, который используется приложением для того, чтобы различать пользователей.

  • Перемещение. Приложения могут также использовать изолированное хранилище с перемещаемыми профилями пользователей. Это позволяет изолированным данным пользователя перемещаться вслед за его профилем.

Хотя изолированное хранилище может успешно применяться в описанных выше сценариях, существует несколько ситуаций, в которых его не следует использовать.

  • Изолированное хранилище не следует применять для хранения важных конфиденциальных данных, таких как незашифрованные ключи или пароли, т.к. изолированное хранилище не защищено от высоконадежного кода, от неуправляемого кода или от правомочных пользователей компьютера.

  • Изолированное хранилище не следует применять для хранения кода.

  • Изолированное хранилище не следует применять для хранения параметров конфигурации и развертывания, управляемых администраторами. (настройки пользователя не считаются параметрами конфигурации, т.к. они не управляются администраторами).

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

К началу

Связанные разделы

Заголовок

Описание

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

Описание различных типов изоляции.

Практическое руководство. Получение хранилищ для изолированного хранения

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

Практическое руководство. Перечисление хранилищ для изолированного хранилища

Пример использования метода IsolatedStorageFile.GetEnumerator для вычисления общего размера всех изолированных хранилищ пользователя.

Практическое руководство. Удаление хранилищ из области изолированного хранения

Пример использования метода IsolatedStorageFile.Remove для удаления изолированных хранилищ двумя разными способами.

Практическое руководство. Предупреждение нехватки места при изолированном хранении

Пример измерения оставшегося свободного места в изолированном хранилище.

Практическое руководство. Создание файлов и каталогов в изолированном хранилище

Ряд примеров создания файлов и каталогов в изолированном хранилище.

Практическое руководство. Поиск существующих файлов и каталоги в изолированном хранилище

Пример считывания структуры каталогов и файлов в изолированном хранилище.

Практическое руководство. Считывание из файлов и запись в файлы в изолированном хранилище

Пример записи и чтения строки в файле IsolatedStorageFile.

Практическое руководство. Удаление файлов и каталогов из изолированного хранилища

Пример удаления файлов и каталогов в изолированном хранилище.

Файловый и потоковый ввод-вывод

Описание способов выполнения синхронного и асинхронного доступа к файлам и доступа к данным потока.

К началу

Ссылки

System.IO.IsolatedStorage.IsolatedStorage