不同的Redis数据库有不同的密码吗?

3
在Redis中有一个身份验证功能,还有不同的数据库是可能的,但这些功能能以安全的方式结合起来吗?
从MySQL中我知道有一个用户管理系统,多个用户可以有多个密码,并且可以对只有一个数据库的权限。
出于安全原因,我希望Redis也能类似,因为目前我可以使用requirepass,但我必须将其添加到每个想要连接到Redis的应用程序中。(至少有没有一种方法可以使用多个密码来使用requirepass
我可以使用一个应用程序连接到一个数据库,但据我所知,这个应用程序也可以切换到另一个数据库。(我至少可以以某种方式防止这种切换吗?)
出于性能原因,我想避免并行运行多个Redis实例。
3个回答

5
我会从结尾开始:
出于性能原因,我希望避免同时运行多个Redis实例。事实上恰恰相反——由于Redis(大多数情况下)是单线程的,同时运行多个实例正是如何提高服务器利用率和性能的。
Redis数据库的概念(也称为共享数据库或编号数据库)与SQL领域不同。Redis的数据库更像命名空间,并且除了共享同一个线程之外,它们还共享所有配置——包括身份验证密码。
因此,答案是否定的,您不能为每个数据库设置不同的密码。有关为什么应优先使用专用Redis数据库的更多详细信息,请参阅:https://redislabs.com/blog/benchmark-shared-vs-dedicated-redis-instances

好的,还有一个问题。当在另一个用户下执行Redis时,我认为它不能再是单线程了。这样对吗? - rugk
每个启动的 Redis 进程(服务器)都是单线程的(再次强调,大多数情况下磁盘 I/O 是被卸载的)。您可以在相同的用户或不同的用户下启动它们 - 除非服务器强制执行每个用户的资源配额,否则这是无关紧要的。 - Itamar Haber

0
不需要,但是Redis非常轻量级,你可以在不同的端口上启动不同的实例。你说你不想这样做是因为性能问题,但这是无关紧要的——一个空的Redis几乎不占用内存和CPU资源。

0

从 Redis 6.0 开始,我们可以通过 ACL 的帮助实现这一点。

ACL SETUSER user1 on >password +@all ~* -select +select|1
  • 请注意,用户只能访问数据库-1。
  • -select 限制了用户切换数据库。

此外,您可以使用相同的命令进行更严格的限制,例如授予对特定前缀的权限等。

ACL SETUSER user1 on >password ~prefix.:* +@all

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接