Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Пакет SDK MIP реализует базу данных SQLite3 для обслуживания хранилища кэша пакета SDK. До версии 1.3 пакета SDK Microsoft Information Protection поддерживаются только два типа хранилища состояний кэша: на диске и в памяти. Оба этих типа хранят определенные данные, в частности лицензии для защищенного содержимого и сведений о политике в виде обычного текста.
Чтобы повысить уровень безопасности пакета SDK, мы добавили поддержку второго типа кэша дисков, использующего криптографические API для конкретной платформы для защиты базы данных и его содержимого.
Приложение определяет тип кэша при загрузке профиля в составе объектов FileProfileSettings
, PolicyProfileSettings
или ProtectionProfileSettings
. Тип кэша является статическим для жизни профиля. Для перехода на другой тип хранилища кэша требуется уничтожить существующий профиль и создать новый.
Типы хранилища кэша
Начиная с версии 1.3 пакета SDK для MIP доступны следующие типы кэша хранилища.
Тип | Цель |
---|---|
InMemory | Поддерживает хранение кеша в памяти в приложении. |
OnDisk | Хранит базу данных на диске в каталоге, предоставленном в объекте параметров. База данных хранится в виде открытого текста. |
OnDiskEncrypted | Хранит базу данных на диске в каталоге, предоставленном в объекте параметров. База данных шифруется с помощью API для определенных ОС. |
Каждый движок, созданный приложением, генерирует новый ключ шифрования.
Хранилище кэша настраивается через перечисление mip::CacheStorageType
в одном из объектов настроек профиля.
FileProfile::Settings profileSettings(mMipContext,
mip::CacheStorageType::OnDiskEncrypted, // Define the storage type to use.
mAuthDelegate,
std::make_shared<sample::consent::ConsentDelegateImpl>(),
std::make_shared<FileProfileObserver>());
Когда следует использовать каждый тип
Хранилище кэша важно для поддержания автономного доступа к ранее расшифрованной информации и обеспечения производительности операций расшифровки, когда данные уже были использованы.
- В хранилище памяти. Используйте этот тип хранилища для длительных процессов, в которых сохранение сведений о политике или кэше лицензий во время перезапусков служб не требуется.
- На диске: используйте этот тип хранилища для приложений, где процессы могут часто останавливаться и запускаться, но должны поддерживать политику, лицензию и кэш обнаружения служб во время перезапусков. Этот тип кэша хранилища является открытым текстом, поэтому лучше подходит для рабочих нагрузок сервера, где у пользователей нет доступа к хранилищу состояний. Примерами этого могут быть служба Windows или управляющая программа Linux, запущенная на сервере, или приложение SaaS, где только администраторы служб будут иметь доступ к данным состояния.
- На диске и шифровании: используйте этот тип хранилища для приложений, где процессы могут часто останавливаться и запускаться, но должны поддерживать политику, лицензию и кэш обнаружения служб во время перезапусков. Этот кэш хранилища шифруется, поэтому лучше подходит для приложений рабочей станции, где пользователь может просматривать и обнаруживать базу данных состояния. Шифрование помогает гарантировать, что у любопытных пользователей не будет доступа к содержимому политики или содержимому лицензии на защиту в виде обычного текста. Важно отметить, что во всех случаях данные шифруются ключами, к которым пользователь может получить доступ. Квалифицированный злоумышленник может расшифровать кэш с минимальными усилиями, но это предотвращает изменение и просмотр.
Поддерживаемые платформы для шифрования
Платформа | Версия | Примечания. |
---|---|---|
Microsoft Windows | Windows 8 и более поздней версии | Windows 7 поддерживает только CacheStorageType::OnDisk |
macOS | Хай-Сьерра и более поздние версии | |
Ubuntu Linux | 16.04 и более поздних версий | Требуются флаги функциональности SecretService и LinuxEncryptedCache . |
Android | Android 7.0 или более поздней версии | |
iOS | Все поддерживаемые версии |
Хотя пакет SDK MIP поддерживает другие дистрибутивы Linux, мы не проверили шифрование кэша в RedHat Enterprise Linux, CentOS или Debian.
Примечание.
Флаг компонента для включения хранилища кэша в Linux устанавливается с помощью mip::MipConfiguration::SetFeatureSettings()
Таблицы базы данных хранилища кэша
Пакет SDK MIP поддерживает две базы данных для кэша. Один — для пакетов SDK для защиты, а также для хранения сведений о состоянии защиты. Другой — для SDK политики и поддержания сведений о политике и информации о службе. Оба хранятся в пути, определенном в объекте параметров, в mip\mip.policies.sqlite3 и mip\mip.protection.sqlite3.
Примечание.
Пакет SDK MIP не гарантирует совместимость между различными версиями кэша. Рекомендуется очистить все файлы в каталоге MIP\ или любой альтернативный каталог, измененный с параметра по умолчанию, перед обновлением приложения до новой версии пакета SDK MIP.
База данных защиты
Таблица | Цель | Зашифровано |
---|---|---|
AuthInfoStore | Хранит сведения о данных вызова аутентификации. | Нет |
Хранилище согласий | Хранит результаты согласия для каждого механизма. | Нет |
DnsInfoStore | Сохраняет результаты поиска DNS для операций защиты | Нет |
Магазин двигателей | Хранит данные о движке, связанном пользователем, и кастомизированные данные клиента. | Нет |
КейСтор | Хранит симметричные ключи шифрования для каждого движка. | Да |
Магазин лицензий | Магазины используют информацию о лицензии для ранее расшифрованных данных. | Да |
SdInfoStore | Хранит результаты обнаружения служб. | Нет |
Примечание.
Кэш LicenseStore требует, чтобы идентификация была задана в подсистеме защиты или ядре файлов.
База данных политики
Таблица | Цель | Зашифровано |
---|---|---|
Хранилище ключей | Хранит симметричные ключи шифрования для каждого движка. | Да |
Политики | Хранит сведения о политике меток для каждого пользователя. | Да |
СсылкаНаПравила | Сохраняет URL-адрес службы серверной политики для конкретного пользователя. | Нет |
Чувствительность | Хранит правила классификации для определенной политики пользователя. | Да |
ЧувствительностьUrls | Сохраняет URL-адрес службы политики сенситивности серверной части для конкретного пользователя. | Нет |
Рекомендации по размеру базы данных
Размер базы данных зависит от двух факторов: количество модулей, добавляемых в кэш, и количество лицензий на защиту, которые были кэшированы. По состоянию на пакет SDK 1.3 MIP не существует механизма очистки кэша лицензий по истечении срока действия. Для удаления кэша потребуется выполнить внешний процесс, если он увеличивается больше, чем требуется.
Самым значительным участником роста базы данных будет кэш лицензий защиты. Если кэширование лицензий не требуется, либо потому, что запросы служебного обмена не повлияют на производительность приложения, либо кэш может стать слишком большим, кэш лицензий может быть отключен. Это достигается, установив CanCacheLicenses
для FileProfile::Settings
объекта значение false.
FileProfile::Settings profileSettings(mMipContext,
mip::CacheStorageType::OnDiskEncrypted,
mAuthDelegate,
std::make_shared<sample::consent::ConsentDelegateImpl>(),
std::make_shared<FileProfileObserver>());
profileSettings.SetCanCacheLicenses(false);
Механизмы кэширования
В пакете SDK MIP обработчик создается для каждого пользователя, выполняющего любую проверку подлинности. Подсистемы предоставляют интерфейс для всех операций, выполняемых от имени удостоверения, прошедшего проверку подлинности. Как описано в концепциях профилей и обработчиков, FileEngine, PolicyEngine или ProtectionEngine каждый имеет два состояния CREATED
и LOADED
. Необходимо создать и загрузить движок, чтобы он мог выполнять SDK операции. Если движок не используется, пакет SDK кэширует движок и сохраняет его состояние как можно дольше в CREATED
, в зависимости от доступных ресурсов. Класс профиля каждого соответствующего пакета SDK также предоставляет метод UnloadEngineAsync
для явного достижения этого.
Каждый модуль имеет уникальный идентификатор id
, используемый во всех операциях управления обработчиком. Клиентское приложение может явно предоставить идентификатор, или, если он не предоставлен приложением, пакет SDK сможет его сгенерировать. Если уникальный идентификатор предоставляется с помощью объектов параметров ядра во время создания обработчика, а кэширование включено в профиле API, как описано выше, те же механизмы можно использовать каждый раз, когда пользователь выполняет операцию с пакетом SDK. Следуйте фрагментам кода для создания [mip::FileEngine](./concept-profile-engine-file-engine-cpp.md#create-file-engine-settings)
и [mip::PolicyEngine](./concept-profile-engine-policy-engine-cpp.md#implementation-create-policy-engine-settings)
.
Непредоставление существующего engineId приведет к дополнительным сервисным запросам для получения политики и лицензий, которые, возможно, уже были кэшированы для существующего движка. Кэширование идентификатора механизма позволяет пакету SDK автономно получать доступ к ранее расшифрованной информации, а также общие улучшения производительности.
Следующие шаги
Далее узнайте больше о концепциях объектов Profile and Engine, чтобы понять, как правильно задать идентификаторы обработчиков MIP для правильного использования кэширования пакета SDK MIP.