Изучив различные варианты создания архитектуры многопользовательской базы данных, я решил использовать '1001 * Единая база данных и одни и те же таблицы для всех клиентов, но у нас есть tenant_id во всех таблицах, поэтому мы запрашиваем данные в соответствии с подход к конкретному клиенту благодаря простоте масштабирования и обслуживания / модернизации.
Общий подход, по-видимому, заключается в том, чтобы просто включить WHERE tenant_id = $ID
для каждого запроса, однако я узнал, что вы можете дополнительно изолировать данные и избавить от необходимости включать предложение WHERE
путем реализации защиты на уровне строк.
Руководства, которые я нашел о том, как это сделать, не очень ясны. Кажется, что все они реализуют защиту на уровне строк на основе зарегистрированного пользователя базы данных, что не подойдет для моего случая, поскольку у меня только один пользователь базы данных.
Обычно, когда пользователь отправляет запрос API на наш сервер, он включает веб-токен JSON, который включает идентификатор в полезной нагрузке. Затем сервер запрашивает базу данных «пользователей» для этого идентификатора, чтобы получить пользователя orgId
(он же tenant_id
), затем, когда сервер запрашивает базу данных в соответствии с запросом API, он установит для $ID
в WHERE orgId = $ID
значение это вернуло orgId
значение.
Как реализовать безопасность на уровне строк в этом сценарии?
Я искал другие темы и не считаю, что это дублирующий вопрос.