Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅在MySQL/MariaDB中将命令限制为过程_Mysql_Security_Permissions_Mariadb_Fivem - Fatal编程技术网

仅在MySQL/MariaDB中将命令限制为过程

仅在MySQL/MariaDB中将命令限制为过程,mysql,security,permissions,mariadb,fivem,Mysql,Security,Permissions,Mariadb,Fivem,我使用大量公共代码组装了一个FiveM服务器,发现有一些作弊系统允许用户破坏或删除底层数据库。原因是他们可以注入Lua脚本,其中可以包含DROP、DELETE、INSERT和UPDATE,如果他们知道模式可能会做任何他们喜欢的事情 我的意图是拒绝对每个命令的访问,除了选择并将所有其他逻辑移动到存储过程之外。问题是,执行进程的用户将是游戏用户帐户,如果被锁定,该帐户也将被服务器端阻止?我是否能够拒绝调用应用程序的访问,但允许从存储过程中进行访问,或者让过程作为不同的帐户执行,而不是使用普通的SEL

我使用大量公共代码组装了一个FiveM服务器,发现有一些作弊系统允许用户破坏或删除底层数据库。原因是他们可以注入Lua脚本,其中可以包含DROP、DELETE、INSERT和UPDATE,如果他们知道模式可能会做任何他们喜欢的事情


我的意图是拒绝对每个命令的访问,除了选择并将所有其他逻辑移动到存储过程之外。问题是,执行进程的用户将是游戏用户帐户,如果被锁定,该帐户也将被服务器端阻止?我是否能够拒绝调用应用程序的访问,但允许从存储过程中进行访问,或者让过程作为不同的帐户执行,而不是使用普通的SELECT语句?是否有其他考虑因素或设计可以工作?我将在所有调用中使用参数来帮助防止注入,但我对MySQL还比较陌生,所以我想知道人们在这些场景中还采取了哪些其他步骤。

是的,您可以授予MySQL用户只调用过程的特权。然后,这些过程以定义该过程的用户的权限执行

阅读有关
SQL安全性的部分,其中有
DEFINER
INVOKER
选项。默认值为
DEFINER
,这是您想要的

但是,您还需要拒绝应用程序用户的选择权限。恶意用户只能使用SELECT权限导致问题。它们无法更改数据,但会使数据库服务器过载

因此,您需要在存储过程集合中实现每个数据库查询,包括读取和写入

这里有一个替代建议:允许应用程序像今天一样工作,应用程序使用其用户名进行连接,并直接执行SQL查询


但是,如果用户希望调用他们的Lua脚本,则只允许在单独的数据库连接上使用具有有限权限的其他MySQL用户调用。基本上只有特定模式上的
EXECUTE
权限。您可以实现一组允许Lua脚本运行的存储过程,并将它们放在该模式中。然后,Lua脚本无法执行应用程序执行的其他任务,Lua脚本只能运行您希望允许它们运行的有限程序集。

谢谢。可能让我们失望的用户lua脚本是恶意注入的脚本,整个角色扮演框架从lua运行mysql命令。我想我需要一种方法来知道哪些电话可能是“已知和可信”的。我想我可以制作一个FiveM代理资源,在这里我可以将解决方案中的所有命令移动到。默认的mysql异步资源可以在访问受限的连接上调用任何东西,但是新资源中的可信命令将在另一个连接上运行。这可能是一个教育机会。你认为允许客户端上传代码函数,然后在你的服务器上一字不差地运行它们是一种好的软件设计吗?不,我确实明确说过“恶意注入”。我们不会让人们通过设计来运行他们自己的东西。我甚至在最初的问题中说“有一些作弊系统允许用户破坏或删除底层数据库”,这也不是我们的意图,而是我们试图防范的东西。我们的服务器上有一个防作弊系统,可以防范攻击,但它不是100%完美的。我们并不是故意允许这样做,但昨晚我们发现有人使用了一个强大的作弊系统,他们有能力注入自己的资源并运行自己喜欢的任何SQL语句。我不想单纯依赖于反作弊,而是想调查我们是否可以通过设计一些保护技术来强化我们的内部代码以抵御攻击,以满足可能出现漏洞的情况。我们没有附带编写游戏客户端,只是定制了后端服务器。我们受游戏客户端漏洞的摆布。