Разные базы данных Redis с разными паролями?
В Redis есть функция аутентификации, а также возможны разные базы данных, но можно ли эти функции безопасно комбинировать?
Из MySQL я знаю, что есть управление пользователями с несколькими пользователями, которые могут иметь несколько паролей и могут иметь разрешения только для одной базы данных.
По соображениям безопасности я бы хотел, чтобы в Redis он был похожим, потому что в настоящее время я могу использовать requirepass
, но я должен добавить его к каждому приложению, которое все равно хочет подключиться к redis. (Есть ли способ использовать несколько паролей для requirepass
?
И я могу подключиться к одной базе данных с приложением, но AFAIK это приложение может также просто переключиться на другую базу данных. (Могу ли я хоть как-то предотвратить этот переход?)
Из соображений производительности я хочу избежать параллельного запуска нескольких экземпляров redis.
3 ответа
Начну с конца:
Из соображений производительности я хочу избежать параллельного запуска нескольких экземпляров 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
Нет, но redis настолько легок, что вы просто запускаете разные экземпляры на разных портах. Вы сказали, что не хотите "по соображениям производительности", но это спорный вопрос - пустой redis практически не требует памяти и почти никакого процессора.