Czy istnieje sposób w SQL Server 2012 do udzielenia wykonać wszystkie procedury przechowywane w jednym schemacie? Aby uzyskać dodatkowe informacje, te procedury przechowywane robią tylko wybrane.Jak nadać uprawnienia do wykonywania procedur przechowywanych w określonym schemacie?
Odpowiedz
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.
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
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
Ale co, jeśli zostaną utworzone nowe procedury składowane? Myślę, że musisz udzielić uprawnień exec dla nowo utworzonych procedur przechowywanych? –
Czy to możliwe, aby udzielić zgody SCHEMA do już istnieje SQL Server rola takich jak db_datareader? –
@ 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