向 MySQL/MariaDB 数据库中面向公众的应用程序授予所有权限是否安全?

问题描述 投票:0回答:1

考虑一下:

GRANT ALL PRIVILEGES ON myapp.* TO 'myapp'@'localhost' WITH GRANT OPTION;

来自 DigitalOcean 文档,了解如何创建新的 MySQL 用户

警告:某些用户可能希望授予他们的 MySQL 用户 ALL PRIVILEGES 权限,这将为他们提供类似于 root 用户权限的广泛超级用户权限 [...] 不应轻易授予此类广泛的权限,因为任何有权访问这个 MySQL 用户将完全控制服务器上的每个数据库。

我有一个面向公众的第三方应用程序,需要未知数量的权限,但我仍然希望它是安全的。假设我无法推断实际使用了哪些权限,那么在不构成安全隐患的情况下,我可以分配给新用户的最广泛的权限集是什么?是

ALL PRIVILEGES
还是别的什么?

例如,

CREATE USER
权限如何运作?假设我只能访问数据库 A 而不能访问数据库 B,那么拥有
CREATE USER
是否允许我创建一个可以访问数据库 B 的全新用户,从而绕过对自己施加的限制?我假设不是,但我希望这能让思考过程变得清晰。

mysql security mariadb
1个回答
0
投票

如果随机用户能够在数据库服务器上执行任意 SQL,则没有一组权限是“安全的”。

我只能向 MySQL 用户授予

USAGE
权限(即他们只能连接,但不能执行其他任何操作),如果该用户可以执行任意 SQL,他们就可以关闭服务器。

那么更重要的问题是,如何使用应用程序代码来限制可以运行哪些SQL语句?

而且,永远不要允许互联网上的人们直接访问您的数据库实例。您应该使用网络基础设施(路由和防火墙)来确保只有应用程序服务器上的客户端可以连接到数据库。

© www.soinside.com 2019 - 2024. All rights reserved.