web-dev-qa-db-fra.com

Exécuter une procédure stockée en tant qu'autorisation d'un autre utilisateur

J'ai rencontré le problème suivant: il y a un utilisateur qui doit exécuter une procédure stockée (spTest). Dans le corps de spTest, sp_trace_generateevent est appelé. sp_trace_generateevent nécessite des autorisations de suivi de modification et je ne souhaite pas que l'utilisateur l'ait. Je voudrais donc que l'utilisateur puisse exécuter spTest. Comment puis je faire ça? 

19
StuffHappens

Essaye ça:

EXECUTE AS user = 'special_user'

EXECUTE YourProcerdure

REVERT

voir ces:
Comprendre la commutation de contexte<<<has examples of things like you are trying to do
Comprendre le contexte d'exécution
Clause EXECUTE AS (Transact-SQL)
EXECUTE AS (Transact-SQL)

26
KM.

Comme d'autres l'ont suggéré, vous pouvez réaliser ce que vous souhaitez en utilisant la clause Execute As. Pour des exemples de choix d'implémentation, consultez la documentation de la documentation en ligne pour la clause Execute As .

Pour approfondir la lecture de ce sujet et mieux le comprendre, ce que vous cherchez à réaliser relève du concept de sécurité de Changement de contexte .

3
John Sansom

Voici ce que j'ai fait (et réussi):

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

dans

Source
1
Emilio Pastore