Ускорьте стратегию для SQL Server, когда EXECUTE AS используется для безопасности - PullRequest
0 голосов
/ 07 июля 2011

Я только начал смотреть на систему, которая реализует защиту немного иначе, чем норма.

Они создают нового пользователя SQL для каждого пользователя системы (которых сейчас около 32 КБ).Каждый запрос отправляется через соединение, которое изначально использует учетную запись SA (давайте не будем зацикливаться на этом), затем, после того, как мы узнаем, кто пользователь, каждый запрос EXECUTE AS USER используется.

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

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

Как можно попытаться улучшить время выполнения запроса и избежать EXECUTE ASКод ПОЛЬЗОВАТЕЛЯ и все еще проверяют безопасность?

Поддерживает ли SQL Server переменные сеанса для хранения учетной записи пользователя?

1 Ответ

0 голосов
/ 07 июля 2011

Сложно понять, полезно ли это, не вдаваясь в подробности о том, как модель безопасности вашего приложения и как она контролирует и / или объединяет соединения с базой данных. Это толстый клиент, n-ярус или что-то еще?

Соединения SQL могут поддерживать одну «переменную сеанса», используя CONTEXT_INFO - настраиваемое пользователем двоичное поле (128), которое сохраняется в течение всего времени соединения. Это может соответствовать вашим требованиям, но вам следует помнить, что если вы будете использовать ее для хранения информации о безопасности, она будет доступна для конечного пользователя - поэтому вам, вероятно, следует зашифровать или засолить и хешировать любую информацию о безопасности в CONTEXT_INFO, чтобы предотвратить вмешательство пользователей с их разрешениями; это может повлиять на производительность.

Это может быть неприменимо в зависимости от архитектуры вашего приложения, но рассматривали ли вы возможность перехода на авторизацию Windows и организацию разрешений для пользователей и групп Active Directory?

...