4 votes

Extraire une assembly SQLCLR

Une de nos applications internes a une assembly SQLCLR qui rencontre actuellement des problèmes. Le développeur a du mal à recréer le problème en utilisant la version stockée dans notre système de contrôle de source, il suspecte donc qu'un code a été publié qui n'a pas été téléchargé dans le système de contrôle de source. Existe-t-il un moyen d'extraire une assembly SQLCLR dans un fichier .dll afin qu'il puisse l'analyser en reverse engineering ?

8voto

minty Points 7864

Il existe en effet un moyen - les assemblages sont stockés dans la table sys.assembly_files de votre base de données. Sélectionnez tout depuis sys.assembly_files et trouvez l'assembly_id, puis exécutez le code suivant (en changeant d'abord l'assembly_id et le chemin SaveToFile):

DECLARE @IMG_PATH VARBINARY(MAX)
DECLARE @ObjectToken INT

SELECT @IMG_PATH = content FROM sys.assembly_files WHERE assembly_id = 65536

EXEC sp_OACreate 'ADODB.Stream', @ObjectToken OUTPUT
        EXEC sp_OASetProperty @ObjectToken, 'Type', 1
        EXEC sp_OAMethod @ObjectToken, 'Open'
        EXEC sp_OAMethod @ObjectToken, 'Write', NULL, @IMG_PATH
        EXEC sp_OAMethod @ObjectToken, 'SaveToFile', NULL, 'D:\SqlServerProject1.dll', 2
        EXEC sp_OAMethod @ObjectToken, 'Close'
        EXEC sp_OADestroy @ObjectToken

Cependant, pour que cela fonctionne, vous devrez activer la fonctionnalité d'automatisation OLE dans la Configuration de la surface pour les fonctionnalités de votre instance SQL.

J'ai trouvé ce code ici:
http://social.msdn.microsoft.com/Forums/en/sqlnetfx/thread/1e00e656-f322-45ec-b4e0-83db748fa97a

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X