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

Много людей упомянуло Функциональные Языки.

, Но некоторые Обычно используемые Функциональные Языки, используемые сегодня помимо JavaScript.

Excel, SQL, XSLT, XQuery, J и K используются в финансовой области.

, Конечно, Erlang.

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

36
задан Manuel 8 September 2009 в 22:03
поделиться

3 ответа

Во-первых, я стараюсь инкапсулировать разрешения в ролях базы данных, а не прикреплять их к отдельным пользователям-принципалам. Большой выигрыш здесь заключается в том, что роли являются частью вашей базы данных, поэтому вы можете полностью создать сценарий безопасности, а затем указать типам развертывания «добавить пользователя и добавить его в эту роль», и они не борются с логикой разрешений 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 термины «интегрированная проверка подлинности»). Просто создайте пользователя с одинаковыми учетными данными (комбинация пользователь / пароль) в обоих полях. Настройте домен приложения для запуска от имени этого пользователя в веб-окне и настройте пользователя Sql Server, поддерживаемого этим принципалом, в поле sql и получите прибыль. Тем не менее, использование ролей базы данных может в значительной степени отвлечь вас от этого решения, поскольку типы развертывания должны иметь возможность обрабатывать создание пользователей sql и изменение строк подключения по мере необходимости.

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

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

41
ответ дан 27 November 2019 в 05:55
поделиться

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

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

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

6
ответ дан 27 November 2019 в 05:55
поделиться

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

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

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

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

14
ответ дан 27 November 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: