Benutzer mit den meisten Antworten
Stored Procedure mit einem anderen User ausführen

Frage
-
Hallo zusammen
Ich habe ein Stored procedure den ich testen möchte.
Gerne möchte ich diese SP mit einem anderen User testen. WEnn ich die SP als dbo.owner (mein Acc) teste klappt alles. Nun möchte ich gerne wissen ob der technische User der angelegt worden ist die SP auch ausführen kann. Wie kann ich dies bewältigen? Sitze schon eine Weile an dem.
Ich habe ein paar Artikel über den Exec as Klausel gelesen, hat mich aber nicht zum Ziel geführt.
Ausserdem ist Ende SP ein cmdshell befehlt wo die Auswertung in ein TXT file im Netzwerk generiert. Der Technische User muss natürlich beim Pfad wo der cmdshell das text File generiert auch berechtigt sein. Dies ist er.
Ich wäre wirklich sehr dankbar wenn ich ein paar Ideen von euch hätte
Beste Grüsse
Mehmet
- Bearbeitet Mehmet.B Montag, 14. Januar 2013 13:21
Antworten
-
Hallo Mehmet,
in SSMS eine neue Abfrage...
USE DeineDB; GO EXECUTE AS Login = 'DeinAndererUser' EXEC dbo.DeineProcedure REVERT; GO
Uwe Ricken
MCITP Database Administrator 2005
MCITP Database Administrator 2008
MCITP Microsoft SQL Server 2008, Database Development
db Berater GmbH
http://www-db-berater.de
SQL Server Blog (german only)- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 24. Januar 2013 16:42
-
Hallo Mehmet,
Mit EXECUTE AS (Transact-SQL) bzw. mit SETUSER (Transact-SQL) solltest Du aber den gewünschten Context Switch hin bekommen, um unter einem anderen User testen zu können; vorausgesetzt Du hast auch die Berechtigungen dazu.
Siehe auch Context Switching (Database Engine)
Olaf Helper
Blog Xing- Als Antwort vorgeschlagen Uwe RickenMVP Montag, 14. Januar 2013 14:13
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 24. Januar 2013 16:42
Alle Antworten
-
Hallo Mehmet,
Mit EXECUTE AS (Transact-SQL) bzw. mit SETUSER (Transact-SQL) solltest Du aber den gewünschten Context Switch hin bekommen, um unter einem anderen User testen zu können; vorausgesetzt Du hast auch die Berechtigungen dazu.
Siehe auch Context Switching (Database Engine)
Olaf Helper
Blog Xing- Als Antwort vorgeschlagen Uwe RickenMVP Montag, 14. Januar 2013 14:13
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 24. Januar 2013 16:42
-
Hallo Mehmet,
in SSMS eine neue Abfrage...
USE DeineDB; GO EXECUTE AS Login = 'DeinAndererUser' EXEC dbo.DeineProcedure REVERT; GO
Uwe Ricken
MCITP Database Administrator 2005
MCITP Database Administrator 2008
MCITP Microsoft SQL Server 2008, Database Development
db Berater GmbH
http://www-db-berater.de
SQL Server Blog (german only)- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 24. Januar 2013 16:42
-
Ausserdem ist Ende SP ein cmdshell befehlt wo die Auswertung in ein TXT file im Netzwerk generiert. Der Technische User muss natürlich beim Pfad wo der cmdshell das text File generiert auch berechtigt sein. Dies ist er.
Was meinst Du mit "technischer User". xp_cmdshell wird immer im Context des Serviceaccounts für die SQL Engine ausgeführt!
Also muss das Servicekonto des SQL Servers diese Berechtigungen haben.ABER...
Dein Account benötigt die Berechtigungen zum Ausführen von xp_cmdshell! Das ist ein Sicherheitsproblem. Eventuell sollest Du darüber nachdenken, die Prozedur mittels Zertifikat auszuführen.
Ein anderes - nicht zu unterschätzendes - Risiko ist die Tatsache, dass xp_cmdshell IMMER synchon ausgeführt wird. Wenn also xp_cmdshell auf eine Eingabe wartet, wartet Deine gesamte Prozedur. Wenn es nur um ETL geht, überlege Dir, es besser mit einem SSIS-Paket zu machen.
Ein Beispiel für die Verwendung von Zertifikaten:
http://db-berater.blogspot.de/2012/11/zertifikate-fur-die-ausfuhrung-von.htmlxp_cmdshell: http://msdn.microsoft.com/de-de/library/ms175046.aspx
Alternativen zu xp_cmdshell: http://technet.microsoft.com/en-us/library/cc917564.aspx
Uwe Ricken
MCITP Database Administrator 2005
MCITP Database Administrator 2008
MCITP Microsoft SQL Server 2008, Database Development
db Berater GmbH
http://www-db-berater.de
SQL Server Blog (german only)- Bearbeitet Uwe RickenMVP Montag, 14. Januar 2013 14:22
-
Hallo Mehmet,
in SSMS eine neue Abfrage...
USE DeineDB; GO EXECUTE AS Login = 'DeinAndererUser' EXEC dbo.DeineProcedure REVERT; GO
Uwe Ricken
MCITP Database Administrator 2005
MCITP Database Administrator 2008
MCITP Microsoft SQL Server 2008, Database Development
db Berater GmbH
http://www-db-berater.de
SQL Server Blog (german only)Hallo Uwe
Besten Dank für die Query... Hat geklappt. Konnte das Skript mit dem zweiten User ausführen.
-
Hallo Mehmet,
Mit EXECUTE AS (Transact-SQL) bzw. mit SETUSER (Transact-SQL) solltest Du aber den gewünschten Context Switch hin bekommen, um unter einem anderen User testen zu können; vorausgesetzt Du hast auch die Berechtigungen dazu.
Siehe auch Context Switching (Database Engine)
Olaf Helper
Blog XingHallo Ofaf
Besten Dank für die Links, werde mich mal genauer mit den Links auseinander setzten. Wo ich noch Probleme hatte ist, den "Revert" Befehl vergessen habe.
-
Hallo Mehmet,
in SSMS eine neue Abfrage...
USE DeineDB; GO EXECUTE AS Login = 'DeinAndererUser' EXEC dbo.DeineProcedure REVERT; GO
Uwe Ricken
MCITP Database Administrator 2005
MCITP Database Administrator 2008
MCITP Microsoft SQL Server 2008, Database Development
db Berater GmbH
http://www-db-berater.de
SQL Server Blog (german only)Hallo Uwe
Frage, kann ein sp_XXX welcher durch User 1 abgefeuert worden ist dann in der sp_XXX einen Teil der sp_XXX durch einen zweiten User 2 weitergeführt werden?
Grüsse
Mehmet
-
Hallo Mehment,
ja - das kann man machen, indem man die Prozedur selbst mit EXECUTE AS programmiert.
Siehe Details hierzu: http://msdn.microsoft.com/de-de/library/ms188354.aspx
Uwe Ricken
MCSE - SQL Server 2012
MCSA - SQL Server 2012
MCITP Database Administrator 2005
MCITP Database Administrator 2008
MCITP Microsoft SQL Server 2008, Database Development
db Berater GmbH
http://www-db-berater.de
SQL Server Blog (german only) -
Hallo Mehmet,
das ist klar, wenn der Benutzer, den Du angegeben hast, nicht berechtigt ist, xp_cmdshell auszuführen.
Ich würde das ganze auch nicht mit einem User sondern mit einem Zertifikat machen.Ich habe dazu mal einen Blogeintrag (Anleitung) geschrieben.
http://db-berater.blogspot.de/2012/11/zertifikate-fur-die-ausfuhrung-von.html
Uwe Ricken
MCSE - SQL Server 2012
MCSA - SQL Server 2012
MCITP Database Administrator 2005
MCITP Database Administrator 2008
MCITP Microsoft SQL Server 2008, Database Development
db Berater GmbH
http://www-db-berater.de
SQL Server Blog (german only) -
Hi Uwe Ne, der User ist auch der Proxy account und Sys admin. Das ist eigentlich nicht das Problem. Was ich feststellen musste ist, dass der User welche die SP_XXX ausführt nicht den 'Execute as' verwenden kann da er nur ein public User ist welcher auch nur Exec Berechtigung für die SP_XXX besitzt. WEnn ich dem User die sysadmin rechte gebe klappt es. Msg 15406, Level 16, State 1, XXXXXXXXXXXXXX, Line 41 Cannot execute as the server principal because the principal "XXXXX\XXXXXXX" does not exist, this type of principal cannot be impersonated, or you do not have permission. Kann dass sein, das der public user gar nicht dies so ausführen kann? Ansonsten werde ich heute mal an deinem Blog Zeit schenken und dies mit einem Zertifikat ausfürhen. Zur Info noch: Die SP hat am Ende einen xp_cmd_Shell welche er noch ausführen soll.