设置数据库和访问控制权限

时间:2009-01-23 19:29:36

标签: php mysql database-design data-access access-control

我是使用PHP和MySQL创建Web应用程序的团队的一员。该应用程序将具有多个具有不同角色的用户。该应用程序还将以地理分布的方式使用。

因此,我们需要创建一个访问控制系统来控制特定数据库记录的用户权限,即修改数据库查询,以便只显示特定的记录。例如,对于城市级别的用户,只应显示与用户特定城市相关的那些记录,而对于国家级别的用户,应显示该国家/地区中所有城市的记录。

我需要帮助设计一个可以处理此类信息检索的系统,而无需在SQL查询中对信息进行硬编码。

任何帮助都将不胜感激。

提前致谢

2 个答案:

答案 0 :(得分:3)

应用程序的设计将根据所需的安全需求而有所不同。

例如,信息是存储在多个数据库中还是存储在单个数据库中?为每个TYPE用户提供代表其特定权限的数据库模式是否重要?显然,这些问题的答案表明您是否需要更安全的数据库访问系统。

如果这样做,则为系统中将存在的每种类型的用户创建数据库用户。为每个用户提供相应表,视图,过程等的权限。当用户对系统进行身份验证时,您必须根据该用户的用户类型创建条件数据库连接。

为了采取最远的极端,严格通过存储过程控制对数据库的访问也是适当的。然后,每个数据库用户只能访问他们所需的存储过程集。

在数据库中实施安全性可能会很痛苦,并且增加了应用程序的复杂性以及维护它的成本,并且确实降低了应用程序IMO的整体内聚力,但它也为任何可能想要的人提供了一个非常严格的安全墙破解或以其他方式滥用系统。

无论您出于安全目的在数据库中实现什么,您显然还需要使用会话机制来存储当前经过身份验证的用户及其类型。更改特定用户功能的简单方法是在类中封装每个用户的可用操作(读取函数或方法)及其属性(或属性)以表示特定用户。这样,如果有两个人点击了Dashboard.php,他们就会看到他们有权访问的数据。

最后,您可以通过存储在数据库中的用户信息(例如,他们需要查看信息的城市或他们监督的用户)来控制一些访问控制(并且可能必须)。然后使用该信息创建可以从特定于用户的域对象访问的对象集合。

答案 1 :(得分:1)

用户是否可以直接访问数据库引擎?如果可以,请避免使用它。

使用专用用户帐户使应用程序连接到数据库,该帐户仅为其提供WHOLE应用程序所需的权限。根据应用程序定义的用户和角色以及简单的自定义API,将应用程序的其余部分保留在应用程序中。

如果这些用户可能需要访问和使用多个此类应用程序,请考虑将用户存储在单独的共享数据库中,并让应用程序使用共享的自定义API进行咨询。