Question

Je dois utiliser une DLL tierce partie dans un déclencheur c # code CLR dans SQL Server

Mais quand je tente d'ajouter une référence, il montre juste quelques DLL de SQL Server.

Comment puis-je ajouter mon dll tiers à SQL Server?

Était-ce utile?

La solution

Vous ne pouvez ajouter des références à ces assemblées qui ont été enregistrés avec Sql Server. Si elles ne sont pas enregistrés, ils n'apparaissent dans la boîte de dialogue Ajouter une référence.

Il y a un certain nombre d'étapes que vous devrez faire enregistrer une DLL, d'une part, vous devrez reconfigurer votre base de données:

ALTER DATABASE [MyDatabase] SET TRUSTWORTHY ON;
sp_configure 'clr enabled', 1;
RECONFIGURE;

Une fois cela fait, Sql Server est activé CLR. Ensuite, vous devrez enregistrer votre assemblée:

CREATE ASSEMBLY [MyAssembly] AUTHORIZATION [MyUser]
FROM 'C:\CLR\MyAssembly.dll'
WITH PERMISSION_SET = SAFE

Si ce dernier script fonctionne correctement, l'est maintenant enregistré assemblée, et apparaîtra dans la boîte de dialogue Ajouter une référence.

Ce que vous devez considérer que, est la sécurité des applications de votre configuration Sql Server CLR:

  1. Vous préférez enregistrer un assemblage SAFE, que dans des circonstances exceptionnelles si vous utilisez EXTERNAL_ACCESS ou UNSAFE.
  2. Ne vous attendez pas à pouvoir faire tout ce que vous pouvez sur CLR plein de confiance (à savoir, pas le CLR hébergé par Sql Server) -. Le SQLCLR est un moteur d'exécution sandbox
  3. Ne pas essayer de les assemblages de charge dynamique, comme Assembly.Load() est volontairement limité.
  4. Vous devrez peut-être assurer la bibliothèque 3ème partie est signé avec une clé publique si vous prévoyez d'utiliser UNSAFE.
  5. exécution de code fonctionne dans le contexte de l'identité du service en cours d'exécution Sql Server (je pense!)
  6. Accès base de données fait à partir d'un assemblage hébergé (par exemple via context connection = true;) exécute dans le contexte de l'utilisateur connecté, vous devez vous assurer que vous savez ce que l'accès de cette bibliothèque doit vos données.

Autres conseils

Je suppose que vous demandez des solutions de rechange à l'installation d'ensembles SQL CLR de Visual Studio.

Avoir le code dans Visual Studio n'est pas nécessaire.

base de données CLR objets Déploiement sur les détails MSDN options, y compris les instructions SQL et des scripts de déploiement.

J'utilise une très grande DLL 3ème partie qui prend une page Web et le convertit en un fichier PDF.

Le PDF est enregistré sur un partage de fichiers et la base de données est mise à jour de son emplacement et le type.

Ceci est un procédé en 3 étapes:

  1. Créer une application console qui utilise la DLL 3ème partie pour créer le PDF et accepter l'URL et CheminFichier en tant que paramètres et retourne la taille du PDF et le nombre de pages.

  2. Créer une procédure stockée CLR qui appelle ensuite l'application de la console sur le serveur

  3. J'enveloppe tout cela en une seule procédure stockée qui appelle l'application CLR pour créer le PDF et puis j'écrire les méta-données relatives à la base de données.

Je sais que ce n'est pas parfait et doit en aucun cas vous faire quoi que ce soit si fou dans un déclencheur!

Je ne mentionne ici pour d'autres questions sur l'utilisation 3rd Party DLL dans leur CLR.

Mon espoir est que par essaimage d'une console cmd.exe pour exécuter le 3rd Party DLL, au lieu de courir tout en proc, si elle se bloque, il ne compromettra pas SQL Server autant. Voilà ce que je souhaite.

S'il vous plaît commentaire si cette approche est vraiment mauvais-et pourquoi.

Licencié sous: CC-BY-SA avec attribution
Non affilié à dba.stackexchange
scroll top