我想知道,如果我将用户名保存为文件夹名称,然后将文件夹内的加密文件中的哈希密码保存到该文件夹中包含其他用户数据的每个用户,是否比将信息输入更好数据库。
我问这个问题是因为我想到了用户太多时的速度。 所以我的想法是,在数据库中,当我们查询用户名和密码时,它会遍历每一行并检查它是否匹配。
但是在文件系统中,用户名是文件夹名,我们可以使用一些file_exists();函数(在PHP中)并检查目录是否存在。如果是,则检查密码并验证用户,否则告诉用户不存在该用户名。
我想知道:
...谢谢
答案 0 :(得分:3)
这比使用数据库更糟糕。因为数据库解决了所有棘手的问题ACID issues,所以你不必重新发明轮子。
安全性并不重要。使用数据库解决方案,您的应用程序需要对数据库表进行读/写访问,并且您的代码需要确保例如用户A无法读取或修改用户B的数据。类似地,如果您使用文件,您的应用程序需要对目录树进行读/写访问,因此应用程序需要进行必要的访问检查(除非您可以使用类似的东西) suexec的)。
此外,在DB中查询用户名的速度明显慢于使用file_exists()这样的东西的想法是不正确的。 DB可以使用索引快速查找索引列(例如,用户名),而file_exists()要求内核遍历路径以检查文件,这大约是相同的工作量(具体取决于数据库的方式)实现索引(通常是B-tree)与文件系统如何实现目录树索引。