SQL Access для веб-приложений

Справочная информация: Наша команда создает внутреннее веб-приложение для внутренней сети. Мы используем стандартный трехслойный подход. Уровень представления (веб-приложение mvc), бизнес-уровень и уровень доступа к данным.

База данных SQL используется для сохранения.

Веб-приложение / IIS обрабатывает аутентификацию пользователя (аутентификация Windows). Регистрация ведется на уровне бизнеса и доступа к данным.

Учетная запись сервиса вопросов против пользовательских учетных записей Sql: Использовать учетную запись службы / приложения: команда разработчиков предлагает настроить учетную запись службы (настроена только для приложения). Эта учетная запись службы должна иметь доступ для записи и чтения к базе данных.

Vs

Передача учетных данных пользователя в SQL ИТ-специалисты говорят, что использование служебной учетной записи (специально созданной только для приложения) для доступа к базе данных не считается наилучшей практикой. Настройте делегирование Kerberos, настроенное с веб-сервера на сервер SQL, чтобы можно было передавать учетные данные Windows конечных пользователей и создавать роль базы данных, которая предоставляет соответствующие уровни доступа к данным для конечных пользователей.

Какова лучшая практика для настройки учетных записей в SQL, где весь запрос к БД будет проходить через клиент переднего плана (то есть через уровень шины, а затем уровень данных)

2 ответа

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

Лично, если я понимаю, что вы говорите выше, я делаю больше того, о чем думает ИТ-команда (я использую Postgres). Другими словами, мое приложение развертывается через SSH с использованием данной учетной записи (скажем, это учетная запись AppName). Это означает, что мне нужно выстроить свои ключи SSH для безопасного развертывания (используя PEM или known_keys или что-то еще).

В домашнем корне для AppName у меня есть файл.pgpass, который имеет довольно специфическую безопасность (0600). Это означает, что моя учетная запись AppName будет использовать локальную безопасность для входа, а не имя пользователя / пароль.

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

В конечном итоге, подумайте, через 5 лет, как будет выглядеть ваш проект и команда. Будьте оптимистичны - возможно, это будет огромный успех! Как будет выглядеть обслуживание? Какие ошибки допустит ваша команда? Гибкость сейчас хороша, но убедитесь, что тот, кто попадет в беду, если ваша база данных имеет проблемы с безопасностью, должен принять решение.

Лучшая практика - иметь индивидуальные аккаунты. Это позволяет использовать средства базы данных для определения того, кто обращается к базе данных.

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

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

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

Другие вопросы по тегам