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

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

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

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

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

如有任何帮助,我们将不胜感激。

提前致谢

最佳答案

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

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

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

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

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

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

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

关于php - 设置数据库和访问控制权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/474163/

相关文章:

php - 旧动态 url 的 mod_rewrite 向后

php - 基于结果的选择中选择 MySQL

sql - 如何规范化可以链接到一个或多个表的表?

sql - PostgreSQL - 如何加入 M :M table the right way?

php - CodeIgniter:删除 WAMP 上 URL 中的 "index.php"

php - 在 yii2 中仅重新加载 gridview

php - 最大长度 XSLT 但在输出中保留完整段落

php - 通过连接对多列进行分组

php - 无法修改config.inc.php

sql-server - 多对多关联表 - 是否习惯在这些表中放置额外的列?