为什么不使用内置的MySQL用户和网站权限?

Jam*_*ake 9 php mysql database permissions privileges

我已经搜索了很多关于加密,存储密码,设计安全PHP脚本等主题的内容.

似乎有几个共同的主题:

  • "不要尝试编写自己的加密脚本,使用现有的库(例如PHPass)."
  • "不要为每个用户创建MySQL数据库,制作一个大型数据库,编写一个好的PHP脚本来管理用户,密码及其数据."

现在,是我,或​​者这两个看起来有点矛盾吗?

我们来看看这个例子吧.我想创建一个用户可以创建帐户的网站.他们可以添加敏感信息(例如他们的家庭地址),然后他们可以在网站上查看或编辑.此敏感信息不应公开,并且不可供该网站的任何其他用户使用.它应该"仅供用户使用".

有一个管理员应该能够读取敏感信息(例如向每个客户发送信件),但当然无法读取密码.如果认为有必要,可以在当地完成,即.不允许通过互联网访问管理员.

可以采取一切预防措施来使用最新版本,最佳实践等.网站可以从专用机器运行,该机器可以是物理安全的,不与任何其他任务共享.

那么,为什么不为网站的每个用户创建MySQL用户呢?为什么要推出自己的PHP脚本来创建用户,然后在MySQL已经提供此功能时将此信息存储在数据库的表中?实际原因是什么?我们是否认为使用PHPass(或替代方案)提供比MySQL内置的"更安全"的密码存储?

MySQL数据库中的存储被认为是"不安全的".如果您对我的计算机有本地访问权限,但我的MySQL数据库没有管理员或root密码或其他用户/通过组合,那么您仍然可以获得所有数据吗?

如果为网站的每个用户创建一个MySQL用户被认为是"可接受的",那么为什么不为每个用户创建一个新的数据库或表并在MySQL中设置权限,这样每个用户只能访问他们的数据而没有别的?当然,具有本地访问权限和root密码的管理员可以读取所有信息.

所以看起来设计创建用户和分配权限的功能已经内置到MySQL中,为什么要写一个PHP脚本来做同样的事情呢?

///

跟进问题.

如果这样做,则需要有一个MySQL用户才能使用PHP脚本来创建新用户.这会将它的用户/传递存储在纯文本中,这是不可能的?

现在,理想情况下,这个MySQL用户将无法读取/写入或对任何现有数据库执行任何操作,但能够创建新用户,创建新数据库/表并为此新用户分配权限.

这可能吗?

Bar*_*mar 1

问题在于MySQL的访问控制不够细粒度:它只在数据库和表级别进行操作。如果您授予用户UPDATE对表的权限,他们可以更新该表中的任何行,包括包含有关应用程序其他用户的信息的行。

您可以为每个用户提供自己的数据库,但这使得编写通用应用程序变得非常困难。如果站点管理员想要搜索用户,他们必须编写一个搜索数千个表的查询。在这样的环境下写作是完全行不通的。

或者考虑用于用户之间通信的应用程序。如果用户 A 想要向用户 B 发送消息,他们需要将一些内容写入用户 B 可以读取的表中。但如果每个用户只能访问自己的表,则不存在这样的表。您要做什么,为每对用户创建一个数据库?那么多方通信(例如论坛系统)又如何呢?