在Redis中有一个身份验证功能,也可以使用不同的数据库,但这些功能可以安全地组合在一起吗?
从MySQL我知道有一个用户管理,多个用户可以有多个密码,并且只能对一个数据库拥有权限。
出于安全考虑,我希望Redis中也有类似的功能,因为目前我可以使用requirepass
,但我必须将其添加到每个应用程序中,这些应用程序无论如何都想连接到Redis。(至少有一种方法可以为requirepass
使用多个密码吗?
我可以用一个应用程序连接到一个数据库,但AFAIK这个应用程序也可以切换到另一个数据库。(我至少可以以某种方式阻止这种切换吗?)
出于性能原因,我希望避免并行运行redis的多个实例。
我将从最后开始:
出于性能原因,我希望避免并行运行redis的多个实例。
事实恰恰相反——由于Redis(主要)是单线程的,因此并行运行多个实例正是提高服务器利用率和性能的方法。
Redis数据库(也称为共享数据库或编号数据库)的概念与SQL域的概念不同。Redis的数据库更像是命名空间,除了共享同一个线程外,它们还共享所有配置——包括身份验证密码。
所以答案是否定的,你不能为每个数据库设置不同的密码。有关您为什么更喜欢专用Redis数据库的更多详细信息,请参阅:https://redislabs.com/blog/benchmark-shared-vs-dedicated-redis-instances
没有,但redis非常轻量级,您只需在不同的端口上启动不同的实例。你说过"出于性能原因"不想这样做,但这是没有意义的——一个空的redis几乎不占用内存,也几乎不占用cpu。
从redis 6.0我们可以在ACL 的帮助下实现这一点
ACL SETUSER user1 on >password +@all ~* -select +select|1
- 请注意,此处用户只能访问数据库-1
- -select限制用户切换数据库
此外,您可以使用相同的命令进行更严格的限制,例如允许使用某些前缀等。
ACL SETUSER user1 on >password ~prefix.:* +@all