PHP MySQL行级安全性

时间:2013-09-11 15:33:26

标签: mysql security authorization

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

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

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

员工文件,可以访问员工文件中的直接主管和人力资源,而无需在主管更改时重新配置访问权限。

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

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

任何有趣的文章或框架链接都会非常感激。

感谢。

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

示例:

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