Как создать пользователя для SQL Server, чьи запросы (любые /все) ограничены по времени?

Есть ли способ создать пользователя базы данных в SQL Server 2005, чтобы ни одному из их запросов не разрешалось превышать определенный срок (например, 20-30 секунд), или все запросы ограничены определенным числом циклов - а затем истекает время запроса, то есть не позволяет этому пользователю реально использовать какие-либо значительные ресурсы для каждого запроса?

Кто-нибудь знает, как это сделать?

Благодарю вас!

7 голосов | спросил Faisal Vali 30 J000000Monday12 2012, 21:03:50

3 ответа


5

Есть способы, но ничего идеального.

Если пользователь только обращается к базе данных SQL Server через уровень данных (например, пользователь только проходит через конкретное веб-приложение и не подключается с помощью SQL Server Management Studio), ответ Джорджа Маврицакиса может работать. Однако, если они подключаются через SSMS, вам нужно сделать еще один шаг.

Вы можете установить query governor cost limitsp_configure) до определенного срока, но это влияет на всех пользователей по умолчанию. Это убьет запрос, если ожидаемое время больше вашего максимального значения, отметив, что ожидаемое время зависит от статистики, и более сложные запросы могут вычеркнуть ваши расчеты.

Если вы просто хотите сделать это для одного входа, вы можете создать вход в систему триггер , и если этот логин - ваш ресурсоемкий пользователь, запустите

SET QUERY_GOVERNOR_COST_LIMIT 600 --or whatever value you want

в корпусе триггера. Заметим еще раз, что губернатор использует оцененный раз, а не фактический раз, поэтому он не является надежным. Тем не менее, он остановил попытку сделать select * для таблицы из 10 миллионов строк, если это фактическая проблема, с которой вы столкнулись.

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

Обратите внимание, что в более поздних версиях Microsoft оттолкнулась от регулятора запросов, тем более что они переместились на регулятор ресурсов. Но это все еще в 2012 году (и, похоже, оно не устарело), ​​и если вы застряли в 2005 году, я думаю, это не проблема ...

ответил Kevin Feasel 26 12012vEurope/Moscow11bEurope/MoscowMon, 26 Nov 2012 17:16:35 +0400 2012, 17:16:35
0

Я думаю, вы должны контролировать это с точки зрения DAL (Data Access Layer). Установите таймауты там. Например, для ADO.NET вы можете установить тайм-аут в команде, отличающийся для каждого пользователя.

ответил George Mavritsakis 26 +04002012-10-26T20:59:12+04:00312012bEurope/MoscowFri, 26 Oct 2012 20:59:12 +0400 2012, 20:59:12
0

Я боюсь, что невозможно установить ограничение в триггере входа в систему. Использование SET в триггере входа является бесполезным, поскольку команда SET работает только в контексте триггера (т. Е. Из команды в оператор END). Как только сессия завершит выполнение триггера, значение будет сброшено до его первоначального значения.

ответил MartinS 26 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowThu, 26 Sep 2013 17:39:48 +0400 2013, 17:39:48

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132