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
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)
Wenn Sie diese spezielle gespeicherte Prozedur ausführen, müssen Sie eine andere Verbindung mit den erforderlichen Benutzeranmeldeinformationen erstellen.
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
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.
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
- 1. Ausführen einer gespeicherten Prozedur innerhalb einer gespeicherten Prozedur
- 2. Ausführen eines FuncView innerhalb einer gespeicherten Prozedur
- 3. Ausführen einer gespeicherten Oracle-Prozedur über eine Datenbankverbindung
- 4. Ausführen einer gespeicherten Prozedur in einer anderen gespeicherten Prozedur in SQL Server
- 5. Suchen einer gespeicherten Prozedur
- 6. Ausführen einer gespeicherten Prozedur in einer SELECT-Anweisung
- 7. Warum ist das Aufrufen einer gespeicherten Prozedur langsamer als das Ausführen des Codes in der gespeicherten Prozedur?
- 8. Ausführen der gespeicherten Prozedur verursacht Fehler
- 9. Wie Prozedur eine Datentabelle von einer gespeicherten
- 10. Kann mehrere Abfragen in einer gespeicherten Prozedur ohne Fehler ausführen
- 11. können wir verschiedene Abfragen in einer gespeicherten Prozedur gleichzeitig ausführen?
- 12. Fehler beim Ausführen der gespeicherten Prozedur in einer anderen Datenbank?
- 13. Ausführen einer gespeicherten Prozedur von Oracle SQL Developer
- 14. Exit von einer gespeicherten Prozedur
- 15. Auftrag von einer gespeicherten Prozedur
- 16. Wie unterdrücke ich die Ergebnisse einer gespeicherten Prozedur aus einer gespeicherten Prozedur?
- 17. Zuweisen von Werten eines gespeicherten Prozedur Parameter eine andere gespeicherte Prozedur mit
- 18. Verwenden einer gespeicherten Prozedur als ein MS-Access-Formular Recordsource
- 19. DataSet-Tabellenname aus einer gespeicherten Prozedur
- 20. Abfrage von Ergebnissen einer gespeicherten Prozedur
- 21. Übergeben eines Aufrufs einer gespeicherten Prozedur von einem LINQ-Datenkontext an eine andere Methode. C#
- 22. Berechtigung zum Ausführen der gespeicherten Prozedur auf SQL Azure erteilen
- 23. Ausführen eines als Ressource gespeicherten SQL-Skripts
- 24. Erstellen einer gespeicherten Prozedur zum Zurückgeben der Zeilenanzahl einer anderen gespeicherten Prozedur
- 25. Ausführen von parametrisierten gespeicherten T-SQL-Prozedur in Access vba
- 26. eine Spalte in der gespeicherten Prozedur hinzufügen
- 27. Wie Debuggen einer gespeicherten Prozedur in Toad?
- 28. Filtern der Ergebnismenge einer gespeicherten Prozedur
- 29. SQL Aggregat Ergebnisse einer gespeicherten Prozedur
- 30. Vorherige Version einer gespeicherten Prozedur abrufen
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
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. –
Dieser Vorschlag hilft auch nicht. Es schien, dass ich VERTRAUEN sollte. Trotzdem danke. – StuffHappens