Как заставить подсказку nolock для входа на сервер sql - PullRequest
6 голосов
/ 15 сентября 2008

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

Ответы [ 6 ]

11 голосов
/ 16 сентября 2008

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

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

8 голосов
/ 16 сентября 2008

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

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

1 голос
/ 18 ноября 2008

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

Если вы пытаетесь уменьшить блокировку базы данных и, возможно, предоставить своим пользователям поддержки данные, которые никогда не будут зафиксированы в базе данных. Позволяя им записывать все, что они хотят, в базу данных, тогда nolock - это путь. Вы получите дополнительный бонус за то, что ваш пользователь все еще сможет повысить уровень своей изоляции, используя команду SET TRANSACTION ISOLATION LEVEL.

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

Я считаю, что NOLOCK неправильно истолковывается при переполнении стека.

0 голосов
/ 16 сентября 2008

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

0 голосов
/ 16 сентября 2008

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

0 голосов
/ 15 сентября 2008

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

...