2010-05-12 14 views
17

Mam do czynienia z następującym problemem: jest użytkownik, który musi wykonać procedura składowana (spTest). W ciele spTest wywoływane jest sp_trace_generateevent. sp_trace_generateevent wymaga uprawnień do śledzenia zmian i nie chcę, aby użytkownik je miał. Chciałbym, aby użytkownik mógł wykonać test spT. Jak mogę to zrobić?Wykonywanie procedury składowanej jako innego użytkownika pozwolił

Odpowiedz

25

Spróbuj tego:

EXECUTE AS user = 'special_user' 

EXECUTE YourProcerdure 

REVERT 

zobaczyć te:
Understanding Context Switching<<<has examples of things like you are trying to do
Understanding Execution Context
EXECUTE AS Clause (Transact-SQL)
EXECUTE AS (Transact-SQL)

+0

Z jakiegoś powodu to nie pomaga. Pojawia się błąd, że nie mam uprawnień do uruchamiania sp_trace_generateevent. Ale kiedy łączę się z serwerem jako specjalnym_użytkownikiem, nie mam problemów z uruchomieniem sp_trace_generateevent. Jakieś pomysły? – StuffHappens

+1

from: http://msdn.microsoft.com/en-us/library/ms181362.aspx Nazwa użytkownika lub nazwa logowania określona w EXECUTE AS musi istnieć jako element główny odpowiednio w sys.database_principals lub sys.server_principals, lub instrukcja EXECUTE AS nie działa. Ponadto uprawnienia nadrzędne IMPERSONATE muszą zostać udzielone głównemu użytkownikowi. Jeśli osoba wywołująca nie jest właścicielem bazy danych lub jest członkiem stałej roli serwera sysadmin, musi ona istnieć nawet wtedy, gdy użytkownik uzyskuje dostęp do bazy danych lub wystąpienia programu SQL Server poprzez członkostwo w grupie systemu Windows. –

+0

Ta sugestia również nie pomaga. Okazało się, że powinienem ZAZWRÓCIĆ PONOWNIE. Mimo wszystko dziekuję. – StuffHappens

-1

Po uruchomieniu tej określonej procedury składowanej należy utworzyć inne połączenie, używając wymaganych poświadczeń użytkownika.

+0

Z jakiegoś powodu nie podlega programowi pomocy. Pojawia się błąd, że nie mam uprawnień do uruchamiania sp_trace_generateevent. Ale kiedy łączę się z serwerem jako specjalnym_użytkownikiem, nie mam problemów z uruchomieniem sp_trace_generateevent. Jakieś pomysły? – StuffHappens

3

Jak inni sugerują, można osiągnąć, co chcesz za pomocą Execute Jak klauzuli. Przykłady przykładów implementacji można znaleźć w dokumentacji Books Online dla klauzuli Execute As.

W celu dalszego czytania i lepszego zrozumienia tego tematu, to, co chcesz osiągnąć, jest objęte ochroną Context Switching.

1

To co zrobiłem (i udało się):

let Source = Sql.Database("server", "database", 
    [Query= "EXECUTE AS USER='user' EXECUTE [schema].[spname] 'parm1', 'parm2'"]) 

w

Source 
Powiązane problemy