想想这个:
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的全新用户,从而绕过对我自己的限制?我假设没有,但我希望这能让思维过程变得清晰。
1条答案
按热度按时间pgccezyw1#
如果随机用户能够在您的数据库服务器上执行任意SQL,则没有一组特权是“安全的”。
我可以向MySQL用户授予除了
USAGE
之外的任何权限(即,他们可以连接,但没有其他权限),如果该用户可以执行任意SQL,他们可以关闭服务器。因此,更重要的问题是,如何使用应用程序代码来限制可以运行哪些SQL语句?
另外,永远不要让你的数据库示例被互联网上的人直接访问。你应该使用网络基础设施(路由和防火墙)来确保只有应用服务器上的客户端可以连接到数据库。