Как настроить пользователя SQL Server для фильтрации таблиц для мультитенантного приложения

Нам необходимо создать приложение EXE, которое будет работать на сервере клиента, который обращается к нашей многопользовательской базе данных SQL.

У нас есть Column SubscriberId для каждой таблицы, которую мы используем в нашем веб-приложении, чтобы ограничить пользователей только записями, принадлежащими их SubscriberId, что отлично работает (на наших серверах).

У нас есть служба Exchange to SQL, которая работает на нашем сервере и синхронизирует контакты и встречи Exchange с нашими таблицами SQL. Проблема в том, что нам нужно, чтобы клиенты предоставили нам роль Exchange ApplicationImpersonation, чтобы мы могли получать доступ к данным на их сервере, что означает, что у нас есть доступ ко всему хранилищу их базы данных Exchange.

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

Наше приложение синхронизации - это консольное приложение C # .NET, и мы хотим адаптировать его, чтобы конечные пользователи могли устанавливать приложение на свой сервер и удаленно синхронизировать его с нашим сервером.

ВОПРОС: Возможно ли создать пользователя на SQL Server 2008R2, который имеет доступ только к строкам для этого пользователя, отфильтрованного WHERE SubscriberId = 201 (например).

Мы разрешили порт 1433 доступ к их серверу, и пользователь / пароль будут использоваться в строке подключения в App.config.

Если это так, мы можем создать панель администратора в приложении Windows exe, где они устанавливают этого пользователя / пароль SQL и своего суперпользователя Exchange. Затем они могут удаленно синхронизировать - но видеть только свои собственные записи в нашей базе данных SQL.

В противном случае, похоже, нам придется переработать приложение, чтобы использовать API и альтернативную схему безопасности. Очевидно, это было бы намного больше работы :-(

Спасибо Чарльз


person user1778402    schedule 17.03.2014    source источник


Ответы (1)


ИМХО, могу предложить следующее решение. 1. Вы создаете уникальный токен, который можно использовать для идентификации клиента с помощью некоторой конфигурации или во время запуска консольного приложения. 2. Каждый арендатор будет вызывать вашу службу, аутентифицируясь с помощью токена. 3. Только действующий арендатор может вызывать услуги. Остальные могут быть уведомлены о таких попытках. 4. Вы даже можете настроить службу и веб-службы на использование токена обновления в случае большей безопасности.

person Saravanan    schedule 28.03.2014