sql server 2008 - enable - Habilitar el servidor SQL ''xp_cmdshell''
xp_cmdshell sql server 2008 ejemplo (6)
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'' utilizando sp_configure. Para obtener más información sobre la habilitación de ''xp_cmdshell'', consulte "Configuración de á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?
Como se detalla en otras respuestas, el truco (en SQL 2005 o posterior) es cambiar la configuración de configuración global para show advanced options
y xp_cmdshell
a 1
, en ese orden.
Además, si desea conservar los valores anteriores, puede leerlos desde sys.configurations
primero y luego aplicarlos en orden inverso al final. También podemos evitar llamadas de reconfigure
innecesarias:
declare @prevAdvancedOptions int
declare @prevXpCmdshell int
select @prevAdvancedOptions = cast(value_in_use as int) from sys.configurations where name = ''show advanced options''
select @prevXpCmdshell = cast(value_in_use as int) from sys.configurations where name = ''xp_cmdshell''
if (@prevAdvancedOptions = 0)
begin
exec sp_configure ''show advanced options'', 1
reconfigure
end
if (@prevXpCmdshell = 0)
begin
exec sp_configure ''xp_cmdshell'', 1
reconfigure
end
/* do work */
if (@prevXpCmdshell = 0)
begin
exec sp_configure ''xp_cmdshell'', 0
reconfigure
end
if (@prevAdvancedOptions = 0)
begin
exec sp_configure ''show advanced options'', 0
reconfigure
end
Tenga en cuenta que esto depende de SQL Server versión 2005 o posterior (la pregunta original era para 2008).
Necesitas habilitarlo. Consulte la sección Permiso de los documentos de xp_cmdshell MSDN :
http://msdn.microsoft.com/en-us/library/ms190693.aspx :
-- To allow advanced options to be changed.
EXEC sp_configure ''show advanced options'', 1
GO
-- To update the currently configured value for advanced options.
RECONFIGURE
GO
-- To enable the feature.
EXEC sp_configure ''xp_cmdshell'', 1
GO
-- To update the currently configured value for this feature.
RECONFIGURE
GO
Si bien la respuesta aceptada funcionará la mayoría de las veces, he encontrado (todavía no sé por qué) algunos casos que sí lo hacen. Una ligera modificación de la consulta al usar WITH OVERRIDE
RECONFIGURE
en RECONFIGURE
brinda la solución
Use Master
GO
EXEC master.dbo.sp_configure ''show advanced options'', 1
RECONFIGURE WITH OVERRIDE
GO
EXEC master.dbo.sp_configure ''xp_cmdshell'', 1
RECONFIGURE WITH OVERRIDE
GO
El resultado esperado es
La opción de configuración ''mostrar opciones avanzadas'' cambió de 0 a 1. Ejecute la instrucción RECONFIGURE para instalar.
La opción de configuración ''xp_cmdshell'' cambió de 0 a 1. Ejecute la instrucción RECONFIGURE para instalar.
También puede ocultar nuevamente la opción avanzada después de reconfigurar:
-- show advanced options
EXEC sp_configure ''show advanced options'', 1
GO
RECONFIGURE
GO
-- enable xp_cmdshell
EXEC sp_configure ''xp_cmdshell'', 1
GO
RECONFIGURE
GO
-- hide advanced options
EXEC sp_configure ''show advanced options'', 0
GO
RECONFIGURE
GO