Executando Comandos do Prompt

Esta é uma dúvida recorrente entre as turmas de SQL Server. Como executar um comando do prompt do Windows através de um script t-SQL.

O xp_cmdshell é a procedure de sistema usada para executar comandos, tais como do prompt de comando do Windows.

Obviamente que por motivos de segurança esta feature vem desabilitada no SQL Server.

Como funciona a segurança

Quando executamos um comando através do xp_cmdshell este utiliza a credencial chamada ##xp_cmdshell_proxy_account##, logo se esta credencial não existir ela poderá ser criada utilizando a sp_xp_cmdshell_proxy_account passando como parâmetro usuário do Windows e a senha.

Utilizamos este método para dar permissão a um usuário que não é sysadmin, porém também é possível dar esta permissão utilizando “Grant exec on xp_cmdshell to sqlcrespi

Dependendo da regra utilizada ainda é possível utilizar o contexto de segurança para outro login utilizando o execute as login.

Na prática para habilitar e executar um comando de prompt basta seguir o exemplo abaixo:

Para verificar se o cmd_Shell está habilitado

select name, value_in_use from sys.configurations 
	where name = 'xp_cmdshell'

Para habilitar o cmd_Shell


sp_configure 'Advanced option' , 1

reconfigure

go

sp_configure 'xp_cmdshell', 1

go

sp_configure 'Advanced option' , 0

reconfigure

Exemplo

Executando Xcopy para copiar o backup do diretório D: para o diretório S:


xp_cmdshell 'xcopy D:\aw.bak S:\ /y /s /v'

cmdshell

Abraço, Rodrigo

Deixe uma resposta

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.