Existe-t-il des risques de sécurité ou de performance particuliers à l'utilisation du CLR dans SQL Server?
La question, comme le souligné Remus, est trop générique pour obtenir une réponse car la réponse dépend du contexte de quelle fonctionnalité doit être utilisée et comment sera-t-elle utilisée.
concernant "Sécurité":
Si vous posez des questions sur tout ce qui peut être fait dans une assemblée marquée de PERMISSION_SET = SAFE
, alors il n'y a pas de problèmes que j'ai jamais pu trouver. Et SQLCLR est "plus sûr" que d'utiliser xp_cmdshell
ou le merveilleux (c'était sarcasme) sp_OA*
Procs (ou même des procédures stockées étendues, mais j'espère que personne ne crée aucun de ceux-ci).
Si vous souhaitez une promenade de ce que "sûr" signifie en termes pratiques, veuillez consulter cet article: Escalier à SQLCLR Niveau 3: Sécurité (Assemblages généraux et sûrs) (inscription gratuite requise).
Si vous posez des questions sur tout ce qui peut être fait dans une assemblée marquée de PERMISSION_SET = EXTERNAL_ACCESS
, alors il y a certainement des risques, encore une fois, en fonction de la fonctionnalité utilisée. Si vous écrivez une routine pour lire des annuaires et des noms de fichier (c'est-à-dire en lecture seule), il ne s'agit que de ce qui devrait être vu et non vu. Si vous écrivez le code qui permet de supprimer un fichier, le risque augmente. Mais quoi peut être fait avec ces ressources externes est contrôlée par:
Si vous posez des questions sur tout ce qui peut être fait dans une assemblée marquée de PERMISSION_SET = UNSAFE
, c'est assez ouvert. Beaucoup de fonctionnalités sont jugées utilisables dans des assemblées dangereuses car elles sont plus de problèmes de stabilité et/ou de comportement cohérent plus que la sécurité ou la performance. Par exemple, dans un assemblage dangereux, il est possible d'avoir une variable statique écritable. Ce n'est généralement pas une bonne chose à faire depuis que les cours SQLCLR sont partagés dans toutes les sessions. Si votre intention est de partager des données en mémoire dans toutes les sessions et de planifier des conditions de course (et faites de nombreux tests), vous devriez être bien que vous vous attendez à ce comportement. Mais si vous vouliez simplement une variable statique écritable de mettre en cache une valeur pour une session particulière ne pas avoir à la regarder à nouveau ou de le calculer à nouveau, et n'étaient pas au courant que d'autres sessions lisent cette valeur et éventuellement en écrivant, bien, Ce serait un problème.
Mais si vous êtes inquiet à propos de quelqu'un qui écrit au registre, mais je n'ai pas encore de code qui écrit au registre, vous n'avez probablement pas besoin de vous inquiéter de cela ;-).
Si vous souhaitez une promenade de la manière dont le travail externe_access et un travail dangereux de manière pratique, et la différence entre le réglage TRUSTWORTHY ON
(non préféré) vs à l'aide d'une connexion asymétrique de clé ou de certificat, veuillez consulter cet article: Escalier sur SQLCLR Niveau 4: Sécurité (assemblages externes et dangereux) (inscription gratuite requise).
concernant "Performance":
C'est tout ce que vous essayez de faire et de la façon dont vous allez le faire. Il y a des choses qui sont beaucoup Plus rapidement dans SQLCLR, et certaines choses qui sont plus lentes. Mais tout comme avec T-SQL, il est possible de prendre une tâche quelque peu simple et/ou efficace et de la rendre compliquée et/ou inefficace en faisant mal à tort. Mais l'utilisation de SQL CLR n'est pas intrinsèquement, de par sa nature même, plus lente.