2013-09-24 7 views

Odpowiedz

14

Spróbuj czegoś takiego. Tworzy nową rolę i przyznaje uprawnienia do wykonywania schematu.

CREATE ROLE db_executor 
GRANT EXECUTE ON SCHEMA::schema_name TO db_executor 
exec sp_addrolemember 'db_executor', 'Username' 

Wymień schema_name z Twojego schematu i 'Username' ze swoim użytkownikiem.

+0

Czy to możliwe, aby udzielić zgody SCHEMA do już istnieje SQL Server rola takich jak db_datareader? –

+0

@ FatihYarbaşı Powinno być możliwe, ale nie mam pewności co do wbudowanych ról. Odradzam rozszerzanie wbudowanych ról, lepiej jest stworzyć własną. – Szymon

1

Aby nadać uprawnienia do wykonywania dla wszystkich procedur przechowywanych w jednym schemacie, wystarczy zapytanie z zakresu @szymon.

Poniższe zapytanie przyzna zezwolenie na wykonanie procedury dla wybranego użytkownika. Pod warunkiem, że użytkownik już istnieje.

GRANT EXECUTE na obiekcie :: [schemat] [procedurename] do [użytkownik] AS [schemat].; GO

1

polecam zrobić to, co zaproponował Szymon, ponieważ jest to bardziej eleganckie rozwiązanie, ale chcesz uniknąć tworzenia ról można wykonać kwerendę tak, skopiuj wyniki do osobnego edytora zapytań i wykonywać wszystkie naraz.

To wygeneruje GRANT EXECUTE sprawozdań dla wszystkich procedur przechowywanych, które masz w konkretnym schemacie

DECLARE @SchemaName varchar(20) 
DECLARE @UserName varchar(20) 

SET @SchemaName = 'dbo' 
SET @UserName = 'user_name' 

select 'GRANT EXECUTE ON OBJECT::' + @SchemaName + '.' + P.name + ' to ' + @UserName 
from sys.procedures P 
inner join sys.schemas S on P.schema_id = S.schema_id 
where S.name = @SchemaName 
+0

Ale co, jeśli zostaną utworzone nowe procedury składowane? Myślę, że musisz udzielić uprawnień exec dla nowo utworzonych procedur przechowywanych? –