Anuncios

sábado, 21 de agosto de 2010

Ejecutar líneas de comando desde SQL SERVER

Varias personas me preguntaron si es posible crear archivos usando SQL de SQL Server. La respuesta es sí.
Existe el procedimiento almacenado xp_cmdshell que permite ejecutar comandos cmd.
Con xp_cmdshell usted puede crear archivos, ver directorios borrar archivos, crear carpetas, etc, etc, etc, utilizando el T-SQL de SQL Server.

Ejemplo:
En este ejemplo, voy a crear un directorio llamado Daniel en el disco c: usando el procedimiento almacenado xp_cmdshell desde el sql server management studio o alguna otra herramienta de su preferencia:

Xp_cmdshell ‘mkdir c:\daniel’
Es muy probable que usted al ejecutar el procedimiento almacenado, le salga el siguiente error:

Msg 15281, Level 16, State 1, Procedure xp_cmdshell, Line 1
SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', see "Surface Area Configuration" in SQL Server Books Online.

Este mensaje de error indica que este procedimiento almacenado, por defecto esta bloqueado. Por cuestiones de seguridad, se lo tiene bloqueado. Sin embargo, si el administrador de base de datos cree poder controlar que personas indeseadas no accedan al procedimiento almacenado, se lo puede habilitar de 2 maneras:

Una forma es mediante el procedimiento sp_configure:

Paso 1
--Activa las funciones avanzadas de configuracion de SQL SERVER
sp_configure 'show advanced options','1'
RECONFIGURE WITH OVERRIDE;

Paso 2
--Activa el procedimiento almacenado xp_cmdshell
sp_configure 'xp_cmdshell','1'
RECONFIGURE WITH OVERRIDE;

Una vez que se activa la opción, al correr el comando Xp_cmdshell ‘mkdir c:\daniel’, se crear una carpeta Daniel en el disco c.

La otra forma es mediante, la configuración de área expuesta. Para ver más información vea mi artículo escrito anteriormente:

Qué sucedió con la configuración de área expuesta ?

Para copiar un archivo usando xp_cmdshell

-- copia un archivo personal.bak de la carpeta e:\origen a e:\destino
xp_cmdshell 'copy e:\origen\personal.bak e:\destino'



Para crear un usuario de Windows usando xp_cmdshell
-- Crear un usuario llamado Juan con password Pa$w0rds
xp_cmdshell 'net user Juan Pa$w0rds /add'


Tienes más dudas ?. Escribe a este blog.

People who read this post also read :