Стратегия ускорения для SQL Server, когда EXECUTE AS используется для безопасности
Я только начал смотреть на систему, которая реализует безопасность немного иначе, чем норма.
Они создают нового пользователя SQL для каждого пользователя системы (которых сейчас около 32K). Каждый запрос отправляется через соединение, которое изначально использует учетную запись SA (давайте не будем зацикливаться на этом), а затем, после того, как мы узнаем, кто пользователь, EXECUTE AS USER использует каждый запрос.
Теперь, когда пользователей так много, создание новых пользователей и переключение заметно снизили производительность, и компания смотрит на улучшение ситуации.
Несколько моментов: - SQL-код - это динамический sql (не хранимые процедуры). - Первоначальная идея состояла в том, чтобы облегчить разработчикам компании необходимость беспокоиться о написании SQL, заботясь о разрешениях, - и позволить другому уровню беспокоиться об этом.
Как можно попытаться улучшить время выполнения запроса, избежать кода EXECUTE AS USER и при этом получить такой же контроль безопасности?
Поддерживает ли SQL Server переменные сеанса для хранения учетной записи пользователя?
1 ответ
Сложно понять, полезно ли это, не вдаваясь в подробности о том, как модель безопасности вашего приложения и как она контролирует и / или объединяет соединения с базой данных. Это толстый клиент, n-ярус или что-то еще?
Соединения SQL могут поддерживать одну "переменную сеанса", используя CONTEXT_INFO
- настраиваемое пользователем двоичное поле (128), которое сохраняется в течение всего времени соединения. Это может соответствовать вашим требованиям, но вам следует помнить, что если вы используете ее для хранения информации о безопасности, она будет доступна для конечного пользователя - поэтому вам, вероятно, следует зашифровать или засолить и хешировать любую информацию о безопасности в CONTEXT_INFO
предотвращать вмешательство пользователей в их разрешения; это может повлиять на производительность.
Это может быть неприменимо в зависимости от архитектуры вашего приложения, но рассматривали ли вы возможность перехода на авторизацию Windows и организацию разрешений через пользователей и группы Active Directory?