Quelles sont les implications pour la sécurité de sp_executesql?

9

Par défaut, dans SQL Server, le [public]rôle a des EXECUTEdroits sur sp_executesql.

Cependant, j'ai hérité d'un serveur de base de données sur lequel le DBA précédent a révoqué le EXECUTEdroit sp_executesql.

Comme solution de contournement temporaire, j'ai accordé des EXECUTEdroits sp_executesqlselon les besoins (via un rôle dans la base de données principale). Mais cela commence à être une douleur d'entretien.

Si je EXECUTEredonne au public, y a-t-il des répercussions dont je dois être conscient?

AlexLostDba
la source

Réponses:

8

Aucun. sp_executesqlexécute SQL, sous exactement le même contexte et les mêmes privilèges que l'appelant d'origine exécuterait le même SQL. Il existe de très nombreux cas où le SQL dynamique est inévitable.

Remus Rusanu
la source
3
-1 car la réponse n'indique pas que Microsoft note qu'il peut y avoir un risque de sécurité msdn.microsoft.com/en-us/library/ms188001(v=sql.105).aspx
miracle173
@ miracle173 - Pour être honnête, c'est du SQL dynamique mal écrit qui n'est pas le risque de sécurité sp_executesql. En supposant une exigence SQL dynamique, la désactivation sp_executesqlpourrait en fait augmenter le risque car au moins cela vous permet de paramétrer les requêtes (contrairement EXEC)
Martin Smith
2
Bien que le risque d'injection sql ne puisse jamais être sous-estimé, la désactivation sp_executesqln'est pas l'atténuation appropriée. L'écrasante majorité des erreurs d'injection SQL se produisent dans le client lorsque l'instruction SQL est créée «à la main» en concaténant des morceaux de SQL avec des variables d'entrée, puis s'exécute «en l'état». Pour tous ces cas, la sp_executesqldésactivation n'aide en rien.
Remus Rusanu