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 ?
Réponse
Trop de publicités?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