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

Откуда:
Сообщений: 92
Дело в следующем.

Есть НТ-группа, к-рой дан доступ в базу. Но она не DBO. Однако, ей надо дать права исполнять около 200 хранимок, созданных dbo. Сейчас QA ругается, что

EXECUTE permission denied on object 'GetDaysCount', database 'IBroker', owner 'dbo'.

Как мне быть? ОЧЕНЬ НЕ ХОЧЕТСЯ ЯВНО РУЧКАМИ ГРАНТИТЬ ПРАВА НА КАЖДУЮ ИЗ 200 ХРАНИМОК
4 апр 03, 11:35    [164699]     Ответить | Цитировать Сообщить модератору
 Re: Как ограничить права dbo?  [new]
xp writer wannabe
Member

Откуда:
Сообщений: 49
dbo нельзя ограничить доступ - он владелец базы, и делает в ней все, что хочет. надо создать отдельную роль, которой дать права (руками или не руками) на эти процедуры, а НТ-группу включить в эту роль
4 апр 03, 12:11    [164782]     Ответить | Цитировать Сообщить модератору
 Re: Как ограничить права dbo?  [new]
u001
Guest
Юзер DBO безусловно имеет все права к базе данных.
В данном случае тебе нужно:создать роль базы данных, дать ей все необходимые права на выполнение процедур и включить группу/юзеров в эту роль.
Полностью автоматизировать этот процесс можно только если ты даешь права на все процедуры, иначе в любом случае тебе придется ручками поработать.
Отредактируй под свои цели:

DECLARE @NAME VARCHAR(128)
DECLARE cursystbl cursor read_only for
SELECT [name] FROM sysobjects
WHERE xtype in ('FN','IF','P','TF','U','V','X') and status>=0
OPEN cursystbl
DECLARE @cSTR VARCHAR(2048),
@cUSTR VARCHAR(2048),
@eSTR VARCHAR(2048)

SELECT @cUSTR=ISNULL(@cUSTR,'')+'['+[NAME]+']'+
CASE WHEN UID=(SELECT MAX(UID) FROM SYSUSERS) THEN '' ELSE ',' END
FROM DBO.SYSUSERS
WHERE UID>16399
ORDER BY UID
SET @cSTR='GRANT ALL ON %1 TO %2 '
SET @cSTR=REPLACE(@cSTR,'%2', @cUSTR)
--SELECT @cSTR
FETCH NEXT FROM cursystbl INTO @NAME
WHILE @@FETCH_STATUS=0
BEGIN
SET @eSTR=REPLACE(@cSTR,'%1', @NAME)
PRINT @eSTR
EXEC (@eSTR)
FETCH NEXT FROM cursystbl INTO @NAME
END
CLOSE cursystbl
DEALLOCATE cursystbl

/*
C = CHECK constraint
D = Default or DEFAULT constraint
F = FOREIGN KEY constraint
L = Log
FN = Scalar function
IF = Inlined table-function
P = Stored procedure
PK = PRIMARY KEY constraint (type is K)
RF = Replication filter stored procedure
S = System table
TF = Table function
TR = Trigger
U = User table
UQ = UNIQUE constraint (type is K)
V = View
X = Extended stored procedure
*/
4 апр 03, 12:12    [164783]     Ответить | Цитировать Сообщить модератору
 Re: Как ограничить права dbo?  [new]
senglory
Member

Откуда:
Сообщений: 92
Спасибо за пример - поробую!
4 апр 03, 12:15    [164787]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить