使用文件和目录而不是数据库来验证用户是一个好的选择吗?

时间:2012-01-16 14:38:28

标签: database security filesystems authentication

我想知道,如果我将用户名保存为文件夹名称,然后将文件夹内的加密文件中的哈希密码保存到该文件夹​​中包含其他用户数据的每个用户,是否比将信息输入更好数据库。

我问这个问题是因为我想到了用户太多时的速度。 所以我的想法是,在数据库中,当我们查询用户名和密码时,它会遍历每一行并检查它是否匹配。

但是在文件系统中,用户名是文件夹名,我们可以使用一些file_exists();函数(在PHP中)并检查目录是否存在。如果是,则检查密码并验证用户,否则告诉用户不存在该用户名。

我想知道:

  1. 没有考虑安全性,这是一个比数据库更好的解决方案,为什么/为什么不呢?
  2. 考虑到安全性,它会有什么问题?
  3. ...谢谢

1 个答案:

答案 0 :(得分:3)

  1. 这比使用数据库更糟糕。因为数据库解决了所有棘手的问题ACID issues,所以你不必重新发明轮子。

  2. 安全性并不重要。使用数据库解决方案,您的应用程序需要对数据库表进行读/写访问,并且您的代码需要确保例如用户A无法读取或修改用户B的数据。类似地,如果您使用文件,您的应用程序需要对目录树进行读/写访问,因此应用程序需要进行必要的访问检查(除非您可以使用类似的东西) suexec的)。

  3. 此外,在DB中查询用户名的速度明显慢于使用file_exists()这样的东西的想法是不正确的。 DB可以使用索引快速查找索引列(例如,用户名),而file_exists()要求内核遍历路径以检查文件,这大约是相同的工作量(具体取决于数据库的方式)实现索引(通常是B-tree)与文件系统如何实现目录树索引。