2017-04-11 3 views
1

Avec VS2017, j'ai créé une DLL SQL CLR (pour SQL Server 2014) qui utilise indirectement BouncyCastle.Crypto.dll, mais je ne peux pas le CREATE ASSEMBLY pour cela. Il donne un avertissement (je l'espère), mais échoue avecComment charger un assembly avec la dépendance BouncyCastle.crypto.dll dans SQL Server 2014?

Msg 10332, niveau 16, état 1, ligne 85
Assemblée "BouncyCastle.Crypto" a été construit en utilisant la version v1.1.4322 du .NET Framework. SQL Server utilise actuellement la version v4.0.30319.

Msg 6218, niveau 16, état 2, ligne 90
CREER fixation pour montage 'SqlClrBits' a échoué parce que l'assembly 'BouncyCastle.Crypto' vérification a échoué. Vérifiez si les assemblys référencés sont à jour et fiables (pour external_access ou dangereux) à exécuter dans la base de données. Les messages d'erreur du vérificateur CLR, le cas échéant, suivront ce message
[: Org.BouncyCastle.OpenSsl.PemReader :: ReadObject] [mdToken = 0x6002e46] [offset 0x00000024] Le paramètre 'this' de l'appel doit être celui de la méthode appelante 'this' paramètre.
[: Org.BouncyCastle.OpenSsl.PemReader :: ReadObject] [mdToken = 0x6002e46] [décalage 0x00000102] Le paramètre 'this' de l'appel doit être le paramètre 'this' de la méthode appelante.

Je l'ai chargé avec succès avant (pré-BouncyCastle), qui a nécessité

CREATE ASYMMETRIC KEY MyKey ... FROM EXECUTABLE FILE ... 
CREATE LOGIN MyUser FROM ASYMMETRIC KEY MyKey 
GRANT EXTERNAL ACCESS ASSEMBLY TO MyUser 

J'ai aussi courir à contre-coeur

ALTER DATABASE MyDb SET TRUSTWORTHY ON 

J'ai même fait CREATE ASSEMBLY pour BouncyCastle.Crypto dans son propre droit . Alors ... comment charger mon assembly SQL CLR dans SQL Server?

Répondre

1

Lorsque vous obtenez une erreur SQLCLR indiquant "échec de la vérification", il est probable que vous deviez marquer cet assembly comme UNSAFE. Et ici vous aurez probablement besoin de marquer à la fois BouncyCastle.Crypto.dll et votre Assemblée qui le référence comme UNSAFE.

De même, vous devrez tester cela avec plusieurs sessions en appelant ce code exactement au même moment. On ne sait pas exactement ce que BouncyCastle est en train de faire, et il pourrait faire des choses qui supposent plus de séparation par processus, par opposition à l'hôte CLR de SQL Server qui est un domaine d'application partagé entre toutes les sessions.