核心数据和数据保护

Posted

技术标签:

【中文标题】核心数据和数据保护【英文标题】:CoreData & Data Protection 【发布时间】:2016-12-21 00:05:27 【问题描述】:

所以我正在开发一个在本地使用CoreData 框架存储用户信息的应用程序。信息可能很敏感,所以我在考虑如何保护存储到数据库中的信息。在 Xcode 仪表板的功能选项卡下,我找到了这个数据保护开关:

有人知道这是怎么工作的吗?如果我打开开关,Xcode 会自动编码我的CoreData 文件吗?或者如何对我的CoreData 文件实施这种保护? 感谢您的时间和耐心。谢谢!

【问题讨论】:

您是否尝试过查看 Apple 的文档?您需要哪些方面的帮助? @Tom Harrington @Tom Harrington 是的,我浏览了 Apple 关于数据保护的文档,但它非常简短,没有提到任何有用的方法或如何实施。我现在对如何在我的 CoreData 数据库上实现 ios 的数据保护感到困惑~ 【参考方案1】:

根据 Apple 文档,当用户为设备设置有效密码时,会自动启用数据保护。系统在幕后加密和解密您的内容。这些过程是自动和硬件加速的。 但我们仍然可以使用nonecompletecompleteUnlessOpencompleteUntilFirstUserAuthentication 以编程方式设置文件保护级别选项

let options = [NSMigratePersistentStoresAutomaticallyOption:true,
                           NSInferMappingModelAutomaticallyOption:true,
                           NSPersistentStoreFileProtectionKey: FileProtectionType.complete] as [String : Any]
            try persistantStoreCoordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: storeURL, options: options)

请参阅此link 以了解有关不同类型选项的更多信息。

【讨论】:

【参考方案2】:

您找到了正确的位置,您必须打开目标功能窗格中的数据保护开关,以表明您要使用数据保护。根据Apple's documentation,这就足够了:

默认的保护级别是完全保护,其中文件 设备锁定时已加密且无法访问。你可以 以编程方式为您创建的文件设置保护级别 应用 [...]

它表明您可以以编程方式设置保护级别。如果您想这样做(我仍然这样做,以保存;),您应该在创建 persistentStoreCoordinator 时使用适当的选项:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                         @YES, NSMigratePersistentStoresAutomaticallyOption,
                         @YES, NSInferMappingModelAutomaticallyOption,
                         NSFileProtectionComplete, NSPersistentStoreFileProtectionKey, // <-- HERE
                         nil];
...

__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) 
...

NSFileProtectionComplete 表示

文件以加密格式存储在磁盘上,无法读取 在设备锁定或启动时从或写入。

您也可以使用NSFileProtectionCompleteUnlessOpen,请参阅 Xcode 快速帮助了解差异。

【讨论】:

感谢您的回复。因此,如果我理解这一点,只要我打开目标功能窗格中的数据保护开关,此应用程序中包含的所有文件都会被加密且无法访问。 但我仍然可以选择以编程方式更改保护级别。听起来打开开关对我来说已经足够了:D 是的。也许这就是文档如此简短的原因;)

以上是关于核心数据和数据保护的主要内容,如果未能解决你的问题,请参考以下文章

核心数据和数据完整性:读操作与写操作。如何保护?

iOS 对核心数据的数据保护不起作用

Dataphin核心功能:安全——基于数据权限分类分级和敏感数据保护,保障企业数据安全

深度学习核心技术精讲100篇(五十三)-机器学习中的隐私保护

核心数据处理在后台时需要完整的数据保护

RAID2.0核心思想:数据保护与物理资源管理域分离