Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
De MIP SDK implementeert een SQLite3-database voor het onderhouden van SDK-cacheopslag. Vóór versie 1.3 van de Microsoft Information Protection SDK werden slechts twee typen cachestatusopslag ondersteund: op schijf en in het geheugen. Beide typen hebben bepaalde gegevens, met name licenties voor beveiligde inhoud en beleidsinformatie, opgeslagen in tekst zonder opmaak.
Ter verbetering van de beveiligingspostuur van de SDK hebben we ondersteuning toegevoegd voor een tweede type on-diskcache die platformspecifieke cryptografische API's gebruikt om de database en de inhoud ervan te beveiligen.
De toepassing definieert het cachetype bij het laden van het profiel als onderdeel van de FileProfileSettings, PolicyProfileSettingsof ProtectionProfileSettings objecten. Het cachetype is statisch voor de levensduur van het profiel. Als u over een ander type cacheopslagtype gaat, moet u het bestaande profiel vernietigen en een nieuw profiel maken.
Cacheopslagtypen
Vanaf MIP SDK-release 1.3 zijn de volgende typen opslagcache beschikbaar.
| Type | Doel |
|---|---|
| InMemory | Onderhoudt de opslagcache in het geheugen in de toepassing. |
| OnDisk | Slaat de database op schijf op in de map die is opgegeven in het instellingenobject. De database wordt opgeslagen in tekst zonder opmaak. |
| OnDiskEncrypted | Slaat de database op schijf op in de map die is opgegeven in het instellingenobject. De database wordt versleuteld met behulp van OS-specifieke API's. |
Elke engine die door de toepassing wordt gegenereerd, genereert een nieuwe versleutelingssleutel.
Cacheopslag wordt ingesteld via een van de profielinstellingenobjecten, via de mip::CacheStorageType enum.
FileProfile::Settings profileSettings(mMipContext,
mip::CacheStorageType::OnDiskEncrypted, // Define the storage type to use.
mAuthDelegate,
std::make_shared<sample::consent::ConsentDelegateImpl>(),
std::make_shared<FileProfileObserver>());
Wanneer elk type te gebruiken
Cacheopslag is belangrijk voor het onderhouden van offlinetoegang tot eerder ontsleutelde informatie en het garanderen van prestaties voor ontsleutelingsbewerkingen wanneer gegevens eerder zijn gebruikt.
- In Geheugenopslag: Gebruik dit opslagtype voor langdurige processen waarbij het niet nodig is om de beleids- of licentiecachegegevens te behouden tijdens het opnieuw opstarten van de service.
- Op schijf: gebruik dit opslagtype voor toepassingen waarbij processen vaak kunnen stoppen en starten, maar het beleid, de licentie en de servicedetectiecache moeten behouden tijdens het opnieuw opstarten. Dit type opslagcache is tekst zonder opmaak, dus is beter geschikt voor serverworkloads waar gebruikers geen toegang hebben tot de statusopslag. Voorbeelden hiervan zijn een Windows-service of Linux-daemon die wordt uitgevoerd op een server of een SaaS-toepassing waarbij alleen servicebeheerders toegang hebben tot de statusgegevens.
- Op schijf en versleuteld: gebruik dit opslagtype voor toepassingen waarbij processen vaak stoppen en starten, maar moeten beleid, licentie en servicedetectiecache behouden tijdens het opnieuw opstarten. Deze opslagcache is versleuteld, dus is beter geschikt voor werkstationtoepassingen waar een gebruiker door de statusdatabase kan bladeren en detecteren. De versleuteling helpt ervoor te zorgen dat nieuwsgierige gebruikers geen toegang hebben tot de inhoud van het beleidsdocument of de beveiligingslicentie-inhoud in platte tekst. Het is belangrijk te weten dat in alle gevallen de gegevens worden versleuteld met sleutels waartoe de gebruiker mogelijk toegang heeft. Een ervaren aanvaller kan de cache met minimale inspanning ontsleutelen, maar dit voorkomt manipulatie en browsen.
Ondersteunde platforms voor versleuteling
| Platform | Versie | Opmerkingen |
|---|---|---|
| Microsoft Windows | Windows 11, ondersteuningsversie van Windows Server | |
| macOS | High Sierra en later | |
| Ubuntu Linux | 22.04 en hoger | Vereist SecretService en LinuxEncryptedCache functievlag. |
| Android | Android 7.0 of hoger | |
| iOS | Alle ondersteunde versies |
Hoewel de MIP SDK ondersteuning biedt voor andere Linux-distributies, hebben we de cacheversleuteling niet getest op RedHat Enterprise Linux, CentOS of Debian.
Notitie
De functievlag voor het inschakelen van cacheopslag op Linux wordt ingesteld via mip::MipConfiguration::SetFeatureSettings()
Cache-opslagdatabasetabellen
De MIP SDK onderhoudt twee databases voor cache. Een daarvan is voor de beveiligings-SDK's en het onderhouden van beveiligingsstatusdetails. De andere is voor de beleids-SDK's en het onderhouden van beleidsdetails en servicegegevens. Beide worden opgeslagen in het pad dat is gedefinieerd in het instellingenobject, onder mip\mip.policies.sqlite3 en mip\mip.protection.sqlite3.
Notitie
De MIP SDK garandeert geen compatibiliteit in verschillende versies van de cache. Het is raadzaam om alle bestanden in de mip-directory te wissen, of in een alternatieve directory die is gewijzigd van de standaardinstelling, voordat u de applicatie upgradet naar een nieuwe versie van de MIP SDK.
Beveiligingsdatabase
| Tabel | Doel | Versleuteld |
|---|---|---|
| AuthInfoStore | Slaat details van verificatievraag op. | Nee |
| ConsentStore | Slaat toestemmingsresultaten op voor elke engine. | Nee |
| DnsInfoStore | Slaat DNS-opzoekresultaten op voor beveiligingsbewerkingen | Nee |
| EngineStore | Slaat enginegegevens, gekoppelde gebruikers en aangepaste clientgegevens op | Nee |
| KeyStore | Slaat symmetrische versleutelingssleutels voor elke engine op. | Ja |
| LicenseStore | Gebruikslicentiegegevens worden gebruikt voor eerder ontsleutelde gegevens. | Ja |
| SdInfoStore | Slaat de resultaten van servicedetectie op. | Nee |
Notitie
Voor de LicenseStore-cache moet een identiteit worden ingesteld op de beveiligingsengine of bestandsengine.
Beleidsdatabase
| Tabel | Doel | Versleuteld |
|---|---|---|
| KeyStore | Slaat symmetrische versleutelingssleutels voor elke engine op. | Ja |
| Beleid | Slaat labelbeleidsgegevens op voor elke gebruiker. | Ja |
| BeleidUrl | Slaat de URL van de back-endbeleidsservice op voor specifieke gebruiker. | Nee |
| Gevoeligheid | Slaat classificatieregels op voor een specifiek gebruikersbeleid. | Ja |
| Gevoeligheids-URLs | Slaat de URL van de dienst voor het backend-gevoeligheidsbeleid op voor een specifieke gebruiker. | Nee |
Overwegingen voor databasegrootte
De databasegrootte is afhankelijk van twee factoren: het aantal engines dat wordt toegevoegd aan de cache en de hoeveelheid beveiligingslicenties die in de cache zijn opgeslagen. Vanaf MIP SDK 1.18 kunnen DeleteStoredData() op ProtectionEngine worden gebruikt om opgeslagen gegevens in de cache programmatisch te verwijderen. Voor eerdere versies kan een extern proces nodig zijn om de cache te verwijderen als deze groter wordt dan gewenst is.
De belangrijkste bijdrager aan databasegroei is de cache voor beveiligingslicenties. Als caching van licenties niet vereist is, hetzij omdat de service-aanroepen geen invloed hebben op de prestaties van uw toepassing, hetzij omdat de cache te groot kan worden, kan de licentiecache worden uitgeschakeld. Dit wordt bereikt door CanCacheLicenses op het FileProfile::Settings object naar false te zetten.
FileProfile::Settings profileSettings(mMipContext,
mip::CacheStorageType::OnDiskEncrypted,
mAuthDelegate,
std::make_shared<sample::consent::ConsentDelegateImpl>(),
std::make_shared<FileProfileObserver>());
profileSettings.SetCanCacheLicenses(false);
Cachingengines
In de MIP SDK wordt een engine gemaakt voor elke gebruiker die een geverifieerde bewerking uitvoert. Engines bieden een interface voor alle bewerkingen die worden uitgevoerd namens een geverifieerde identiteit. Zoals besproken in de concepten Profielen en Engines, hebben FileEngine, PolicyEngine of ProtectionEngine elk twee toestanden CREATED en LOADED. Er moet een engine worden gemaakt en geladen om SDK-bewerkingen uit te kunnen voeren. Als een engine niet in gebruik is, zet de SDK de engine in de cache en behoudt deze in CREATED zo lang mogelijk, afhankelijk van de beschikbare middelen. De profielklasse van elke respectieve SDK biedt ook een methode UnloadEngineAsync om dit expliciet te bereiken.
Elke engine heeft een unieke id id die wordt gebruikt in alle enginebeheerbewerkingen. De clienttoepassing kan expliciet een id opgeven of de SDK kan er een genereren als deze niet wordt geleverd door de toepassing. Als er een unieke id wordt opgegeven met behulp van engine-instellingenobjecten op het moment van het maken van de engine en caching is ingeschakeld in het API-profiel, zoals hierboven beschreven, kunnen dezelfde engines worden gebruikt telkens wanneer de gebruiker een bewerking uitvoert met de SDK. Volg de codefragmenten voor het maken van een [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).
Als u geen bestaande engineId opgeeft, resulteert dit in extra serviceaanroepen om beleid op te halen en licenties op te halen die mogelijk al zijn opgeslagen in de cache voor de bestaande engine. Door de engine-id in de cache op te cachen, heeft de SDK offline toegang tot eerder ontsleutelde informatie en algemene prestatieverbeteringen.
Volgende stappen
Lees vervolgens meer over de concepten profiel- en engineobjecten om te begrijpen hoe u de ID's van de MIP-engine correct instelt om de MIP SDK-caching goed te gebruiken.