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

disho6za  于 4个月前  发布在  Mysql
关注(0)|答案(1)|浏览(78)

想想这个:

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

字符串
DigitalOcean documentation on how to create a new MySQL user
警告:有些用户可能想授予他们的MySQL用户ALL PRIVILEGES权限,这将为他们提供类似于root用户权限的广泛超级用户权限[.]这种广泛的权限不应该轻易授予,因为任何访问此MySQL用户的人都将完全控制服务器上的每个数据库。
我有一个面向公众的第三方应用程序,需要未知数量的权限,但我仍然希望它是安全的。假设我无法推断实际使用的权限,我可以分配给新用户的最广泛的权限集是什么,而不会成为安全隐患?是ALL PRIVILEGES还是其他?
例如,CREATE USER特权是如何工作的?假设我只能访问数据库A而不能访问B,那么拥有CREATE USER是否允许我创建一个可以访问数据库B的全新用户,从而绕过对我自己的限制?我假设没有,但我希望这能让思维过程变得清晰。

pgccezyw

pgccezyw1#

如果随机用户能够在您的数据库服务器上执行任意SQL,则没有一组特权是“安全的”。
我可以向MySQL用户授予除了USAGE之外的任何权限(即,他们可以连接,但没有其他权限),如果该用户可以执行任意SQL,他们可以关闭服务器。
因此,更重要的问题是,如何使用应用程序代码来限制可以运行哪些SQL语句?
另外,永远不要让你的数据库示例被互联网上的人直接访问。你应该使用网络基础设施(路由和防火墙)来确保只有应用服务器上的客户端可以连接到数据库。

相关问题