Les risques de sécurité de réglage de confiance = dans sql server 2012
J'obtiens les erreurs suivantes dans ma base de données de développement:
A .NET Framework error occurred during execution of user-defined routine or aggregate "SpCreateTable":
System.Security.HostProtectionException: Attempted to perform an operation that was forbidden by the CLR host.
The protected resources (only available with full trust) were: All
The demanded resources were: Synchronization, ExternalThreading
Est la bonne solution pour régler digne de confiance =? Quels sont les problèmes de sécurité avec cette?
OriginalL'auteur cdub | 2014-11-18
Vous devez vous connecter pour publier un commentaire.
La
TRUSTWORTHY
propriété d'une base de données (lorsqu'il est défini àON
) essentiellement déclare à SQL Server que le code contenu dans la base de données, et l'exécution dans un contexte représenté, devraient être autorisés à accéder à l'extérieur de la base de données tout en conservant l'identité de cet contexte de sécurité. Il permet également de tous SQLCLR Assemblées dans la Base de données pour être mis àEXTERNAL_ACCESS
etUNSAFE
, que ce soit ou pas que le code atteint à l'extérieur du serveur (à l'extérieur de sens: l'accès réseau, accès au système de fichiers, l'accès au registre, de l'environnement, accès, etc).C'est plutôt un moyen générique de permettre à ce qu'il couvre l'ensemble du code dans la base de données. À l'aide de Certificats et/ou des Clés Asymétriques à signer des modules--proc et/ou assemblées--de permettre un contrôle plus précis de ce code dispose que les autorisations.
Définir une Base de données
TRUSTWORTHY
autorise également tout le processus de départ dans cette Base de données pour atteindre le niveau du Serveur et/ou à travers d'autres Bases de données. Normalement, un processus est confiné /mis en quarantaine à la Base de données où il a commencé. Si la Base de données est la propriété de la Connexion "sa", puis sur tout le processus initié dans la Base de données et exécute en tant que "dbo" va effectivement avoir "sa" privilèges (oups!).Plutôt que d'essayer de décrire ici, dans le niveau de détail nécessaire pour communiquer les détails à propos de l'usurpation d'identité, s'étendant dit usurpation d'identité, la signature de modules, etc, je vous recommande de parcourir les ressources suivantes à ce sujet:
C'est un document très instructif qui couvre la plupart des aspects de ce sujet, et est également référencé dans la page liée ci-dessus.
C'est un article que j'ai écrit dans le cadre d'une série sur SQLCLR qui a des exemples qui illustrent les différences entre la méthode digne de CONFIANCE et la signature de l'Assemblée basé sur la méthode Connexion; inscription Gratuite est requise.
Vous devriez éviter la création de votre base de données pour
TRUSTWORTHY
autant que possible. Si vous devez vraiment avoir le multithreading /appels asynchrones ET si vous avez le code source et le compiler l'assemblée, je ne peux pas penser à une raison pour utiliser leSET TRUSTWORTHY ON
option. Au lieu de cela, vous devez vous inscrire à l'assemblée avec un mot de passe et utilisez les commandes suivantes pour configurer la méthode préférée de permettreEXTERNAL_ACCESS
etUNSAFE
assemblées:Une fois que c'est en place, vous pouvez aller à la base de données où votre assemblée a été chargé et exécuté:
Ou vous pourriez avoir inclus
WITH PERMISSION_SET = UNSAFE
à la fin de laCREATE ASSEMBLY
commande.+1 pour offrir une solution valable, mais vous n'avez pas vraiment répondu à la vraie question (spécifique et explicite des risques au sujet digne de CONFIANCE dans le général).
Êtes-vous sûr que l'assemblée est fixé à DANGEREUX? L'erreur que vous avez posté est ce que vous obtenez lorsque l'assemblée n'est pas définie dangereux. Ou, quand il était DANGEREUX, mais alors la Connexion a été retiré ou au moins a la
UNSAFE ASSEMBLY
autorisation retirée. Si rien de tout cela n'est pas le cas, alors quel est le cadre des méthodes êtes-vous d'appeler votre proc méthode?Merci. Et j'ai maintenant mis à jour la réponse à fournir des détails et des liens vers plus d'informations sur les implications de CONFIANCE.
Salomon, et Aaron comment faire pour vous inscrire System.DirectoryServices.AccountManagement.dll sur SQL Server 2016 sans l'aide digne de CONFIANCE? J'ai essayé et essayé, mais n'arrive pas à le faire fonctionner avec une clé ASYMÉTRIQUE.
OriginalL'auteur Solomon Rutzky
Réglage
TRUSTWORTHY ON
ouvre une faille de sécurité potentielle en permettant à tout code d'arriver à des ressources externes en vertu de la base de données de contexte d'emprunt d'identité. Il est parfaitement bien pour permettre à votre base de données à accès protégé des partages réseau à l'aide d'un code que vous êtes en contrôle de, mais il peut ne pas être sage, pour permettre le même pour n'importe quel code.Cette option ouvre juste la porte à une personne acquise dbo des autorisations pour un particulier DB comme vous pouvez vous inscrire toute l'assemblée et qu'il a DB contexte d'emprunt d'identité, à sa discrétion.
OriginalL'auteur Vitaly