在现有sqlite

时间:2016-04-06 12:01:59

标签: ios objective-c core-data persistent-storage nspersistentstore

当应用程序在后台时调用addPersistentStoreWithType时,我的sqlite文件有时曾经不可用,我收到此错误:

  

[Model createPersistentStoreCoordinatorWithStoreURL:]第387行$ sqlite加密状态NSFileProtectionCompleteUntilFirstUserAuthentication错误:错误Domain = NSCocoaErrorDomain Code = 256"操作无法完成。 (可可错误256。)" UserInfo = 0x1560e540 {NSUnderlyingException =授权被拒绝,NSSQLiteErrorDomain = 23}

我发现这是因为该文件仍然受到保护(默认为NSFileProtectionCompleteUntilFirstUserAuthentication,因此在用户在重启后第一次解锁设备后,受保护的数据可用。我觉得这样做不正常,因为我有大量的崩溃,我无法想象许多人在野外重启后仍然锁定了他们的设备。

因此我现在正在添加我的持久性商店协调员,调整后的配置就像这样

NSDictionary *options = @{
        NSMigratePersistentStoresAutomaticallyOption : @YES,
        NSInferMappingModelAutomaticallyOption : @YES,
        NSPersistentStoreFileProtectionKey : NSFileProtectionNone
    }; 

问题:

  1. 如果设备被锁定,这会确保该文件在后台也可用吗?
  2. 如果我更改了NSPersistentStoreFileProtectionKey
  3. ,这会破坏sqlite(/ data in)吗?
  4. 我没有将敏感数据存储在数据库中,但是,在使用NSFileProtectionNone时,您是否看到安全问题?

1 个答案:

答案 0 :(得分:1)

  1. 是的,它会的。这就是这把钥匙正在做的事情。
  2. 不,它不会。我有一个带有默认保护密钥的持久存储协调器,然后添加到它NSFileProtectionComplete,数据没问题。
  3. 是。如果有人获得对您的db文件的访问权限,他可以轻松阅读它。查看此文章:https://github.com/project-imas/encrypted-core-data#strings-comparison