1

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

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

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

员工档案,允许直接主管和 HR 访问员工档案,而无需在主管变更时重新配置访问权限。

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

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

任何有趣的链接到已经成功实现这一点的文章或框架将不胜感激。

谢谢。

4

1 回答 1

0

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

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

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

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

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

例子:

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

于 2013-12-05T20:10:57.803 回答