SQL Server – Permissões para utilizar OLE Automation (Sim, a documentação está errada)

Visualizações: 416
Tempo de Leitura: 4 minutos

Fala pessoALL!!
Nesse artigo bem simples e rápido, vou compartilhar com vocês quais as permissões para utilizar OLE Automation, um recurso do SQL Server que permite utilizar DLL’s e API’s do Windows através de chamadas de Stored Procedures para realizar diversas tarefas dentro do banco de dados, como Operações com Arquivos, utilizar expressões regulares (RegExp) e até mesmo, realizar requisições Web.

Introdução

Como eu já havia comentado no post Introdução ao SQL CLR (Common Language Runtime) no SQL Server, o grande problema do OLE Automation, é que ao habilitar esse recurso, qualquer usuário (com permissão) pode criar qualquer coisa com isso, uma vez que os comandos não são gerenciados e são executados dentro do processo do SQL Server. Em caso de falha de vazamento de memória (o que não é tão incomum), a instância pode ser parada, pois o processo do SQL Server é fechado automaticamente pelo sistema operacional (!!!!)

Além disso, é difícil encontrar documentação precisa sobre OLE Automation e é bem complexo criar rotinas utilizando esse recurso. Por este motivo, recomendo a substituição de rotinas OLE Automation por packages do SSIS e, caso não seja possível, rotinas utilizando SQLCLR, conforme já descrevo as vantagens no artigo já citado.

Permissões para utilizar OLE Automation

Caso você realmente tenha alguma necessidade bem específica que exige o uso de OLE Automation (e você não quer utilizar o SQLCLR), você já deve ter lido a documentação da Microsoft e em vários outros blogs brasileiros e americanos, que indicam que, para utilizar as procedures do OLE Automation (sp_OA*), você deve obrigatoriamente pertencer à server role sysadmin, correto? E aí você tem que liberar permissão de sysadmin para o usuário pode criar os objetos ou acaba negando essa solicitação, né ?

Versão em inglês:

Versão em português:

Todas as páginas da documentação dessas procedures sp_OA* possuem esse mesmo requisito de permissão (sysadmin). Mas e se eu te falar que isso NÃO é verdade e é muito fácil provar isso? 🙂

O primeiro passo para isso é Habilitar o OLE Automation na instância:

Caso você não faça isso, irá se deparar com essa mensagem de erro:

Msg 15281, Level 16, State 1, Procedure sp_OACreate, Line 1 [Batch Start Line 0] SQL Server blocked access to procedure ‘sys.sp_OACreate’ of component ‘Ole Automation Procedures’ because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of ‘Ole Automation Procedures’ by using sp_configure. For more information about enabling ‘Ole Automation Procedures’, search for ‘Ole Automation Procedures’ in SQL Server Books Online.

Agora, vamos criar um novo usuário para testar se consigo utilizar o OLE Automation sem estar na server role sysadmin:

E agora, conectado com o usuário teste_OA, vamos tentar tentar utilizar o OLE Automation com o código abaixo:

E ao tentar executar, recebemos a seguinte mensagem:

Msg 229, Level 14, State 5, Procedure sp_OACreate, Line 1 [Batch Start Line 0] The EXECUTE permission was denied on the object ‘sp_OACreate’, database ‘mssqlsystemresource’, schema ‘sys’.

Pois bem, para resolver esse problema de permissão é MUITO simples e NÃO exije que o usuário esteja na role sysadmin:

E agora, tentando executar novamente o script acima:

SUCESSO! Conseguimos executar o script OLE Automation normalmente, com apenas as permissões necessárias.

Espero que tenham gostado desse artigo e até a próxima.
PS: Podem deixar que vou enviar uma solicitação de correção da documentação 🙂

Documentação Corrigida – “Mãe, tô na Globo!”