Clique no banner para conhecer e adquirir o meu treinamento de Bancos de Dados no Azure

SQL Server – The server may be running out of resources, or the assembly may not be trusted with PERMISSION_SET = EXTERNAL_ACCESS or UNSAFE

Visualizações: 2.974 views
Tempo de Leitura: 2 minutos

OlĂ¡ pessoal,
Bom dia!

Hoje vou falar sobre um problema que de vez em quando pode ocorrer com assemblies CLR que utilizem DLL’s nĂ£o suportadas (Ex: System.DirectoryServices) e foram compiladas com a permissĂ£o UNRESTRICTED (UNSAFE) ou EXTERNAL ACCESS. Ao tentar utilizar uma SP ou funĂ§Ă£o que necessite desse tipo de acesso, nos deparamos com a seguinte mensagem de erro:

A .NET Framework error occurred during execution of user-defined routine or aggregate “stpNome_Da_SP”: System.ApplicationException: Erro : An error occurred in the Microsoft .NET Framework while trying to load assembly id 65591. The server may be running out of resources, or the assembly may not be trusted with PERMISSION_SET = EXTERNAL_ACCESS or UNSAFE. Run the query again, or check documentation to see how to solve the assembly trust issues. For more information about this error: System.IO.FileLoadException: Could not load file or assembly ‘meu_assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null’ or one of its dependencies. Exception from HRESULT: 0x80FC0E21 System.IO.FileLoadException:

Esse tipo de erro geralmente ocorre devido a alguma atualizaĂ§Ă£o no .NET Framework do servidor sem reiniciar o serviço do SQL Server, e ele acaba se perdendo.

Felizmente, a soluĂ§Ă£o para esse tipo de problema Ă© muito fĂ¡cil, e basta alterar a permissĂ£o do assembly e voltar para a permissĂ£o original. No meu caso, esse assembly utiliza a permissĂ£o UNRESTRICTED, entĂ£o eu seto a permissĂ£o para EXTERNAL_ACCESS e depois volto para a UNRESTRICTED:

Esse assembly realmente necessita da permissĂ£o UNRESTRICTED, uma vez que eu importei a biblioteca SharpZipLib para utilizar rotinas de compactaĂ§Ă£o nesse CLR e por essa biblioteca utilizar finalizadores de cĂ³digo (cĂ³digo pĂ³s-compilado), realmente nĂ£o funciona com a permissĂ£o EXTERNAL_ACCESS.

Sendo assim, se vocĂª tentar realizar essas alterações de permissões pela tela do Management Studio, vocĂª irĂ¡ se deparar com uma mensagem de erro como essa:

ALTER ASSEMBLY failed because type “ICSharpCode.SharpZipLib.Tar.TarArchive” in external_access assembly “Meu_Assembly” has a finalizer. Finalizers are not allowed in external_access assemblies. (.Net SqlClient Data Provider)

Por algum motivo, quando vocĂª realiza essa alteraĂ§Ă£o pela linha de cĂ³digo (com os comandos listados acima) esse tipo de erro nĂ£o ocorre e assim podemos corrigir esse problema facilmente sem precisar publicar novamente nosso CLR.

Caso vocĂª tenha dĂºvidas, sugestões ou alguma crĂ­tica, por favor, deixe aqui nos comentĂ¡rios.
Obrigado pela visita e atĂ© o prĂ³ximo post!

A .NET Framework error occurred during execution of user-defined routine or aggregate “stpNome_Da_SP”: System.ApplicationException: Erro : An error occurred in the Microsoft .NET Framework while trying to load assembly id 65591. The server may be running out of resources, or the assembly may not be trusted with PERMISSION_SET = EXTERNAL_ACCESS or UNSAFE. Run the query again, or check documentation to see how to solve the assembly trust issues. For more information about this error: System.IO.FileLoadException: Could not load file or assembly ‘meu_assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null’ or one of its dependencies. Exception from HRESULT: 0x80FC0E21 System.IO.FileLoadException