Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Ventajas/Desventajas de Procedimientos Almacenados en la Web

Estas en el tema de Ventajas/Desventajas de Procedimientos Almacenados en la Web en el foro de Bases de Datos General en Foros del Web. A todos los gurús de Base de Datos, me gustaría saber cuales son las Ventajas y Desventajas de Utilizar procedimientos almacenados en un sistema web, ...
  #1 (permalink)  
Antiguo 04/09/2006, 16:31
Avatar de elunicode  
Fecha de Ingreso: noviembre-2005
Mensajes: 66
Antigüedad: 18 años, 5 meses
Puntos: 2
Ventajas/Desventajas de Procedimientos Almacenados en la Web

A todos los gurús de Base de Datos, me gustaría saber cuales son las Ventajas y Desventajas de Utilizar procedimientos almacenados en un sistema web, pues pienso crear un sistema pero utilizando este tipo de Tecnología de base de datos y quisiera conocer opioniones
Gracias
  #2 (permalink)  
Antiguo 05/09/2006, 08:17
Avatar de Linterns
Colaborador
 
Fecha de Ingreso: diciembre-2001
Mensajes: 2.799
Antigüedad: 22 años, 4 meses
Puntos: 11
VENTAJAS: acceso mas rapido, mayor velocidad de respuesta, mejor manejo de la paqueteria ya que lo tienes todo ahi.

DESVENTAJAS: se corrompoe la base de datos adios a todo el trabajo hasta el ultimo respaldo que tengas
__________________
Bien se puede recibir una puñalada sin adulación,
pero rara vez se recibe una adulación sin puñalada
** ***
  #3 (permalink)  
Antiguo 05/09/2006, 08:46
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Cita:
Iniciado por Linterns Ver Mensaje
VENTAJAS: acceso mas rapido, mayor velocidad de respuesta, mejor manejo de la paqueteria ya que lo tienes todo ahi.

DESVENTAJAS: se corrompoe la base de datos adios a todo el trabajo hasta el ultimo respaldo que tengas
Son mas ventajas que desventajas... si ejecutamos sentencias sql estableciendo una conexion entre mi aplicación y la base por la naturaleza de la aplicación web se demorará más en relación si tan solo mandamos a ejecutar dichas sentencias en un procedimiento almacenado, sobre todo si son sentencias pesadas. Aunque tambien es verdad que la base de datos tiene mas importancia ya que existe programación dentro de ella pero se debe de tener una buena estrategia de respaldos de la misma, si ya tenemos una base de datos en producción se debe generar los script necesarios que contengan los CREATE PROCEDURE, TABLE, VIEW, FUNCTION, DATABASE, TRIGGER, USER... y todos los objetos de la base. De tal manera que si le pasa algo a la base su estructura está protegida.

Utilizar procedimientos es beneficioso ya que dicho código ya está compilado en la base de datos y se ejecuta mucho mas rápido
  #4 (permalink)  
Antiguo 05/09/2006, 14:30
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
No le conozco desventajas, a menos que seas adicto al SQL generado al vuelo desde el lenguaje (ASP, PHP, ...), en cuyo caso también serás adicto a las inyecciones de SQL o supervalidaciones desde la aplicación.

Sobre perder los avances en caso de problemas... ¿que puedo decir...? ¿Que pasa si se corrompe la partición donde está el Web? Solo un buen esquema de respaldos te salvará en cualquiera de los dos casos.
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #5 (permalink)  
Antiguo 05/09/2006, 16:28
Avatar de elunicode  
Fecha de Ingreso: noviembre-2005
Mensajes: 66
Antigüedad: 18 años, 5 meses
Puntos: 2
Muchas gracias por sus comentarios, su ayuda me ha sido de mucha ayuda y sugerencia, pues pensaba que habría más desventajas que ventajas.

  #6 (permalink)  
Antiguo 05/09/2006, 21:21
foo
 
Fecha de Ingreso: febrero-2006
Mensajes: 278
Antigüedad: 18 años, 2 meses
Puntos: 0
Cita:
Iniciado por Mithrandir Ver Mensaje
No le conozco desventajas, a menos que seas adicto al SQL generado al vuelo desde el lenguaje (ASP, PHP, ...), en cuyo caso también serás adicto a las inyecciones de SQL o supervalidaciones desde la aplicación.
el SQL generado no necesariamente implica inyecciones de SQL, la mayoria de lenguajes -que se precien de serlo- ofrecen metodos para trabajar con parametros de forma segura. Ahora bien, tampoco el uso de procedimientos almacenados indica que no se pueda hacer sql injection (recuerda que tambien en los sp se puede generar "sql al vuelo")...

por otro lado, el SQL generado es mas flexible para los O/RM, a diferencia de los procedimientos almacenados

cada esquema tiene sus ventajas y desventajas, sobre este tema se ha escrito multitud de articulos o posts en blogs...te recomiendo la lectura de http://weblogs.asp.net/fbouma/archiv.../18/38178.aspx para que no desprecies tanto al sql generado
  #7 (permalink)  
Antiguo 06/09/2006, 12:56
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
mmmm.... que será mas fácil, hacer un sql injection a una aplicación o a un procedimiento.
  #8 (permalink)  
Antiguo 06/09/2006, 13:22
foo
 
Fecha de Ingreso: febrero-2006
Mensajes: 278
Antigüedad: 18 años, 2 meses
Puntos: 0
Cita:
Iniciado por Developer9 Ver Mensaje
mmmm.... que será mas fácil, hacer un sql injection a una aplicación o a un procedimiento.
que es lo que quieres decir?
  #9 (permalink)  
Antiguo 06/09/2006, 14:17
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
Cita:
Iniciado por foo Ver Mensaje
que es lo que quieres decir?
Disculpas... que es mas fácil, lograr hacer sql injection a una aplicación que cree las sentencias sql en su codigo o a una aplicación que llame a un store procedure
  #10 (permalink)  
Antiguo 06/09/2006, 14:30
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Cita:
Ahora bien, tampoco el uso de procedimientos almacenados indica que no se pueda hacer sql injection (recuerda que tambien en los sp se puede generar "sql al vuelo")...
Cierto, gracias por clarificarlo.
Cita:
Disculpas... que es mas fácil, lograr hacer sql injection a una aplicación que cree las sentencias sql en su codigo o a una aplicación que llame a un store procedure
Casi cualquier sentencia SQL de aplicación sera generada al vuelo (a menos que sea estática). Mientras que para que un SP sea vulnerable al injection necesitas usar SQL dinámico dentro del propio SP (mucho más difícil de encontrar, aunque yo mismo tengo un par de ellos)
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
  #11 (permalink)  
Antiguo 06/09/2006, 18:17
Avatar de Developer9
(Desactivado)
 
Fecha de Ingreso: abril-2005
Ubicación: Mi Ecuador del alma
Mensajes: 4.196
Antigüedad: 19 años
Puntos: 47
SuPongo que la sql injection se camuflará en los parámetros del reporte... parámetros que formarán parte de algún query
  #12 (permalink)  
Antiguo 07/09/2006, 16:23
Avatar de Mithrandir
Colaborador
 
Fecha de Ingreso: abril-2003
Mensajes: 12.106
Antigüedad: 21 años
Puntos: 25
Algo así. Por ejemplo este SP caerá como mosquita mientras que el segundo no, además de que si revisas el código, para hacer sql dinámico dentro del SP requieres de más técnica que para hacerlo desde el propio lenguaje y requiere mucho más código que hacerlo de la manera habitual de los SP...

Código:
CREATE PROCEDURE hackeame(
	@flexibilizimo_filtro NVarChar(1000) = ' campo = 1000'
)AS

DECLARE @sql NVarChar(2000)

SET @sql = 'SELECT * FROM tabla WHERE ' + @flexibilizimo_filtro

EXEC (@sql)
Código:
CREATE PROCEDURE hackeame_v2(
	@flexibilizimo_filtro Int = 1000
)AS

SELECT * FROM tabla WHERE campo = @flexibilizimo_filtro
__________________
"El hombre, en su orgullo, creó a Dios a su imagen y semejanza."
Friedrich Nietzsche
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 3 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 10:30.