Quiero ejecutar EXEC master..xp_cmdshell @bcpquery
Pero recibo el siguiente error:
SQL Server bloqueó el acceso al procedimiento 'sys.xp_cmdshell' del componente 'xp_cmdshell' porque este componente está desactivado como parte de la configuración de seguridad de este servidor. Un administrador del sistema puede habilitar el uso de 'xp_cmdshell' usando sp_configure. Para obtener más información sobre cómo habilitar 'xp_cmdshell', consulte "Configuración del área de superficie" en los Libros en pantalla de SQL Server.
¿Hay alguna forma de activar esto o ejecutar algo antes de habilitar la función?
¿Cómo resolverlo?
fuente
También puede ocultar nuevamente la opción avanzada después de reconfigurar:
fuente
Haga clic derecho en el servidor -> Facetas -> Configuración del área de superficie -> XPCmshellEnbled -> true
fuente
Como se enumera en otras respuestas, el truco (en SQL 2005 o posterior) es cambiar la configuración global para
show advanced options
yxp_cmdshell
para1
, en ese orden.Además de esto, si desea conservar los valores anteriores, puede leerlos desde el
sys.configurations
principio y luego aplicarlos en orden inverso al final. También podemos evitarreconfigure
llamadas innecesarias :Tenga en cuenta que esto se basa en SQL Server versión 2005 o posterior (la pregunta original era para 2008).
fuente
Si bien la respuesta aceptada funcionará la mayoría de las veces, he encontrado (todavía no sé por qué) algunos casos que no. Una ligera modificación de la consulta mediante el uso de
WITH OVERRIDE
inRECONFIGURE
da la soluciónLa salida esperada es
fuente
Incluso si esta pregunta se ha resuelto, quiero agregar mi consejo al respecto ... ya que como desarrollador lo ignoré.
Es importante saber que estamos hablando de que MSSQL xp_cmdshell habilitado es crítico para la seguridad, como se indica en el mensaje de advertencia:
Dejar el servicio habilitado es un tipo de debilidad que, por ejemplo, en una aplicación web podría reflejar y ejecutar comandos SQL de un atacante. El popular CWE-89 :
SQL Injection
podría ser una debilidad en nuestro software y, por lo tanto, este tipo de escenarios podría allanar el camino a posibles ataques, como CAPEC-108 :Command Line Execution through SQL Injection
¡Espero haber hecho algo agradable, nosotros, los Desarrolladores y el Ingeniero, hacemos las cosas con conciencia y estaremos más seguros!
fuente
Para mí, la única forma en SQL 2008 R2 fue esta:
fuente
Puedes hacerlo usando SQLcmd. has ejecutado el siguiente comando.
fuente