如何在我的Android应用中保护同步数据?

时间:2013-10-22 15:55:56

标签: java android database sqlite security

我正在构建一个Android应用,其中包含一个包含非常敏感数据的SQLite数据库。由于任何对设备具有物理访问权限的人都可以复制数据库,我想到了几个解决方案来保护数据库中的数据。我们当然可以在将其输入数据库之前对其进行加密,但由于这会抑制实际查询数据库的可能性,因此会有效地使数据库失效。另外:如果我们将密钥存储在应用程序中,它也可以很容易地检索密钥,并且加密将毫无意义。

因此我们在登录时将所有数据与服务器同步,之后有几个选项:

  1. 在onStop()方法中删除整个数据库。我认为这样会非常安全,除非应用程序崩溃时我认为它不会调用onStop()方法。由于您可以手动销毁该进程,我认为对该设备具有物理访问权限的人仍然可以访问该数据库。正确?
  2. 使用内存中的SQLite数据库。根据这个SO答案虽然“每个与内存数据库的新连接都会创建一个新的空数据库。”。这意味着您无法在活动中共享它。
  3. 将同步的数据存储在几个Java列表/数组中,并从中获取所有信息。问题是这些列表只存在于一个Activity中。为了解决这个问题,我想到在一个片段中创建完整的应用程序。我还没有开始尝试这个,但它似乎也不是正常的做法。
  4. 是否有人知道这些想法是否有意义,更重要的是,如果没有更好/更方便的方法在应用程序活动中安全地保存数据?欢迎所有提示!

1 个答案:

答案 0 :(得分:1)

  

这意味着您无法在活动中分享。

当然可以。使用单身SQLiteDatabase。无论如何,您应该这样做,以启用跨多个线程的线程安全访问。

  

将已同步的数据存储在几个Java列表/数组中,并从中获取所有信息。问题是这些列表只存在于一个Activity中。

如果你小心内存泄漏,你可以再次使用单例或静态数据成员。

但是,如果使用“一对Java列表/数组”是一个选项,我不知道你为什么要乱用SQLite。 SQLite旨在将关系数据存储在文件中,听起来你不需要任何文件。