2010-05-12 13 views
17

Ich konfrontiert das folgende Problem: Es gibt einen Benutzer, der eine gespeicherte Prozedur (SpTest) ausführen muss. In spTests Körper wird sp_trace_generateevent aufgerufen. sp_trace_generateevent erfordert alter trace-Berechtigungen, und ich möchte nicht, dass Benutzer es haben. Also möchte ich, dass Benutzer spTest ausführen können. Wie kann ich das machen?Ausführen einer gespeicherten Prozedur als eine andere Benutzerberechtigung

Antwort

25

Versuchen Sie folgendes:

EXECUTE AS user = 'special_user' 

EXECUTE YourProcerdure 

REVERT 

sehen diese:
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

Aus irgendeinem Grund hilft es nicht. Ich bekomme den Fehler, dass ich keine Berechtigung habe, sp_trace_generateevent auszuführen. Aber wenn ich als special_user eine Verbindung zum Server herstelle, habe ich keine Probleme sp_trace_generateevent auszuführen. Irgendwelche Ideen? – StuffHappens

+1

from: http://msdn.microsoft.com/en-us/library/ms181362.aspx Der Benutzer- oder Anmeldename, der in EXECUTE AS angegeben ist, muss als Prinzipal in sys.database_principals bzw. sys.server_principals vorhanden sein. oder die Anweisung EXECUTE AS schlägt fehl. Darüber hinaus müssen IMPERSONATE-Berechtigungen für den Prinzipal erteilt werden. Wenn der Aufrufer nicht der Datenbankbesitzer ist oder ein Mitglied der festen Serverrolle sysadmin ist, muss der Prinzipal auch dann vorhanden sein, wenn der Benutzer über eine Windows-Gruppenmitgliedschaft auf die Datenbank oder Instanz von SQL Server zugreift. –

+0

Dieser Vorschlag hilft auch nicht. Es schien, dass ich VERTRAUEN sollte. Trotzdem danke. – StuffHappens

-1

Wenn Sie diese spezielle gespeicherte Prozedur ausführen, müssen Sie eine andere Verbindung mit den erforderlichen Benutzeranmeldeinformationen erstellen.

+0

Aus irgendeinem Grund es Hilfe does. Ich bekomme den Fehler, dass ich keine Berechtigung habe, sp_trace_generateevent auszuführen. Aber wenn ich als special_user eine Verbindung zum Server herstelle, habe ich keine Probleme sp_trace_generateevent auszuführen. Irgendwelche Ideen? – StuffHappens

3

Wie andere vorgeschlagen haben, können Sie erreichen, was Sie wollen die As-Klausel ausführen verwenden. Beispiele für Implementierungsoptionen finden Sie in der Onlinedokumentation für die Execute As-Klausel.

Für weitere Lektüre und um mehr Verständnis für dieses Thema zu entwickeln, kommt das, was Sie erreichen wollen, unter das Sicherheitskonzept von Context Switching.

1

Das ist, was ich tat (und erfolgreich):

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

in

Source 
Verwandte Themen