xp_cmdshell y seguridad

10/01/2005 - 17:05 por dile57-cosas | Informe spam
hola,
me he encontrado con el siguiente problema de seguridad en la
aplicacion que estoy desarrollando y necesitaba algo de ayuda,
gracias.


antecedentes:
tenemos un procedimiento almacenado que realiza una serie de
inserciones y actualizaciones contra una serie de tablas.

si este procedimiento se realiza con exito debemos ejectutar un
comando del sistema (este comando abre una conexion a una
maquina remota, le envia una breve informacion y cierra la conexion)

PROCEDURE sp_hace_cosas_y_envia_informe
inserta tablaZ
actualiza t1
...
SI todo_esta_correcto
@COMANDO = 'c:\talk.exe' + @CODIGO
EXEC master..xp_cmdshell @COMANDO
FINSI

FIN PROCEDURE

el problema:
para que este procedimiento almacenado pueda lanzar el programa
de comunicaciones debo permitir la ejecucion de el procedimiento
extendido xp_cmdshell al usuario que ejecuta el procedimiento
'sp_hace_cosas_y_envia_informe'

cosa que me parece, cuando menos, bastante osada :-)
puesto que ese usuario podria ejecutar cualquier comando del sistema.
borrar archivos importantes, por ejemplo.


la pregunta:
¿hay alguna forma de permitir la ejecucion de un programa en concreto?
o mejor aun...
hay forma de decir: "este procedimiento almacenado tiene permiso
para lanzar este procedimiento" asi evitaria dar cualquier tipo
de permiso adicional al usuario que usa el procedimiento.

¿como solucionariais este problema?

-

espero haberme explicado bien,
muchas gracias, un saludo
 

Leer las respuestas

#1 Paulino Padial
10/01/2005 - 17:35 | Informe spam
hombre podrias solucionarlo de muchas formas,
una de ellas seria a nivel de Sistema Operativo, utilizando una usuario de
windows, y que pertenece a un grupo, que tiene directivas, etc.. que le
permitan solo ejecutar, los programas que desees, o que tenga permisos solo
sobre lo que tu desees. Eso creo que seria de lo mejor... asi a bote pronto.

Tb podrias, pues depende, crear un procedimiento, y ver que es el comando
que te manda el usuario, y que dentro del procedimiento, permitas o
restringas el lanzado de cmdshell, por ejemplo, si la cadena de la operacion
contiene la palabra delete, no hagas nada. ¿se comprende?

Algo así estaria bien.
Ahora.. el tema del xp_cmdshell a un usuario de una aplicacion, lo
mejor, si no hay mas remedio, ( es decir, no puedes invocar Jobs.. o la
Aplicacion, GUI cliente, que es la que deberiahacer esas cosas, no puede
hacerlo..) y te ves TOTALMENTE OBLIGADO a usar un xp_cmdshell, con ordenes
de un usuario pues lo haria quizas, de las dos formas, uqe te he dicho
antes. Por si... falla un administrador en dar permisos... y por si falla,
alguna casuística de tu sp.

¿en que entorno se esta dando esto? es decir, es una aplicacion grafica que
ataka a base de datos? o es quizas una aplicacion, web, que ataka a base de
datos? con solo gente de intranet? gente de fuera? :S
bueno con lo que te he dicho espero haberte ayudado.

Saludos cordiales,

__________________________________________

Paulino Padial López
Murcia - España

Microsoft SQL-Server Administrator.
Microsoft Certified Solution Developer
Microsoft Certified Trainer
Oracle Certified Asociate
__________________________________________
"rodrigo" escribió en el mensaje
news:
hola,
me he encontrado con el siguiente problema de seguridad en la
aplicacion que estoy desarrollando y necesitaba algo de ayuda,
gracias.


antecedentes:
tenemos un procedimiento almacenado que realiza una serie de
inserciones y actualizaciones contra una serie de tablas.

si este procedimiento se realiza con exito debemos ejectutar un
comando del sistema (este comando abre una conexion a una
maquina remota, le envia una breve informacion y cierra la conexion)

PROCEDURE sp_hace_cosas_y_envia_informe
inserta tablaZ
actualiza t1
...
SI todo_esta_correcto
@COMANDO = 'c:\talk.exe' + @CODIGO
EXEC master..xp_cmdshell @COMANDO
FINSI

FIN PROCEDURE

el problema:
para que este procedimiento almacenado pueda lanzar el programa
de comunicaciones debo permitir la ejecucion de el procedimiento
extendido xp_cmdshell al usuario que ejecuta el procedimiento
'sp_hace_cosas_y_envia_informe'

cosa que me parece, cuando menos, bastante osada :-)
puesto que ese usuario podria ejecutar cualquier comando del sistema.
borrar archivos importantes, por ejemplo.


la pregunta:
¿hay alguna forma de permitir la ejecucion de un programa en concreto?
o mejor aun...
hay forma de decir: "este procedimiento almacenado tiene permiso
para lanzar este procedimiento" asi evitaria dar cualquier tipo
de permiso adicional al usuario que usa el procedimiento.

¿como solucionariais este problema?

-

espero haberme explicado bien,
muchas gracias, un saludo

Preguntas similares