3

Я начинаю строить бизнес-приложение SaaS в ASP.NET MVC2, но прежде чем я начну, я хочу создать хорошую архитектуру Фонд.Как реализовать шаблон безопасности Tenant View Filter в общей базе данных с использованием ASP.NET MVC2 и MS SQL Server

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

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

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

Что является лучшим способом для удовлетворения этого сценария?

ответ

5

Я бы также предложил использовать две базы данных, ConfigDB и ContentDB.

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

ContentDB содержат все таблицы приложений, разделенные на SID (или SUSER_ID) пользователя и доступ к каждому пользователю sql-пользователя, называемому usrTenantA, usrTenantB, usrTenantC и т. д.

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

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

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

В качестве альтернативы вы могли бы предоставить несколько серверов sql, создать базу данных контента для каждого и иметь арендаторы кода, на которых когда-либо сервер имеет самое низкое использование исторически.

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

0

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

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

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

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

BTW, для КАЖДОЙ сущности в вашей системе вам потребуется иметь полуторатонную колонку, полученную для вышеуказанной таблицы.

+1

Я собираюсь взглянуть на то, как они реализовали его в DNN, спасибо. Ну в основном то, что вы говорите, именно то, что я хотел сделать, но я также хотел, чтобы приложение олицетворяло себя как разные пользователи БД на основе этого URL-адреса. Я не думаю, что сейчас пойду с этим подходом. Я нашел еще один хороший способ реализовать это без необходимости олицетворять: http://blogs.imeta.co.uk/jyoung/archive/2010/03/22/845.aspx –

+0

Это хорошая информационная ссылка. Это требует, чтобы пользователь db привязывался к вашей таблице арендаторов, но я думаю, что это может быть предпочтительный способ сделать что-то. Интересным преимуществом идеи jyoung является то, что вы можете зашифровать данные с помощью специальных сертификатов ... Мне нужно будет провести некоторое исследование. Спасибо за ссылку – NotMe