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

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

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

【问题讨论】:

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

标签: ios swift xcode core-data data-protection


【解决方案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
    • 是的。也许这就是文档如此简短的原因;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多