Вопрос или проблема
У меня есть одно мобильное приложение на Android с белой меткой, которое может быть создано для примерно 30 клиентов с уникальными функциями (все эти приложения имеют уникальный идентификатор приложения). Все эти приложения подключаются к проекту Firebase с единой RTDB. Данные клиентов в базе данных разделяются по корневым узлам, названным именами клиентов.
Вопрос в том, как я могу ограничить доступ к данным по клиентам без аутентификации, используя только идентификаторы приложений? Может быть, имеет смысл разделить данные клиентов на отдельные базы данных? Сколько RTDB можно создать для одного проекта?
Ответ или решение
Для управления доступом к данным в Firebase Realtime Database (RTDB) в случаях, когда у вас есть несколько клиентов, имеющих собственные функции в белом ярлыке Android-приложении, и вы хотите ограничить доступ к данным без использования аутентификации, но с использованием уникальных идентификаторов приложений (app-id), можно рассмотреть несколько подходов.
1. Структура базы данных
Ваши данные уже распределены по корневым узлам с именами клиентов. Это разумный подход, так как он позволяет четко разделить данные каждого клиента. Однако, используемая вами система доступа к данным должна учитывать, что вам нужно ограничить доступ к этим данным по app-id.
2. Правила безопасности
Использование правил безопасности в Firebase – это первый шаг, который необходимо сделать для ограничения доступа к данным. Вы можете настроить правила таким образом, чтобы данные каждого клиента были доступны только приложениям с определенными app-id. Пример правил безопасности может выглядеть так:
{
"rules": {
".read": "root.child(auth.uid).exists()",
".write": "root.child(auth.uid).exists()",
"clients": {
"$client_id": {
".read": "auth.token.app_id === $client_id",
".write": "auth.token.app_id === $client_id"
}
}
}
}
Однако, поскольку у вас нет аутентификации, это ограничение невозможно реализовать напрямую с помощью правил безопасности Firebase.
3. Разделение баз данных
Если вы не можете применить аутентификацию и хотите ограничить доступ по app-id, разумной альтернативой может быть создание отдельных баз данных для каждого клиента. Однако стоит учесть, что количество баз данных в одном проекте Firebase может быть ограничено.
На момент написания, Google разрешает создавать до 200 баз данных в одном проекте Firebase. Это означает, что при 30 клиентах вы можете создать 30 отдельных баз данных, что упростит процесс управления доступом. Каждое приложение будет нацелено на свою собственную базу данных, что значительно снижает риск несанкционированного доступа к данным других клиентов.
4. Архитектура приложения
При использовании нескольких баз данных, вам нужно будет обновить архитектуру вашего приложения, чтобы оно знало, к какой базе данных подключаться в зависимости от app-id. Это повысит уровень безопасности данных и упростит управление ими.
Вывод
Ваша текущая структура данных с разделением по корневым узлам является хорошим началом, но для реального ограничения доступа без аутентификации, создание отдельных баз данных для каждого клиента может стать оптимальным решением. Это обеспечит безопасность данных, упростит управление и позволит каждому клиенту полностью контролировать свои данные без риска доступа со стороны других клиентов.