Как реализовать рисунок безопасности фильтра Filter View в общей базе данных с использованием сервера ASP.NET MVC2 и MS SQL

StackOverflow https://stackoverflow.com/questions/3567184

Вопрос

Я начинаю построить линию бизнес-приложения SaaS в ASP.NET MVC2, но прежде чем я начну, я хочу установить хорошую архитектуру фонда.

Я иду к общую базу данных и общий схеменный подход, потому что архитектура данных и бизнес-логика будут довольно простыми, а эффективность, а также эффективность затрат является ключевыми вопросами.

Чтобы обеспечить хорошую изоляцию данных между арендаторами, я хотел бы реализовать шаблон безопасности фильтра редактора Арендатора (посмотрите здесь). Чтобы сделать то, что мое приложение должно оказаться смягчать различных арендаторов (дБ логинов) на основе пользователя, который входит в систему в приложение. Процесс входа в систему должен быть максимально простым (он не собирается быть программным обеспечением Enterprise Class) - поэтому клиент должен ввести только имя пользователя и пароль.

Пользователи будут получать доступ к своим данным через свой собственный поддеменный (используя маршрутизацию поддоменов), как http://tenant1.myapp.com. или http://tenant2.myapp.com.

Какой лучший способ встретиться с этим сценарием?

Это было полезно?

Решение

Я также предлагал использовать две базу данных, конфигурацию и ContentDB.

ConfigDB содержит таблицу арендатора и имя хоста, база данных имени пользователя и пароль SQL базы данных контента для каждого из арендаторов в этой таблице и доступна через отдельный пользователь SQL, называемый USRADMIN

ContentDB содержит все таблицы приложений, сегментированные на SID (или SUSER_ID) пользователя и является доступом каждыми арендаторами SQL пользователем usrtenanta, usrtenantb, usrtenantc и т. Д.

Чтобы получить данные, вы подключаетесь к конфигурации в качестве администратора, извлеките учетные данные для соответствующего клиента, подключитесь к серверу, используя полученные учетные данные, а затем запрашивать базу данных.

Причины, по которым я это сделал, предназначен для горизонтальной масштабируемости и способности изолировать клиентов по требованию.

Теперь вы можете иметь много ContentDbs, возможно, с каждым десятью арендаторами, которые зарегистрируются, вы создаете новую базу данных, и настройте свое приложение, чтобы начать предоставление клиентов в этой базе данных.

В качестве альтернативы вы можете обеспечить несколько серверов SQL, создайте контент DB на каждом и иметь арендаторов данных, на котором Exere Server имеет наименьшее использование исторически.

Вы также можете принять все ваши постоянные клиенты на сервере A и B, но сервер C может иметь арендаторы в своих собственных индивидуальных базах данных, все мультитансированные код все еще там, но эти клиенты могут быть сказаны, что теперь они более безопасны из-за более высокой изоляции Отказ

Другие советы

Самый простой способ состоит в том, чтобы иметь таблицу арендаторов, которые содержат поле URL, которое вы соответствуете за все запросы.

Если арендатор может иметь несколько URL, то просто есть дополнительная таблица, такая как Tenantalias, которые поддерживают несколько URL для каждого арендатора.

Кэш этой таблицы веб-сторона, поскольку она будет сильно удариться; Недействительный кэш всякий раз, когда значение изменяется.

Вы можете посмотреть на Dotnetnuke. Это CMS с открытым исходным кодом, который реализует эту точную модель. Я использую модель в паре наших приложений у него работает хорошо.

Кстати, для каждого объекта в вашей системе вам понадобится, чтобы столбец Tenantid приобретена для приведенной выше таблицы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top