存储mysql行的访问权限


Storing access permissions for mysql rows

我有一个数据结构类型的问题,我也不知道答案。基本上,我有四个权限控件(isSecret, canEdit, isActive和hasPage),我需要为许多不同的表存储在a中。

我有两个解决方案,但我不确定哪个是最好的性能方面:

  1. 在每个表中将每个权限存储为单独的行。对我来说,这似乎是查询时访问数据的最快方式,但由于PHP将在90%的时间内处理权限,因此似乎效率低下。

  2. 拥有单个permissions列,其中权限名称(sec、edt、act、has)以逗号分隔的字符串形式存储。这让我在未来灵活地引入新的/不同的权限,在我的数据库中看起来很整洁,并且易于在PHP和mySQL中使用(我可以使用in查找查询并爆炸字符串并将其作为PHP中的数组使用)。该列将是一个40个字符的varchar,允许我存储多达10个不同的权限(3个字母和一个逗号)

选项2是我的首选解决方案,直到我意识到IN命令可能是资源密集型的。我认为在表的每一行上使用IN命令查找要过滤掉的非活动页面可能会影响性能。为了解决这个问题,我可以取列中的每一行,然后用PHP过滤,但我不确定这是否有效。

理想情况下,我认为在我的解决方案子列将是最好的解决方案(一个主要的权限列,并在这4个子列为我的每个权限),然后可以很容易地查询(即。在许可。canEdit = 1)

结果最终将使用memcache缓存(当我能够弄清楚如何使用它和清除它的有效方法时),但我不想依赖于此。

我认为SETs是你需要的