2011-01-05 3 views
3

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

Проблема заключается в том, что пользователи могут затем установить SQL Server Management Studio и потенциально использовать базу данных таким образом, чтобы ее нельзя было использовать, чего я не хочу.

Все, что я прочитал, говорит о том, что использование встроенной проверки подлинности более безопасно, но на данный момент любой пользователь может использовать Management Studio или Access/Excel только для подключения к базе данных.

Я прочитал вопрос SQL Server Authentication or Integrated Security?, в котором предлагаются некоторые обходные пути, но у меня нет возможности изменить приложение так резко, как перефакторинг всех хранимых процедур и т. Д., Поэтому я надеялся, что может быть другой вариант ?

Спасибо,

NICO

ответ

2

Все, что я прочитал, что говорит с помощью встроенной проверки подлинности является более безопасным

-> это более безопасно, таким образом, потому что это более трудно получить пароль.

Если вы используете аутентификацию SQL Server, строка подключения содержит имя пользователя и пароль. Если вы знаете, где строка соединения (часто в файле конфигурации), вы можете открыть ее и увидеть пользователя и пароль.
С другой стороны, если вы используете аутентификацию Windows, строка подключения просто говорит «Integrated Security = True», и вы подключаетесь к серверу с учетной записью Windows, с фактическим паролем, который похоронен где-то глубоко в кишках Windows и сложнее извлечения.

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

Есть некоторые обходные пути, но ни один из них не серебряная пуля:

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

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

  • Измените приложение на проверку подлинности SQL и удалите все разрешения для пользователей Windows
    (вы также можете использовать прокси-службу like Will Hughes suggested, но эффект тот же, когда приложение напрямую обращается к БД ... Дело в том, что ваши пользователи «У учетных записей Windows больше нет разрешений!)
  • Создание представлений и хранимых процедур (если они еще не существуют) для материалов, которые ваше приложение может делать с базой данных. Предоставьте разрешения пользователям использовать их и удалите разрешения для реальных таблиц.
    -> пользователи могут получить доступ к представлениям и СП с помощью других инструментов (даже если у них нет разрешений на базовые таблицы ... разрешений на представления и SP достаточно), но они не могут сделать все, что они не могут сделать в вашем приложении.
+0

Как вы разрешаете хранимой процедуре писать в базу данных? Разве он не принимает на себя права вызывающего? – noelicus

+0

SP всегда может писать в базу данных. Но пользователь может выполнить только SP, если вы позволите ему (предоставив ему разрешения «EXECUTE»). [См. Эту ссылку MSDN] (http://msdn.microsoft.com/en-us/library/bb669058.aspx) для получения дополнительной информации. –

0

Если вы не хотите, чтобы пользователи имели доступ к базе данных, не предоставляет им доступ.

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

Смежные вопросы