4

私は FMDB を使用して sqlite を操作していますが、SQLCipher への依存を避けたいと考えています。iOS に組み込まれている DataProtection 機能を簡単に活用するにはどうすればよいですか? これは可能ですか - 唯一の要件は、電話が盗まれた場合にデータを保護することです.

電話が PIN でロック解除されている場合、ユーザーが DB にアクセスできても問題ありません。これはユーザーのデータです。

4

2 に答える 2

5

databaseWithPath:実行する行(または)を探してinitWithPath:、次を追加します。

FMDatabase *db = [FMDatabase databaseWithPath:path];

NSDictionary *attributes = @{NSFileProtectionKey: NSFileProtectionCompleteUnlessOpen};
NSError *error;
BOOL success = [[NSFileManager defaultManager] setAttributes:attributes
                                                ofItemAtPath:path
                                                       error:&error];
if (!success) {
    NSLog(@"File protection failed: %@", error);
}

キーの可能な値は次のとおりです。NSFileProtectionKey

  • NSFileProtectionNone: ファイルには特別な保護が関連付けられていません。いつでも読み書きできます。
  • NSFileProtectionComplete: ファイルは暗号化された形式でディスクに保存され、デバイスのロック中または起動中は読み書きできません。
  • NSFileProtectionCompleteUnlessOpen: ファイルは暗号化された形式でディスクに保存されます。デバイスがロックされている間はファイルを作成できますが、一度閉じると、デバイスのロックが解除されるまで再び開くことはできません。ロックが解除された状態でファイルが開かれている場合、ユーザーがデバイスをロックしても、引き続きファイルにアクセスできます。ファイルを作成して開くときはパフォーマンスがわずかに低下しますが、書き込みや読み取りを行うときはそうではありません。NSFileProtectionCompleteこれは、デバイスのロックが解除されているときにファイル保護を変更することで軽減できます。
  • NSFileProtectionCompleteUntilFirstUserAuthentication: ファイルは暗号化された形式でディスクに保存され、デバイスが起動するまでアクセスできません。ユーザーが初めてデバイスのロックを解除した後、アプリはファイルにアクセスでき、その後ユーザーがデバイスをロックしても引き続きアクセスできます。

適切な保護の種類は、iOS のバージョン (最後の 2 つは iOS 4 では使用できません) と、デバイスがロックされているときにデータベースを使用するかどうかによって異なります。

于 2013-08-26T12:31:19.343 に答える
3

最も簡単な方法は、アプリ全体のデータ保護を有効にすることです。アプリ IDに移動し、[編集] をクリックして、[共有と権限] を [完全な保護] に設定します。

ここに画像の説明を入力

Xcode を新しいアプリ ID 情報で更新すると、それ以降はアプリに対して自動的に処理されます。

于 2013-08-24T01:42:34.777 に答える