none
Code Access Security: Déploiement DLL.Net (VB.net) sur un réseau d'entreprise (Security Exception) RRS feed

  • Question

  • Bonjour à tous,

     

    Actuellement, j'ai  développé une DLL en VB.Net sous Visual Studio 2005. Cet assembly contient une méthode de connection à une bdd Access, et une méthode pour l'envoi de mail via Outlook.

     

    Je souhaite pouvoir appellé cette DLL a partir de Access, Excel et VB6. Cela fonctionne très bien lorsque ma DLL est installlé sur le disque local de ma machine (C:/). Cependant, mon problème intervient lorsque je souhaite installé ma DLL sur le réseau (sur un disque O:/ par exemple). En effet, lorsque je fait appel à la DLL sur le réseau, une erreur de sécurité intervient (Security Exception) :

     

    Request for the permission of type 'System.Security.Permissions.SecurityPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicToken=b77a5c5611934...' failed

     

    Je travail au sein d'une entreprise dans laquelle je possede aucun droits d'administration.

     

    Apres de nombreuses recherches, j'ai découvert que cela était lié au Code Access Security (CAS). En effet, ma DLL placé sur le réseau, n'a  pas les memes droits que si elle est en local. Tous les composant en local sont considéré comme 'Full Trust', alors que sur le réseau ils sont considéré comme 'Partially Trust'.

     

    Lorsque ma DLL est appelée via le réseau, elle fait appel à mscorlib.dll (qui est en local) pour éxecuter ces méthodes. Donc ma DLL ne possede pas les droits pour avoir acces à mscorlib.dll car c'est un Assembly 'Partially Trust' (issue de l'intranet) et cela génere une 'Security Exception'.

     

    Comme je les dis plus haut, je travail au sein d'une entreprise, et  ma liberté de manoeuvre en ce qui concerne les droits d'administration est réduite. En effet, j'ai découvert des méthodes pour modifier les droits d'un composant avec le Microsoft .NET Framework 2.0 Configuration mais je ne possede pas les droits (Read Only sur Machine).

     

    Ma question est la suivante : Comment puis -je définir ma DLL comme un assembly 'Full Trust' sur le réseau ? Existe - t - il un moyen de déployer une DLL.Net (VB.Net) en 'Full Trust', sur le réseau ?

     

    Je commence à etre vraiment desespérer car j'ai essayer de nombreuses méthodes mais sans succès.

     

    Si quelqu'un connait le probleme et peut me donner un coup de main, j'en serais très reconnaissant.

     

    Merci à tous.

    mardi 22 mai 2007 07:53

Réponses

  •  

    Bonjour à tous,

     

    Ca y est, j'ai réussi à obtenir des infos concrètes concernant mon problème. Mr Taylor (MVP) m'a confimé qu'il est impossible de contourner la Code Access Security (CAS).

     

    En effet, il est necessaire d'avoir les droit d'administrateur sur les postes client pour utiliser une DLL.Net déployée sur un intranet (modification de la politique de sécurité obligatoire)

     

    Ci dessous la réponse de Mr Taylor (en Anglais) :

     

    The rights of your assembly are all but irrelevant.  Note that your assembly does have access to mscorlib as that is the core .NET library.  The problem generally resides in the fact that the code you are calling needs to do something that is otherwise not allowed.  Unfortunately you have no choice but to get the IT department involved.  Apps run from the network run in a restricted sandbox.  There is nothing your assembly can do to get around this.  The reason this is so is because network apps come from potentially unsafe sources.  If a hacker just had to give themselves full trust in their assembly then why would they do anything else?  It would completely circumvent the security.

     

    The solution is to either require that your app be installed locally or have IT modify the group policies for the domain such that your app has full trust.  However you'll probably want to consider strongly naming your assembly before getting full trust (refer to MSDN for information).  It would be very unwise to give all apps full trust across the network so IT will have to configure your assembly in the group policies explicitly.

     

    Michael Taylor - 5/24/07

     

    Voila.

    jeudi 31 mai 2007 16:06

Toutes les réponses

  •  Pijay A écrit:

    Ma question est la suivante : Comment puis -je définir ma DLL comme un assembly 'Full Trust' sur le réseau ? Existe - t - il un moyen de déployer une DLL.Net (VB.Net) en 'Full Trust', sur le réseau ?

     

    Si tu fais une recherche sur le déploiement d'applicatin VSTO, tu trouveras un article (avec code source) sur la MSDN qui explique comment déployer un addin VSTO en lui donnant les droit FullTrust.

     

    En gros, il faut prendre le code source, récupérer le projet SetSecurity et modifier la valeur des paramètres et cela devrait être bon.

     

     

    A+

    mercredi 23 mai 2007 12:35
  •  

    Bonjour Thomas,

     

    Tout d'abord, merci pour ta réponse.

    J'ai jeté un oeil a ces articles, je vais les étudier plus en profondeur mais je tenais a te répondre avant.

     

    Cependant j'ai besoin d'une petite précision : Je ne trouve pas le code source dont tu me parle ?

    Peut etre pourraot tu m'envoyer le lien, ca pourrait m'aider.

     

    En tout cas merci encore de ton attention.

     

    A+

    mercredi 23 mai 2007 14:04
  •  

    Ca y est je l'ai trouvé.....

     

    Je vais maintenant me pencher dessus....

     

    Merci encore.

     

    A bientot.

    mercredi 23 mai 2007 14:18
  •  

    Salut Thomas,

     

    J'ai regardé les articles et le code source que tu mm'avais conseillé. Cela ne m'aide pas varaiment car les droits d'administrateur sont necessaire pour modifier les autrisation sur les postes clients.

     

    En effet, je sais pas si tu as lu tout mon post en entier, mais je ne dispose de aucun droit d'admin. et je cherche justement un moyen ou une méthode pour contourner cette contrainte.....

     

    Si tu as une autre idée, tiens moi au courant.

     

    Merci.

    jeudi 24 mai 2007 08:35
  • Bonjour,

     

    Il faut peut-être essayer de voir du coté de l'impersonation alors...

     

    Mais dans tous les cas, il me semble normal qu'il ne soit pas possible de modifier des paramètres de sécurité sur des machines, alors que l'on ne possède aucun droit d'administration: en effet, dans le cas contraire, cela représenterait un problème de sécurité certain....

    jeudi 24 mai 2007 08:46
  •  

    Bonjour à tous,

     

    Ca y est, j'ai réussi à obtenir des infos concrètes concernant mon problème. Mr Taylor (MVP) m'a confimé qu'il est impossible de contourner la Code Access Security (CAS).

     

    En effet, il est necessaire d'avoir les droit d'administrateur sur les postes client pour utiliser une DLL.Net déployée sur un intranet (modification de la politique de sécurité obligatoire)

     

    Ci dessous la réponse de Mr Taylor (en Anglais) :

     

    The rights of your assembly are all but irrelevant.  Note that your assembly does have access to mscorlib as that is the core .NET library.  The problem generally resides in the fact that the code you are calling needs to do something that is otherwise not allowed.  Unfortunately you have no choice but to get the IT department involved.  Apps run from the network run in a restricted sandbox.  There is nothing your assembly can do to get around this.  The reason this is so is because network apps come from potentially unsafe sources.  If a hacker just had to give themselves full trust in their assembly then why would they do anything else?  It would completely circumvent the security.

     

    The solution is to either require that your app be installed locally or have IT modify the group policies for the domain such that your app has full trust.  However you'll probably want to consider strongly naming your assembly before getting full trust (refer to MSDN for information).  It would be very unwise to give all apps full trust across the network so IT will have to configure your assembly in the group policies explicitly.

     

    Michael Taylor - 5/24/07

     

    Voila.

    jeudi 31 mai 2007 16:06