При развертывании веб-приложений (.net) в производственной среде лучше использовать интегрированную безопасность или это вообще имеет значение?
Мне кажется, что если хакер сломает веб-сервер, это не имеет особого значения, поскольку они могут легко выдать себя за машину.
Мысли?
Я бы сказал, что есть только две веские причины использовать аутентификацию SQL:
В предлагаемом вами сценарии (хост веб-сервера полностью скомпрометирован) вас ничто не защитит. Хакер может сделать на сервере БД как минимум все, что может делать веб-сервер. И я бы сказал, что глубокая защита может научить вас минимизировать потери в таком случае: уменьшите права БД учетной записи, используемой веб-сервером ur, до абсолютно необходимого минимума и не более того. Во-вторых, убедитесь, что если хост веб-сервера скомпрометирован, его нельзя использовать для повышения привилегий выше, чем учетная запись веб-сервера (т. Е. На хосте WWW нет другой службы, которая использует учетные данные с более высокими привилегиями в БД, чем учетная запись WWW). Это основные принципы безопасности, которые не имеют ничего общего с используемой схемой аутентификации.
Хотя sql auth по сравнению с Windows auth не дает явных преимуществ в вашем сценарии, есть и другие проблемы, которые следует учитывать:
И последнее замечание: протокол TDS предоставляет пароль sql auth в виде открытого текста поверх трафика, но это обычно смягчается запросом SSL-шифрования трафика.
Итак, почему вы все еще видите хосты WWW sql auth, которые хранят пароль в открытом виде в web.config? Это те плохой разработчики / администраторы, не будьте одним из них.
msdn.microsoft.com/en-us/library/aa378326(VS.85).aspx
technet.microsoft.com/en-us/library/ms189067.aspx
Другие ответы пока были хорошими, но я добавлю еще один: менеджмент.
Рано или поздно вы, вероятно, получите несколько серверов SQL. Управление аутентификацией SQL между вашим приложением и несколькими серверами SQL может быть немного болезненным, особенно когда вы сталкиваетесь с проблемами безопасности. Если вы измените пароль аутентификации Windows один раз, он сразу же изменится на всех ваших серверах. Если вам нужно поменять пароли аутентификации SQL, это более болезненно - до такой степени, что вы, вероятно, вообще не будете этого делать. Это угроза безопасности.
Если вы не используете SSPI, вы жестко кодируете имя пользователя и пароль в исходных файлах.
Если вы жестко закодируете имя пользователя и пароль в исходных файлах, все ваши сотрудники будут иметь к ним доступ.
Это относительно небезопасно. Недовольный бывший сотрудник мог использовать информацию злонамеренно. Посетитель может увидеть код где-нибудь на экране. Или исходный код может случайно оказаться на свободе.
Преимущество SSPI в том, что пароль никогда не хранится в открытом виде.
Я не уверен здесь на 100%, но я думаю, что главное в том, что аутентификация SQL небезопасна, поэтому лучше использовать аутентификацию Windows. В зависимости от того, как настроено ваше приложение, вы также можете сохранить соответствующие учетные данные в зашифрованном виде на компьютере с помощью Windows auth. Я не думаю, что это действительно возможно с аутентификацией SQL. Вы можете запутать это, но в конечном итоге это должно быть открыто.
Кроме того, то, что хакер может проникнуть на сервер, не означает, что игра окончена. Хакер может получить контроль над непривилегированным процессом, но больше ничего не делать на сервере. Вот почему важно не запускать все от имени администратора или системы, а вместо этого использовать учетные записи служб с минимальными привилегиями.
Лучше всего ограничить их действия, если / когда они проникнут на веб-сервер. Это означает предоставление только тех прав SQL, которые необходимы приложению для работы. Намного проще дать приложению права DBO, но это делает его БД гораздо более уязвимым в случае успешной атаки на веб-сервер.
Я собираюсь предварить все это, сказав, что я предполагаю, что вы говорите о внутреннем веб-сервере во внутренней частной сети.
Начнем с олицетворения машины. Если удостоверение пула приложений - это сетевая служба и в приложении .NET нет олицетворения, тогда да, веб-приложение будет подключаться к внутреннему серверу SQL Server, используя учетную запись компьютера компьютера. И это будет означать, что вы предоставили доступ к указанной учетной записи компьютера. CRM от Microsoft работает именно так.
Однако, если вы указали удостоверение, этой учетной записи пользователя потребуется доступ к SQL Server. Хотя вы правы в том, что если злоумышленник скомпрометировал веб-сервер, он фактически имеет тот же доступ, что и учетная запись удостоверения, правда в том, что использование входа в систему SQL Server здесь ничего не меняет. Получив доступ, я могу изменить веб-приложение так, чтобы оно выполняло то, что я хочу, и оно будет делать, насколько это позволяет ваша безопасность на внутреннем SQL Server.
Теперь о том, зачем использовать SSPI. Прежде всего, вы не используете логин на основе SQL Server. Это означает, что Active Directory - единственный источник безопасности. Это означает, что у вас есть обычные средства аудита для определения недопустимого доступа. Во-вторых, это означает, что, если это не требуется для других приложений, вы можете оставить свой SQL Server в режиме только проверки подлинности Windows. Это означает, что вход в систему SQL Server запрещен. Это означает, что любые атаки на sa останавливаются еще до их начала. И, наконец, это облегчает восстановление. Если вы используете логин на основе SQL Server, вам необходимо извлечь логин с SID и зашифрованным паролем. Если вы используете учетную запись пользователя на базе Windows в качестве «служебной учетной записи», когда вы переходите на новый SQL Server, создавая логин, все будет повторно подключено после восстановления базы данных, поскольку идентификаторы безопасности будут совпадать между логином и пользователем базы данных. .
Вопрос в том, что «лучше»? На этот вопрос сложно ответить, поскольку он зависит от контекста, ценностей и приоритетов вопрошающего.
Лично мне нравится SQL auth.
Последний пункт: вы кодируете свой класс диспетчера соединений, чтобы попробовать каждую строку подключения, таким образом вы можете изменить пароль на первом в конфигурации, подтолкнуть изменение, и он переключится на второе соединение, затем вы обновите пароль на MSQL и снова будет использован первый. Последнее изменение конфигурации необходимо, чтобы второй пароль был таким же, как и первый, и был готов к следующему разу.
Если пользователи не будут манипулировать базой данных напрямую (с помощью других клиентских инструментов, таких как SQL Server Management Studio), я обычно просто создаю единую учетную запись SQL для приложения и предоставлю ему необходимый доступ. В этот момент пользователь ограничен в своих действиях, как это разрешено интерфейсом веб-приложения.