Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Por que o xp_cmdshell não funciona no SQL Server 2012?


Isso foi desabilitado imediatamente a partir do SQL Server 2005, quando eles introduziram o Ferramenta de configuração da área de superfície , em um esforço para tornar o SQL Server mais seguro por padrão. Essa ferramenta foi desativada, mas você ainda pode controlar o comportamento usando sp_configure . Um exemplo é mostrado no MSDN :
-- 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

(Eu também blog sobre isso há muitos anos .)

A razão é que esta é uma falha de segurança potencial. Se você permitir que o SQL Server execute xp_cmdshell , então eles teoricamente podem enviar qualquer comando do sistema operacional lá, ignorando toda e qualquer segurança que você achava que tinha. Isso é especialmente problemático quando a conta de serviço do SQL Server e/ou a conta proxy foram elevadas para sysadmin ou outros níveis, porque isso é mais fácil do que definir explicitamente apenas as coisas exatas que devem ser capazes de fazer.

Em vez de habilitá-lo e desabilitá-lo para dar suporte à interação de linha de comando, uma maneira popular de expor a funcionalidade do sistema operacional e ainda ter algum controle sobre a segurança é implementar a funcionalidade no nível do sistema operacional necessária usando SQL-CLR. Aqui está um bom ponto de partida para acessar o sistema de arquivos com CLR (no entanto, se você pesquisar por aí, encontrará abordagens muito mais modernas e exaustivas).