mysql - PHP MySQL 行级安全性

标签 mysql security authorization

我正在寻找有关 PHP 和 MySQL 的行级安全性的示例或信息。我已经完成了基本的谷歌研究,我已经阅读了所有关于使用 View 和向表中添加字段以指定哪些用户有权查看对象的帖子/文章。这些示例相当简单,需要大量配置/维护。

以下是我正在寻找的一些现实生活中的例子:

客户端数据,允许配置哪些用户或用户组可以查看全部或部分客户端文件。对于包括报告和仪表板在内的所有应用程序功能,这必须是持久的。

员工文件,授予直接主管和 HR 访问员工文件的权限,而无需在主管更改时重新配置访问权限。

我认为这应该直接从数据库层处理,但也可以应用于其他资源,例如示例、上传的文档。

我在暗示某种“过滤器”,我可以将我的数据传递到其中,以便对其进行过滤。

任何指向已成功实现此功能的文章或框架的有趣链接都将不胜感激。

谢谢。

最佳答案

您需要使用 MariaDB 来执行此操作,因为 MySQL 不执行 ROLE,尽管您可能能够使用 GRANT PROXY 来完成您在 MySQL 中想要的操作。

我认为不同的“租户”,即付费客户,应该在不同的数据库中,以避免泄漏。您可以使用脚本来自动执行此操作。

但是如果您想要公司内部的行级安全性,您可以通过为每个表添加一个额外的列以及一些 View 和触发器来实现。

创建一个包含所有者列的表。使用插入触发器将所有者设置为当前用户。撤销对表的所有权限。

在该表上创建一个 WITH CHECK OPTION View ,检查当前用户是否处于与所有者匹配的角色。授予对 View 的所有权限。

例子:

create user `pointyHead`;
create user `dilbert`;

create role `manager`;
create role `minion`;

grant manager to pointyHead;
grant minion to dilbert;
grant minion to manager;

不确定是否有检查用户是否在角色中的功能,但您始终可以使用 information_schema.applicable_roles。

您可以使用列级授权为不同的用户授予不同的列权限。 http://dev.mysql.com/doc/refman/5.5/en/grant.html#grant-column-privileges .

关于mysql - PHP MySQL 行级安全性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18745431/

相关文章:

sql - MySql 复合键和空值

php - Mysql设置值相对于其他值?

mysql - 使用循环向 mySQL 表添加列

security - 如何跟踪 ubuntu 服务器上的恶意软件来源并阻止它

c++ - 使用 MysqlConnector/C 还是 MysqlConnector/C++?

ios - Apple 是否强制要求通过 SSL 进行授权?

c# - 在C#中实现 "cloud saving"

asp.net-mvc - 为什么模型绑定(bind)比过滤器更早发生

authorization - Apollo 客户端 + Next.js - 向客户端请求添加授权 token

javascript - 从 javascript 调用操作方法时 Asp、Net MVC 应用程序的安全问题