Opinion de Sql Dinamico | SQL Server Performance Forums

SQL Server Performance Forum – Threads Archive

Opinion de Sql Dinamico

Buenas, una consulta, que virtudes y desventajas tengo al usar sql dinamico?, estoy leyendo un escrito que encontre y de inicio queria saber que me pueden comentar para complemetar la informacion obtenida. Muchas gracias de antemano por sus comentarios.
Jesus Aguilar
Que yo sepa no hay ventajas ni desventajas del uso de sql dinámicas.
Por si acaso esperemos el comentario de Maldon.
Luis Martin
Moderator
SQL-Server-Performance.com One of the symptoms of an approaching nervous breakdown is the belief that one’s work is terribly important
Bertrand Russell
All postings are provided “AS IS” with no warranties for accuracy.
Este es el link que me facilitaron.
http://www.hayes.ch/sql/sql_dinamico.html Habla de un pre procesamiento que se da con los procedimientos normales los que no se dan en un procedimiento dinamico, entre otras cosas.
Dentro de las desventajas hay algunas importantes Seguridad:
=========
Cuando se ejecuta un query dinamico el usuario final tiene que tener permiso sobre las tablas que va a afectar, en cambio si pertenece al código de un procedimiento solo tiene que tener permiso de EXEC del procedimiento. En aplicaciones bancarias donde la seguridad es importante es muy bien recibido que el único permiso que neseciten los usuarios sea EXEC de stored procedures. Si el usuario tiene permiso de UPDATE sobre las tablas podría modificar los datos desde cualquier aplicación que use ODBC como por ejemplo Excel.
Mantenimiento:
=============
Es mucho más claro y confiable tener el código rígido que ir armándolo en variables, ya que en la segunda opción se suma la posibilidad de cometer un error sintáctico en tiempo de ejecución. Claro que es más flexible pero a la hora del mantenimiento es mucho mas costoso en tiempo y dinero. Inyección de codigo:
====================
Otro problena es que cuando se arma un SQL dinámico y no se validan bien los datos ingresados por el usuario podés incurrir en el problema de inyección de código. Esto se da cuando en una variable el usuario te carga código SQL por pantalla y vos lo concatenás al string que estás armando en tu variable, y que en definitiva se te arma código válido T-SQL que la instruccion exec() te ejecuta, por ejemplo, que el usuario te agrege " ‘ go DELETE tablename –" a un dato que vos pedís por pantalla. Tambien al ejecutar por primera vez un procedimiento, el plan de ejecución se mantiene en la cache de procedimientos para las próximas ejecuciónes, pero si tiene instrucciones de SQL dinámico adentro del stored procedure el plan del SQL Dinámico no forma parte del plan del procedimiento. Además es más dificil hacerles unning ya que la variable que en definitiva se ejecuta con EXEC() tiene muchas combinaciones y hay que probarlas a todas. Nosotros no utilizamos SQL Diámico principalmente por la cuestión de seguridad y la claridad del código.
Saludos
]]>