我正在使用Laravel创建一个应用程序,它包含用户,项目,user_items等“服务”表。
另外,我有表格,我需要允许用户运行他们的查询。也就是说,用户将他的查询发送到服务器并在那里运行。
问题是:我想允许用户只运行SELECT查询并禁止运行UPDATE,INSERT和DELETE。 此外,我需要允许仅在明确的表上运行这些查询。也就是说,不允许用户从用户表中进行选择。
用户将运行原始查询,即DB:raw()将被使用。
我怎样才能在Laravel中做到这一点?
其中一个解决方案是创建两个数据库:MYSQL和sqlite,并允许用户仅使用sqlite运行查询,但在这种情况下测试会出现问题。
答案 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脚本