Как принудительно использовать подсказку nolock для входа в систему sql server

StackOverflow https://stackoverflow.com/questions/64208

Вопрос

Кто-нибудь знает способ принудительно использовать подсказку nolock для всех транзакций, выданных определенным пользователем?Я хотел бы предоставить логин для команды поддержки для запроса производственной системы, но я хочу защитить ее, принудительно заблокировав все, что они делают.Я использую SQL Server 2005.

Это было полезно?

Решение

Это болезненный и халтурный способ сделать это, но это то, чем мы занимаемся там, где я работаю.Мы также используем классический asp, поэтому используем встроенные sql-вызовы.на самом деле мы оборачиваем вызов sql в функцию (здесь вы можете проверить наличие конкретного пользователя) и добавляем "УСТАНОВИТЬ УРОВЕНЬ ИЗОЛЯЦИИ ТРАНЗАКЦИИ, ПРОЧИТАННЫЙ НЕЗАФИКСИРОВАННЫМ" в начало вызова.

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

Другие советы

Вы могли бы настроить SQL Management Studio вашего сотрудника службы поддержки для установки уровня изоляции транзакций по умолчанию на ЧТЕНИЕ UNCOMMITTED (Сервис-> Параметры-> Выполнение запроса-> SQL Server-> Дополнительно).Функционально это то же самое, что иметь подсказки NOLOCK для всего.

Недостатками является то, что вам придется делать это для каждого члена вашей команды поддержки, и у них будет возможность изменять конфигурацию в своей SQL Management Studio.

Хорошо, вам нужно уточнить, что вы пытаетесь здесь сделать.

Если вы пытаетесь уменьшить блокировку базы данных и, возможно, предоставить пользователям службы поддержки данные, которые на самом деле никогда не будут зафиксированы в базе данных.Позволяя им записывать в базу данных все, что они хотят, лучше всего использовать nolock.Вы получите дополнительный бонус в том, что ваш пользователь по-прежнему сможет повысить свой уровень изоляции, используя команду УСТАНОВИТЬ УРОВЕНЬ ИЗОЛЯЦИИ ТРАНЗАКЦИИ.

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

Я нахожу, что NOLOCK сильно неправильно понимается при переполнении стека.

Вы могли бы создать ограниченного пользователя для группы поддержки, а затем либо написать хранимые процедуры, либо представления с подсказкой nolock.Затем предоставляйте доступ только к ним, а не к прямому выбору таблицы.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top