web-dev-qa-db-fra.com

Risques de sécurité ou de performance utilisant SQL CLR

Existe-t-il des risques de sécurité ou de performance particuliers à l'utilisation du CLR dans SQL Server?

11
SQLBen

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:

  • que vous utilisiez ou non une impersonnation:
    • aucune impersonnation signifie que l'accès aux ressources externes est effectué via le compte "Connexion en tant que" du service SQL Server. Quoi que ce compte ait accès à votre compte SQLCLR pourra faire.
    • l'utilisation de l'impersonnation signifie que la connexion dans SQL Server qui exécute la fonction, si ce nom de connexion correspond à une connexion Windows, peut faire ce que la connexion Windows est autorisée à faire. Si la connexion à SQL Server est une connexion SQL Server, la tentative d'utilisation d'une impersonnation obtiendra une erreur.
  • Quelles autorisations sont configurées sur la ressource externe. Pour l'accès au système de fichiers, celui-ci est contrôlé via des ACLS sur les lecteurs NTFS.

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.

10
Solomon Rutzky