Как сценарий SQL Sever TSQL может сказать, какие разрешения безопасности он имеет? - PullRequest
5 голосов
/ 02 февраля 2009

У меня есть сценарий TSQL, который используется для настройки базы данных при установке моего продукта. Требуется несколько шагов, которые все вместе занимают пять минут или около того. Иногда этот сценарий завершается ошибкой на последнем шаге, поскольку пользователь, выполняющий сценарий, не имеет достаточных прав на базу данных. В этом случае я бы хотел, чтобы сценарий потерпел неудачу. Для этого я хочу, чтобы скрипт проверял, какие права у него есть. Может кто-нибудь указать мне на общий способ тестирования, если сценарий выполняется с определенным разрешением безопасности?

Редактировать: В конкретном случае, который я смотрю, он пытается сделать резервную копию, но у меня были другие проблемы и я надеялся на решение общего назначения.

Ответы [ 3 ]

4 голосов
/ 02 февраля 2009
select * from fn_my_permissions(NULL, 'SERVER') 

Это дает вам список разрешений, которые текущий сеанс имеет на сервере

select * from fn_my_permissions(NULL, 'DATABASE')

Это дает вам список разрешений для текущего сеанса в текущей базе данных.

Подробнее см. Здесь .

0 голосов
/ 02 февраля 2009

попробуйте выполнить последнюю вставку / обновление с некоторым условием, например

insert/update
where 1=2

if (@@error <> 0)
   raise error 6666 'no permissions'

это не причинит никакого вреда, но поднимет флаг об отсутствии прав.

0 голосов
/ 02 февраля 2009

Я полагаю, что это сбой при обновлении или вставке после долгой серии выбора.

Просто попробуйте простое обновление или вставьте внутри транзакции. Жесткий код идентификатора строки или что-то еще, чтобы сделать его простым и быстрым

Не фиксируйте транзакцию - вместо этого откатите ее.

Если у вас нет прав на вставку или обновление, произойдет сбой. Если вы это сделаете, он откатится назад и не вызовет постоянных изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...