Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Права на запуск stored proc  [new]
and761
Member

Откуда:
Сообщений: 19
Добрый день! Возникла такая ситуация - надо всем юзерам разрешить запуск одной и только одной хранимой процедуры. Как я понимаю, для этого на уровне БД надо каждому юзеру дать право на EXECUTE, а потом на уровне объектов для нужной процедуры дать GRANT на EXECUTE, а для остальных процедур DENY на EXECUTE. И так для каждого юзера! Много их.... Нет ли какого-нибудь более простого метода? Или, как вариант, можно ли автоматизировать этот процесс?
25 июл 11, 10:10    [11021204]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск stored proc  [new]
EvAlex
Member

Откуда: Israel
Сообщений: 1001
это будет извращенно - очень :)

Если юзеры из Active Directory создай для них группу и дай ей execute.
Если юзеры местные, то создай database role и пользуйся им.
25 июл 11, 10:20    [11021260]     Ответить | Цитировать Сообщить модератору
 Re: Права на запуск stored proc  [new]
egaraev
Member

Откуда:
Сообщений: 63
Как вариант раздать права через группу.
А группе назначить права например так:

CREATE ROLE [exec_any_function]

declare @sql varchar(8000)

DECLARE grant_str1 CURSOR
for
select 'GRANT EXECUTE ON ['+SCHEMA_NAME(schema_id)+'].['+name+'] TO [exec_any_function]'
from sys.all_objects
where type in ('FN', 'AF', 'FS')
and object_id>0

open grant_str1
FETCH NEXT FROM grant_str1 INTO @sql
WHILE (@@FETCH_STATUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)
BEGIN
exec(@sql)
--print @sql
END
FETCH NEXT FROM grant_str1 INTO @sql
END
CLOSE grant_str1
DEALLOCATE grant_str1

DECLARE grant_str2 CURSOR
for
select 'GRANT SELECT ON ['+SCHEMA_NAME(schema_id)+'].['+name+'] TO [exec_any_function]'
from sys.all_objects
where type in ('FT', 'TF', 'IF')
and object_id>0

open grant_str2
FETCH NEXT FROM grant_str2 INTO @sql
WHILE (@@FETCH_STATUS <> -1)
BEGIN
IF (@@FETCH_STATUS <> -2)
BEGIN
exec(@sql)
--print @sql
END
FETCH NEXT FROM grant_str2 INTO @sql
END
CLOSE grant_str2
DEALLOCATE grant_str2
25 июл 11, 10:54    [11021439]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить