Подтвердить что ты не робот

Лучшая практика для пользователей/ролей на SQL Server для веб-приложения

Я искал в Интернете немного и не мог найти ничего, что действительно прибило бы место или покрывало базы, как идти о настройке пользователей/ролей в базе данных.

В принципе, был бы пользователь, который будет использоваться для доступа к базе данных из приложения (в этом случае веб-приложение), которому потребуется доступ к базе данных для регулярных операций с базой данных (выбор, вставка, обновление, удаление) и выполнение хранимые процедуры (с помощью exec для запуска хранимых процедур в других хранимых процедурах /UDF ).

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

В настоящее время у меня есть среда разработки, в которой мы не очень хорошо справляемся с безопасностью (приложение использует пользователя с ролью db_owner, хотя это приложение для интрасети). Несмотря на то, что это приложение для интрасети, мы все еще помним о безопасности и хотели бы узнать, какие способы создания пользователями/роли для этого типа среды создаются разработчиками.

EDIT: веб-приложение и SQL Server находятся на разных машинах.

EDIT: Забыл упомянуть, что используется ORM, для которого необходим прямой доступ для чтения/записи.

Вопрос: Каковы "лучшие практики" по настройке пользователя для доступа к приложениям? Какие роли будут применяться и каковы некоторые из уловов?

4b9b3361

Ответ 1

Во-первых, я склонен инкапсулировать разрешения в ролях базы данных, а не присоединять их к принципам одного пользователя. Большая победа здесь состоит в том, что роли являются частью вашей базы данных, поэтому вы можете полностью защитить script, а затем сообщить типам развертывания, чтобы "добавить пользователя и добавить его в эту роль", и они не борются с разрешениями boogey SQL. Кроме того, это держит все в чистоте, чтобы вы не могли развиваться в режиме db_owner и чувствовать себя намного лучше о себе, а также о том, как вы играете и вообще избегаете каких-либо проблем.

В качестве применения разрешений для этой роли я склоняюсь к расширению сети в эти дни, особенно если вы используете ORM и управляете безопасностью через приложение. В терминах T-SQL это выглядит так:

GRANT SELECT, UPDATE, INSERT, DELETE, EXECUTE on SCHEMA::DBO to [My DB Role]

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

Еще одна вещь, которую следует учитывать для SQL 2005+, - использовать схемы базы данных для защиты групп объектов. Теперь большой трюк заключается в том, что многие ORM и средства миграции им не нравятся, но если вы предоставили приложение по умолчанию [dbo] для приложения, вы можете использовать альтернативные схемы для специального защищенного материала. Например, создайте схему ADMIN для специальных, жестоких процедур очистки базы данных, которые должны запускаться администраторами вручную. Или даже отдельная схема для специальной, очень защищенной части приложения, которая требует более подробных разрешений БД.

Поскольку проводка у пользователей, у которых есть отдельные блоки, даже без домена, вы можете использовать проверку подлинности Windows (в интегрированной аутентификации Sql Server). Просто сделайте пользователя с одинаковыми учетными данными (коммандой user/pass) в обоих случаях. Настройте домен приложения для запуска в качестве этого пользователя в веб-поле и настройте пользователя сервера Sql, поддерживаемого этим директором, в поле sql и получите прибыль. Тем не менее, использование ролей базы данных может в значительной степени развести вас с этим решением, так как типы развертывания должны иметь возможность обрабатывать создание пользователей SQL и изменять строки подключения по мере необходимости.

Ответ 2

В течение долгого времени руководство SQL Server для доступа к базе данных приложения должно было изолировать доступ к данным в хранимые процедуры, групповые процедуры в схему и предоставить выполнение схемы на принципе, используемом приложением. Цепочка собственности гарантировала бы доступ к данным для вызывающих процедур. Доступ можно проверить, проверив хранимые процедуры. Это простая модель, которую легко понять, спроектировать, развернуть и управлять. Использование хранимой процедуры может использовать подписание кода, самый гранулярный и мощный метод контроля доступа, и единственное, что является очевидным (подпись теряется, если процедура изменена).

Проблема заключается в том, что каждый бит технологии, исходящей от дизайнеров Visual Studio, летит перед лицом этой рекомендации. Разработчикам представлены модели, которые просто трудно использовать исключительно с хранимыми процедурами. Разработчики любят сначала разрабатывать свои модели классов и генерировать структуру таблиц из логической модели. Руководства, основанные на процедурах, вновь подтверждают, что процедуры существуют, прежде чем писать первую строку приложения, и это фактически проблематично в развитии благодаря итеративному способу современного развития. Это не является неразрешимым, если руководство группы осознает проблему и обращается к ней (т.е. Готовятся процедуры, даже как макеты, когда начинается цикл dev).

Ответ 3

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

Предоставлять только этот статус для зарегистрированных пользователей. Не допускайте прямого чтения/записи таблицы. Если вам нужно что-то прочитать из таблицы, напишите proc. Если вам нужно записать данные, напишите еще один файл.

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