2012-04-12 21 views
0

ich eine gespeicherte Prozedur als ein Benutzer erstellt haben, die Admin-Rechte hat und enthaltenEXECUTE AS und OPENROWSET bulkload

WITH EXECUTE AS SELF 

Dann versuche ich, die gespeicherte Prozedur mit einem Benutzer ausführen, die keine Berechtigungen hat, versucht, den Benutzer, der ein Administrator ist, zu imitieren.

Aber es Fehler zurück sagen, der Benutzer hat nicht die Berechtigungen, Bulk-Load zu verwenden.

Wie auch immer um diese?

Antwort

0

Sie diese Abfrage verwenden können, die ID des Haupt zu finden, das „Selbst“ für eine Prozedur ist:

select execute_as_principal_id 
from sys.sql_modules 
where object_id = object_id('YourProcedureName') 

Für mich null das ist die meiste Zeit, die wie es scheint, nicht funktionieren sollte . Versuchen Sie stattdessen:

WITH EXECUTE AS 'UserWhoHasAdminRights' 

oder als DBO auszuführen:

WITH EXECUTE AS OWNER 
0

Ich soll der Benutzer admin das proc ausführen kann, nicht wahr?

Können Sie zeigen, wie Sie den Anruf tätigen?

Weil AS SELF EXECUTE bedeutet als Benutzer führen Sie das proc Aufruf, so würden Sie so etwas wie EXECUTE AS USER = 'user_with_permission' vor dem Aufruf des proc

+0

Von MSDN zu tun haben: „EXECUTE AS SELF entspricht AS user_name ausführen zu können, wo der angegebene Benutzer ist die Person, die das Modul erstellt oder ändert. Die tatsächliche Benutzer-ID der Person, die die Module erstellt oder ändert, wird in der Spalte execute_as_principal_id in der Katalogsicht sys.sql_modules oder sys.service_queues gespeichert. " – Andomar

+0

das habe ich gemeint. Wenn er den proc mit seinem eigenen Benutzer aufruft, wäre das Ausführen als self dasselbe wie execute as his_user. was scheitern würde. Das ist der Grund, warum ich fragte, wie er den Identitätswechsel zum Admin-Benutzer macht. – Diego

+0

Aus dem Post, "Ich habe eine gespeicherte Prozedur als ein Benutzer erstellt, der Administratorrechte hat" Er erwartet "als selbst" auf diesen Benutzer verweisen, und es sollte . Aber aus irgendeinem Grund funktioniert das nicht so. – Andomar