Hoje foi solicitado que uma rotina de leitura e criação de arquivos fossem executadas pela rotina do xp_cmdshell sem permissão de sysadmin, abaixo segue roteiro de como resolvi este problema.
1 – Iremos necessitar da criação de uma conta de serviço no AD com as opções de expiração e troca de senhas desativadas:
Usuário: xp_cmdshell_proxy_account
Senha: 12345678
2 – Iremos adicionar a conta de serviço xp_cmdshell_proxy_account conforme imagem abaixo:
Link da documentação: https://learn.microsoft.com/en-us/windows/security/threat-protection/security-policy-settings/log-on-as-a-batch-job
3 – Criar a credencial de proxy no SQL Server com grant para usuário da aplicação chamado USR_APP que ira executar a xp_cmdshell:
USE master;
GO
CREATE CREDENTIAL ##xp_cmdshell_proxy_account## WITH IDENTITY = 'cesardba.net\xp_cmdshell_proxy_account', SECRET = '12345678';
USE [master];
GO
GRANT EXEC ON xp_cmdshell TO USR_APP;
GO
4 – A procedure xp_cmdshell seria executado para fazer leitura em um mapeamento na rede, foi necessário dar permissão de leitura e escrita no mapeamento do servidor web \\srv01\arquivos para a conta cesardba.net\xp_cmdshell_proxy_account do proxy SQL Server:
5 – Testando a leitura de arquivos no diretório pelo SQL Server Management Studio com a procedure xp_cmdshell conectado com o usuário usado na aplicação USR_APP:
EXEC xp_cmdshell 'whoami.exe'
EXEC xp_cmdshell 'dir /B "\\srv01\arquivos"';
Resumo do poste, como utilizar a procedure xp_cmdshell sem permissão de sysadmin de forma simples e direta.