在Redis中有一个身份验证功能,还有不同的数据库是可能的,但这些功能能以安全的方式结合起来吗?从MySQL中我知道有一个用户管理系统,多个用户可以有多个密码,并且可以对只有一个数据库的权限。出于安全原因,我希望Redis也能类似,因为目前我可以使用requirepass,但我必须将其添加到每个想要连接到Redis的应用程序中。(至少有没有一种方法可以使用多个密码来使用requirepass? 我可以使用一个应用程序连接到一个数据库,但据我所知,这个应用程序也可以切换到另一个数据库。(我至少可以以某种方式防止这种切换吗?)出于性能原因,我想避免并行运行多个Redis实例。
我会从结尾开始:出于性能原因,我希望避免同时运行多个Redis实例。事实上恰恰相反——由于Redis(大多数情况下)是单线程的,同时运行多个实例正是如何提高服务器利用率和性能的。Redis数据库的概念(也称为共享数据库或编号数据库)与SQL领域不同。Redis的数据库更像命名空间,并且除了共享同一个线程之外,它们还共享所有配置——包括身份验证密码。因此,答案是否定的,您不能为每个数据库设置不同的密码。有关为什么应优先使用专用Redis数据库的更多详细信息,请参阅:https://redislabs.com/blog/benchmark-shared-vs-dedicated-redis-instances。
从 Redis 6.0 开始,我们可以通过 ACL 的帮助实现这一点。 ACL SETUSER user1 on >password +@all ~* -select +select|1 请注意,用户只能访问数据库-1。 -select 限制了用户切换数据库。 此外,您可以使用相同的命令进行更严格的限制,例如授予对特定前缀的权限等。 ACL SETUSER user1 on >password ~prefix.:* +@all