none
Ejecutar Public Void de ensamblado DLL en SQLServer 2012 RRS feed

  • Pregunta

  • Estimados,

    Ya le he dado artas vueltas a este problema sin encontrar la razón.

    Tengo una DLL realizada con C# que realiza un UPDATE a Tabla por SQL en un servidor X.

    Ensamblé esta DLL a SQLSERVER 2012 sin problema y ademas creé un procedimiento almacenado que la llama.

    Al ejecutar el procedimiento no da error, pro al parecer no realiza las instrucciones del UPDATE.

    Para asegurarme que la DLL estuviera correcta, realicé un projecto web básico que consumiera esta DLL y todo funcionó correctamente.

    El problema es que SQLSERVER, a pesar de reconocer la CLASE y el VOID de la DLL, no ejecuta su el contenido.

    ¿Me estará faltando algo?

    Este es el SQL utilizado.

    --CONFIGURACION DE PERMISOS
    sp_configure 'show advanced options', 1;
    GO
    RECONFIGURE;
    GO
    sp_configure 'clr enabled', 1;
    GO
    RECONFIGURE WITH OVERRIDE;
    GO

    --REGISTRO DLL EN SQLSERVER
    CREATE ASSEMBLY DllTest FROM 'C:\web_X\dll\FCDLL.dll'  
    WITH PERMISSION_SET = SAFE -- no me permite otro permiso
    Go 

    --CREO SP QUE LLAMA A DLL
    CREATE PROCEDURE SP_CALLDLL (@desde AS INT)
    AS
    EXTERNAL NAME [DllTest].[FCDLL.Class1].[UpdTest]
    Go

    --RE-ASIGNO PERMISOS
    sp_configure 'clr enabled',1 
    go 
    reconfigure with override 
    go

    --LLAMO A SP Y FN
    EXEC SP_CALLDLL 98765

    Reconoce todo, pero no ejecuta las instrucciones de [UpdTest], que si lo llamo desde un proyecto WEB funciona sin problema.

    Quedo a atento a comentarios. Saludos y gracias.

    viernes, 4 de agosto de 2017 15:37

Respuestas

  • Me temo que con PermissionSet=Safe no vas a poder acceder a un servidor externo, ni con SQL ni de ninguna otra manera, ya que este permiso no lo permite. Como mínimo vas a necesitar EXTERNAL_ACCESS, y si con esto no basta, es posible que incluso tengas que usar UNSAFE. Nótese que para poderle dar estos permisos al Assembly necesitarás o bien marcar esa base de datos como "de confianza" (alter database ... set trustworthy on), o firmar la DLL con un certificado y otorgar permisos adecuados al código firmado por ese certificado.
    • Propuesto como respuesta Enrique AA lunes, 7 de agosto de 2017 16:57
    • Marcado como respuesta Moderador M lunes, 14 de agosto de 2017 19:07
    sábado, 5 de agosto de 2017 19:31