【发布时间】:2016-11-28 13:54:18
【问题描述】:
我最近使用 Java 为我在 OOP 中的大学项目创建了一个密码管理器。为了处理数据库,我选择了 SQLite,因为在小型项目中使用 MySQL 或 SQL 服务器变得很忙。虽然我已经完成了提交,但我正在考虑是否可以对项目做进一步的改进。
我观察到的最大缺点是,如果有人设法在系统中找到数据库的位置(这太容易了),打开数据库将非常简单。
现在出现了两个问题 -
- 用户的密码列表将可见
- 任何人都可以使用 SQLite 管理器修改数据。
为了解决第一个问题,我已经使用了 AES 加密,它工作得很好。但是,第二个问题仍然存在。
简而言之,除了密码管理器本身之外,如何防止我的 SQLite DB 被修改?
请注意,我的应用程序只是家用 PC 上使用的离线密码管理器。因此,您可以相应地考虑威胁级别。此外,密码管理器本身必须修改数据库内容,因此分配权限不应阻止应用程序这样做。
注意:我想知道我们是否可以利用 SQLite 的限制,即一次只能建立一个写入数据的连接。使用它,入侵者将无法修改它。但是,我不确定它是如何实现的。
【问题讨论】:
-
只是
chmod数据库只对你可读。其他用户有自己的帐户,对吧? (你也应该使用密码散列函数对密码进行散列) -
如果有人掌握了物理数据库文件,没有什么可以阻止他们查看数据或更改数据(对于任何基于服务器的 DBMS 也是如此 - 但是通常更难访问数据库上的文件)数据库服务器)。甚至单个连接“限制”都不会阻止这种情况 - 关闭您的应用程序会使它变得无用。
-
" 我想知道我们是否可以使用 SQLite 的限制,即一次只能建立一个连接。" 这是不正确的。一次只能有一个连接锁定数据库进行写入,但可以存在多个连接。
-
@ColonelThirtyTwo 感谢您的指正。
-
您实际上无法防御具有管理员权限的入侵者。他们可以设置断点并转储程序的 RAM,以便从中获取几乎任何他们想要的信息。
标签: java sql database windows sqlite