#asp.net #multi-tenant
#asp.net #многопользовательский
Вопрос:
Наше требование — иметь многопользовательскую отдельную архитектуру базы данных для ASP.Веб-сайт Net. Для каждого клиента будет отдельная база данных, и в зависимости от идентификатора пользователя во время выполнения должно быть решено, какую базу данных подключить. Код уже находится в рабочей среде, и я не хочу добавлять столбец TenantId в каждую таблицу и вносить аналогичные изменения в код .Сетевой код. Существует ли решение, в котором мы можем создавать разделы в базе данных SQL Server, а пользовательский интерфейс должен динамически подключаться к соответствующему разделу. На данный момент подход, который я имею в виду, заключается в том, чтобы кэшировать все строки подключения и, в зависимости от клиента, выбирать ConnString во время выполнения.
Ответ №1:
Это может быть немного запоздало, в зависимости от того, как далеко вы продвинулись в создании своего решения, но вы могли бы взглянуть на следующие фреймворки:
- https://scale.bluesyntax.net (в бета-версии; руководства и документацию можно найти здесь: https://scale.bluesyntax.net/About.aspx )
- Облачный ниндзя (пример кода) вhttp://cloudninja.codeplex.com /
Одна вещь, которую вы можете легко сделать, это объединить несколько клиентов в одной базе данных и связать каждого клиента с другой схемой; каждому идентификатору пользователя можно присвоить схему и назначить достаточно прав для правильной схемы. В зависимости от вашей ситуации это может иметь смысл. Будете ли вы использовать Windows Azure / SQL Azure?
Причина, по которой я спрашиваю о SQL Azure, заключается в том, что подготовка новых клиентов становится намного проще, поскольку это может быть выполнено программно.
Ответ №2:
Если вы хотите работать с данным решением, вам понадобится центральная база данных пользователей и основных учетных записей. В таблице основных учетных записей будут храниться идентификатор клиента и строка подключения. В таблице Users будут храниться имя пользователя, пароль и FK для идентификатора клиента.
Вы входите в центральную базу данных (которая всегда является статической строкой подключения). После вы сможете объединять свои таблицы и иметь строку подключения для главной учетной записи.