OlĂ¡ pessoal,
Bom dia!
Neste post vou mostrar pra vocĂªs um problema muito comum durante o desenvolvimento de projetos SQL CLR, que consiste na mensagem de erro abaixo ao tentar executar qualquer operaĂ§Ă£o com arquivos:
Mensagem de erro completa:
Msg 6522, Level 16, State 1, Line 1
A .NET Framework error occurred during execution of user-defined routine or aggregate “fncArquivo_Ler”:
System.Security.SecurityException: Request for the permission of type ‘System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089’ failed.
System.Security.SecurityException:
at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
at System.Security.CodeAccessPermission.Demand()
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.StreamReader..ctor(String path, Encoding encoding, Boolean detectEncodingFromByteOrderMarks, Int32 bufferSize, Boolean checkHost)
at System.IO.StreamReader..ctor(String path)
at UserDefinedFunctions.fncArquivo_Ler(String Ds_Caminho)
NĂ£o sabe o que Ă© CLR, ou nĂ£o sabe com criar seu primeiro projeto SQLCLR, como publicar ou tem dĂºvidas sobre essa poderosa ferramenta do SQL Server? Acesse este post e aprenda o bĂ¡sico.
Identificando o problema
O motivo desse erro estar ocorrendo pode ser verificado analisando a forma como o Assembly do SQLCLR foi publicado no servidor:
Como vocĂªs sabem, com a permission set Safe realmente o assembly nĂ£o terĂ¡ acesso para manipulaĂ§Ă£o de arquivos, apenas com os nĂveis de permissĂ£o External Access ou Unsafe (agora chamado de Unrestricted).
Vamos analisar qual o permission set que estĂ¡ configurada no Visual Studio:
Eis o problema. No Visual Studio estĂ¡ configurado para o assembly ser compilado com o nĂvel de permissĂ£o UNSAFE, mas o assembly estĂ¡ sendo criado com o nĂvel de permissao SAFE.
E agora ?
A soluĂ§Ă£o
Pessoal, calma. Isso nĂ£o Ă© uma falha do Visual Studio. Esse erro estĂ¡ ocorrendo pois um passo importante do post IntroduĂ§Ă£o ao SQL CLR no SQL Server nĂ£o foi seguido, que Ă© a definiĂ§Ă£o das permissões do projeto (Class Library) que foi importado no nosso projeto CLR:
Basta realizar essa simples alteraĂ§Ă£o e publicar novamente o seu CLR para que ele seja criado corretamente e suas rotinas funcionem conforme o esperado:
É isso aĂ!
Obrigado pela visita e atĂ© o prĂ³ximo post.
Vc Ă© o cara! JĂ¡ estava ficando maluco com esse problema. Grato.