1

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

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

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

任何帮助,将不胜感激。

提前致谢

4

2 回答 2

3

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

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

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

最极端的做法是,通过存储过程严格控制对数据库的访问也是合适的。然后每个数据库用户将只能访问他们需要的一组存储过程。

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

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

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

于 2009-01-23T23:14:18.443 回答
1

用户可以直接访问数据库引擎吗?如果可以的话,避免它。

使应用程序使用专用用户帐户连接到数据库,该帐户仅为其提供整个应用程序所需的权限。根据应用程序定义的用户和角色以及简单的自定义 API,在应用程序内部执行其余的安全工作。

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

于 2009-01-23T20:19:58.733 回答