我正在寻找有关PHP和MySQL的行级安全性的示例或信息。我已经完成了基本的google reasearch,我已经阅读了有关使用视图和向表添加字段的所有帖子/文章,以指定用户有权查看对象。这些示例相当简单,需要大量配置/维护。
以下是我正在寻找的一些现实生活中的例子:
客户端数据,允许配置器用户或用户组可以查看客户端文件的全部或部分内容。对于包括报告和仪表板在内的所有应用程序功能,这必须是持久的。
员工文件,可以访问员工文件中的直接主管和人力资源,而无需在主管更改时重新配置访问权限。
我认为这应该直接从数据库层处理,但也可以应用于其他资源的示例,上传文档。
我暗示某种“过滤器”可以将我的数据传递给它,因此可以对其进行过滤。
任何有趣的文章或框架链接都会非常感激。
感谢。
答案 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。