Hola, chicos,
¡Buen día!
En este post les mostraré un problema muy común durante el desarrollo de proyectos SQL CLR, el cual consiste en el siguiente mensaje de error al intentar realizar cualquier operación con archivos:
Mensaje de error completo:
Mensaje 6522, Nivel 16, Estado 1, Línea 1
Se produjo un error de .NET Framework durante la ejecución de la rutina definida por el usuario o agregado “fncArquivo_Ler”:
System.Security.SecurityException: falló la solicitud de permiso de tipo 'System.Security.Permissions.FileIOPermission, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.
System.Security.SecurityException:
en System.Security.CodeAccessSecurityEngine.Check (demanda de objeto, StackCrawlMark y stackMark, booleano isPermSet)
en System.Security.CodeAccessPermission.Demand()
en System.IO.FileStream.Init (ruta de cadena, modo FileMode, acceso a FileAccess, derechos Int32, derechos de uso booleanos, recurso compartido de FileShare, tamaño de búfer Int32, opciones FileOptions, SECURITY_ATTRIBUTES secAttrs, String msgPath, booleano bFromProxy, booleano useLongPath, booleano checkHost)
en System.IO.FileStream..ctor (ruta de cadena, modo FileMode, acceso a FileAccess, recurso compartido de FileShare, tamaño de búfer Int32, opciones de FileOptions, String msgPath, booleano bFromProxy, booleano useLongPath, booleano checkHost)
en System.IO.StreamReader..ctor (ruta de cadena, codificación de codificación, detección booleanaEncodingFromByteOrderMarks, tamaño de búfer Int32, checkHost booleano)
en System.IO.StreamReader..ctor (ruta de cadena)
en UserDefinedFunctions.fncArquivo_Ler(String Ds_Path)
¿No sabes qué es CLR, o no sabes cómo crear tu primer proyecto SQLCLR, cómo publicar o tienes preguntas sobre esta poderosa herramienta de SQL Server? Accede a este post y aprende los conceptos básicos..
Identificando el problema
La razón por la que ocurre este error se puede verificar analizando la forma en que se publicó el ensamblaje SQLCLR en el servidor:

Como sabe, con el permiso establecido en Seguro, el ensamblado en realidad no tendrá acceso para manipular archivos, solo con los niveles de permiso Acceso externo o Inseguro (ahora llamado Sin restricciones).
Analicemos qué conjunto de permisos está configurado en Visual Studio:

Aquí está el problema. En Visual Studio, el ensamblado está configurado para compilarse con el nivel de permiso INSEGURO, pero el ensamblado se crea con el nivel de permiso SEGURO.
¿Y ahora?
la solucion
Chicos, cálmense. Esto no es culpa de Visual Studio. Este error se produce porque un paso importante en la publicación Introducción a SQL CLR en SQL Server no se siguió, que es la definición de los permisos del proyecto (Biblioteca de clases) que se importó a nuestro proyecto CLR:

Simplemente haga este simple cambio y vuelva a publicar su CLR para que se cree correctamente y sus rutinas funcionen como se esperaba:

¡Eso es todo!
Gracias por visitarnos y nos vemos en el próximo post.


Comentários (0)
Carregando comentários…