#database #postgresql #security #multi-tenant
#База данных #postgresql #Безопасность #многопользовательский
Вопрос:
Я разрабатываю веб-приложение для управления запасами, в котором изначально я собирался использовать единую базу данных для каждого клиента. Теперь у меня есть информация о том, что некоторые клиенты захотят некоторой настройки, поэтому им может потребоваться некоторая конкретная информация, которой может не быть в моем базовом приложении. Кроме того, некоторые клиенты могут в будущем захотеть, чтобы это приложение хранилось локально на их сервере магазина / коммерции, поэтому им может понадобиться вся их информация. Я не думаю, что производительность будет проблемой, если я использую единую базу данных, по крайней мере, не с несколькими клиентами. Однако использование базы данных для каждого пользователя может усложнить работу с точки зрения производительности при рассмотрении пулов соединений.
Итак, какой может быть лучший подход здесь? При необходимости я предоставлю дополнительную информацию.
Кроме того, если я использовал базу данных для каждого пользователя, как я буду управлять строками подключения? Если пользователь войдет в систему, как мой серверный сервер узнает, что этот пользователь должен получить доступ к определенной базе данных? Буду ли я хранить строку подключения в базе данных? Если да, не будет ли это проблемой безопасности?
Я планирую использовать postgresql и node.js для моего серверной части..
Спасибо, ребята!
Ответ №1:
Я вижу две проблемы, которые вы пытаетесь решить
-
Как можно разработать мое приложение таким образом, чтобы любой пользователь мог разместить его в своей собственной среде
Вы должны использовать одну базу данных для этого сценария, чтобы убедиться, что она легко переносима
-
Как мое приложение может поддерживать нескольких пользователей на централизованном хосте
Вы все равно должны использовать одну базу данных, но выясните, как создать различные способы хранения данных, к которым можно присоединиться на основе уникального идентификатора для каждого клиента. Это будет большим и сложным, хотя в зависимости от того, насколько различаются данные для каждого клиента. Кроме того, ваше приложение должно будет обрабатывать это динамическое состояние, поэтому проблема заключается не только в выборе базы данных, но и в том, как организовать динамические данные.
В целом, я бы не стал жонглировать строками подключения для каждого пользователя, а вместо этого оставил группу клиентов в базовой настройке (статические предопределенные модели) и выяснил, как обращаться со сложными клиентами (динамические модели) по мере их получения. В конце концов, когда у вас будет много примеров обращений, вы сможете постепенно переходить к разработке более крупного приложения, способного обрабатывать все различные обращения. Попытка разработать приложение для обработки динамических данных, которых у вас еще нет, не является тривиальной.
Комментарии:
1. Спасибо за ответ! 1 — Итак, изначально я думал о том, что, поскольку у меня была бы целая база данных для этого пользователя, было бы намного проще экспортировать их данные. Процесс будет ручным, пользователь не сможет просто сохранить приложение и данные на своем локальном компьютере, это сделает наша местная команда поддержки.
2. Да, это правильно. Я бы спроектировал приложение так, чтобы оно также было портативным. Это означает, что я бы создавал развертывания для каждого клиента, чтобы решить проблему, а не пытался решить ее в приложении позже. Таким образом, в зависимости от пользователя, вы могли бы направить их к их развертыванию.
3. 2 — Я думал о создании разных таблиц для хранения разных данных в зависимости от потребностей пользователя, но, как вы указали, это может стать очень запутанным, учитывая дизайн базы данных и приложения (мне пришлось бы обрабатывать динамическое состояние).
4. Из того, что я понял, вы предлагаете создавать экземпляры приложения для каждого пользователя, правильно?
5. Да, в значительной степени. Это приведет к переносу развертываний на любой сервер, который хотят клиенты, если они больше не хотят, чтобы вы размещали приложение и данные