限制DB中的表,用户可以在Laravel中运行查询

时间:2017-01-05 10:00:12

标签: php mysql database laravel

我正在使用Laravel创建一个应用程序,它包含用户,项目,user_items等“服务”表。

另外,我有表格,我需要允许用户运行他们的查询。也就是说,用户将他的查询发送到服务器并在那里运行。

问题是:我想允许用户只运行SELECT查询并禁止运行UPDATE,INSERT和DELETE。 此外,我需要允许仅在明确的表上运行这些查询。也就是说,不允许用户从用户表中进行选择。

用户将运行原始查询,即DB:raw()将被使用。

我怎样才能在Laravel中做到这一点?

其中一个解决方案是创建两个数据库:MYSQL和sqlite,并允许用户仅使用sqlite运行查询,但在这种情况下测试会出现问题。

1 个答案:

答案 0 :(得分:1)

您需要使用GRANT和REVOKE命令。首先按照文档中的概述创建用户

CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'mypass';
GRANT SELECT ON db1.* TO 'jeffrey'@'localhost';

然后一个一个地撤销多余的

REVOKE SELECT ON db1.tablename FROM 'jeffrey'@'localhost'

你必须在每张桌子上这样做。因此,一种选择是编写一个在循环中执行它的PHP脚本