Использование пользователей и ролей SQL Server в качестве базы данных авторизации для веб-приложения в интрасети?

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

Я приступаю к разработке приложения интрасети ASP.NET MVC3, и в настоящее время я работаю над проектированием аутентификации и авторизации. Мы вынуждены использовать базовую аутентификацию в нашей среде, и мы используем Active Directory, поэтому об авторизации обычно заботятся. К сожалению, наша иерархия ролей / пользователей в активном каталоге не отражает то, что мне нужно для ролей в приложении, поэтому мне придется определить свою собственную.

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

Первоначально казалось, что авторизация как на стороне приложения, так и на стороне базы данных будет хорошей вещью для безопасности, а использование объектов пользователя / роли SQL Server означает, что данные пользователя и роли не нужно хранить в двух местах.

Я действительно видел некоторые потенциально актуальные обсуждения на Лучшая практика для пользователей / ролей в SQL Server для веб-приложения, но я думаю, что в целом это другой вопрос.

Спасибо!


person Adam C    schedule 23.09.2011    source источник
comment
Ух ты, неожиданно тихий ответ на этот. Подумав еще раз, я решил поискать другие методы. Я думаю, что это может сработать, но на самом деле это может стать большим риском для безопасности, и работа со всеми встроенными процедурами для изменения объектов безопасности БД кажется болью (хотя, честно говоря, я не погружался в эту документацию полностью слишком глубоко). Хотя я бы предпочел иметь приличную безопасность как в БД, так и в приложении, кажется, что с учетом обстоятельств, сосредоточение внимания в первую очередь на безопасности приложений будет приемлемым. В любом случае он должен оторваться от земли.   -  person Adam C    schedule 29.09.2011


Ответы (1)


Я рекомендую создать учетную запись sql, которую веб-приложение будет использовать для подключения к серверу sql. Таким образом, вы не олицетворяете какую-либо конкретную учетную запись AD, которая может быть удалена, отключена в будущем и может строго контролировать пользователя в SQL Server.

Затем я бы порекомендовал реализовать в вашем приложении аутентификацию на основе ролей. Это позволит вам создавать пользователей и роли, настраиваемые для вашего приложения, а затем назначать им пользователей. Таким образом, если пользователь пытается получить доступ к ресурсу, который его роль не разрешена, он не будет работать. Вот демонстрационное приложение, основанное на этом принципе http://www.codeproject.com/KB/web-security/rolesbasedauthentication.aspx.

person pilotgallo2    schedule 12.10.2011
comment
Вот еще один пример, который может помочь. weblogs.asp.net/scottgu/archive/2006/07/23/ - person pilotgallo2; 13.10.2011
comment
Это в значительной степени то, чем я закончил - person Adam C; 18.10.2011