Active Directory Permission

Signaler
Messages postés
36
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
7 juillet 2008
-
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
-
Bonjour,

je suis entrein de créé une application pour gèrer mon serveur exchange. j'arrive a tous faire (enfin presque).

je bloque sur la facon de donner des permission a un groupe sur une liste d'adresse.

je c me connecter a ma liste mais quelle sont les option pour ajouter une permission?

exemple: a ma liste Directeur je voudrais ajouter le groupe Directeur avec comme permission Lire

merci, pour vos futur reponse ;)

23 réponses

Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
22
salut,

disons qu'avec un minimum de code donnant par exemple le nom de la classe que tu obtiens pour ta liste ca pourrait aider à te répondre :) ...

est-ce que ta liste d'adresse est dans un groupe de diffusion (je ne connais pas bien exchange...) ? est-ce que tu obtiens un DirectotyEntry ?

voilà

ShareVB
Messages postés
36
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
7 juillet 2008

bonjour,

grace a ce code j'arrive à me connecter a ma liste

Path = Serveur + "CN=Domaine6,CN=All Address Lists" + ExchADC + DCDomaine;
DirectoryEntry Ldap = new DirectoryEntry(Path, Loggin, Password);

j'ai trouver une classe que devrais faire se que je veux ("DirectoryServicesPermission") mais je ne trouve pas comment l'utiliser.

merci pour votre aide ;)

Francois
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
22
salut,

quelque chose comme :
            ActiveDirectorySecurity ads = (ActiveDirectorySecurity)de.ObjectSecurity;
            System.Security.Principal.NTAccount group = new System.Security.Principal.NTAccount("tonGroupe");
            ActiveDirectoryAccessRule ar = new ActiveDirectoryAccessRule(
                group,
                ActiveDirectoryRights.DeleteTree | ActiveDirectoryRights.ListObject,
                System.Security.AccessControl.AccessControlType.Allow);
            ads.AddAccessRule(ar);

à noter aussi qu'il ne faut pas confondre "access rules" et "permission" en .Net :
-> les "access rules" sont les permissions Windows
-> les "permission" sont les droits d'exécution nécessaire ou interdit de ton assembly...autrement dit ca te permet d'empêcher/d'autoriser un utilisateur/groupe à exécuter un assembly/méthode en fonction de ses droits sur les ressources...

ShareVB
Messages postés
36
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
7 juillet 2008

Bonjour,

donc si je comprend bien moi j'ai besoin des "access rules" pour modifier les permition sur mes address list.

mais de nouveau je ne c pas comment ca focntionne.

par exemple si je supprimer "Utilisateurs authentifier" et ajouter le groupe "Machin" je peut faire comment?

Merci.

++ François
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
22
salut,

étant donné ta directoryentry "de" :
-> comme ça, pour ajouter :
ActiveDirectorySecurity ads = (ActiveDirectorySecurity)de.ObjectSecurity;
System.Security.Principal.NTAccount group = new System.Security.Principal.NTAccount("Machin");
            ActiveDirectoryAccessRule ar = new ActiveDirectoryAccessRule(
                group,
                ActiveDirectoryRights.DeleteTree | ActiveDirectoryRights.ListObject,
                System.Security.AccessControl.AccessControlType.Allow);
            ads.AddAccessRule(ar);
-> pour supprimer :
ActiveDirectorySecurity ads = (ActiveDirectorySecurity)de.ObjectSecurity;
ads.RemoveAccess(new System.Security.Principal.NTAccount("groupe_truc"),System.Security.AccessControl.AccessControlType.Allow);

ShareVB
Messages postés
36
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
7 juillet 2008

merci beaucoup, je test ca lundi ;)
Messages postés
36
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
7 juillet 2008

bonjour,

je vient de faire le test, mais j'ai les erreur suivante:

Impossible de traduire certaines ou toutes les références d'identité. sur la ligne: ads.AddAccessRule(ar);

et

Impossible de traduire certaines ou toutes les références d'identité. sur la ligne: ads.RemoveAccess(new System.Security.Principal.NTAccount("GroupeTest"), System.Security.AccessControl.AccessControlType.Allow);

voila les deux code que j'utilise:

1) Code d'ajout:

            string Path = Serveur + "CN=domaine.be,CN=All Address Lists" + ExchADC + DCDomaine;
            DirectoryEntry Ldap = new DirectoryEntry(Path, Loggin, Password);

            ActiveDirectorySecurity ads = (ActiveDirectorySecurity)Ldap.ObjectSecurity;
            System.Security.Principal.NTAccount group = new System.Security.Principal.NTAccount("GroupeTest");
            ActiveDirectoryAccessRule ar = new ActiveDirectoryAccessRule(group,ActiveDirectoryRights.DeleteTree | ActiveDirectoryRights.ListObject,System.Security.AccessControl.AccessControlType.Allow);
            ads.AddAccessRule(ar);

2) Code de suppression:

ActiveDirectorySecurity ads = (ActiveDirectorySecurity)Ldap.ObjectSecurity;
ads.RemoveAccess(new System.Security.Principal.NTAccount("GroupeTest"), System.Security.AccessControl.AccessControlType.Allow);

grand merci pour ton aide.

François
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
22
salut,

essaie en préfixant le nom de ton domaine, genre DOMAIN\nom_groupe...

ShareVB
Messages postés
36
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
7 juillet 2008

non sela ne fonctionne toujours pas...

j'ai tester avec :

System.Security.Principal.NTAccount test = new System.Security.Principal.NTAccount("Domaine\\domaine1");

et

System.Security.Principal.NTAccount test = new System.Security.Principal.NTAccount("domaine.be\\domaine1");

toujours le message:  Impossible de traduire certaines ou toutes les références d'identité.
Messages postés
36
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
7 juillet 2008

je viens de tester avec le nom d'un membre et non le nom d'un groupe et la sela fonctionne, enfin presque... je n'ai pas de msg d'erreur mais il ne le fait qd meme pas sur le serveur.
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
22
salut,

en ce qui concerne les SID/identité non trouvées, je pense que c'est parce que ton compte n'est pas dans le domaine dans lequel se trouve le serveur exchange...il faut que tu sois soit sur le domaine, soit sur le serveur si groupe de travail (je crois)...

en ce qui concerne les changements pas impliqués, j'ai oublié qu'il faut appeler de.CommitChanges();...

ShareVB
Messages postés
36
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
7 juillet 2008

j'ai oublié qu'il faut appeler de.CommitChanges();...

ha oui.... je suis con qd meme... loool enfin je test ca demain.

si non je suis bien dans le domaine.

je tien au courant ;)

Merci

François
Messages postés
36
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
7 juillet 2008

rebonjour,

voila le code fonctionne bien ;) mais a la seul condition que je suis inscrit au domain et loger avec se compte...

msg d'erreur sur une autre session: "La relation d'approbation entre cette station de travail et le domaine principal a échoué."

pourtant la creation de user, groupe, liste etc. fonctionne.

y a t'il une solution pour que sela fonctione depuis n'importe quelle session?

Merci

François.
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
22
salut,

ce prb serait plus du registre de la configuration système que de la programmation :
-> on ne peut modifier/créer/supprimer un objet que si on en a le droit local par le biais d'une session d'un utilisateur local au serveur, ou de domaine
-> si tu n'as pas une session d'administrateur/utlisateur avec pouvoir/"utilisateur autorisé" local, de domaine ou d'entreprise ca ne peut pas marcher...

la solution est donc de donner les droit à ton autre utilisateur de sorte que tu puisses déjà faire l'opération avec la mmc et si ca marche, ca va marcher par code...demande à ton administrateur réseau...

"msg d'erreur sur une autre session: "La relation d'approbation entre cette station de travail et le domaine principal a échoué." pourtant la creation de user, groupe, liste etc. fonctionne." : donc l'objet est créé et tu reçois une exception ?

ShareVB
Messages postés
36
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
7 juillet 2008

re bonjour

apres qql temps je reviens a la charge, sur l'ancien serveur (serveur test) tous fonctionne malheureusement sur le nouceau serveur sela ne fonctionne pas....

voila le msg d'erreur qu'il me donne:

"Cette liste de contrôle d'accès n'est pas de forme canonique et ne peut donc pas être modifiée."

et voila le code que j'utilise:

DirectoryEntry Perm = objServer.Connexion(objServer.Address + "/CN=" + DomainName + ",CN=" + objServer.ExchAddressList + ",CN=Address Lists Container,CN=" + objServer.FirstExchOrg + ",CN=Microsoft Exchange,CN=Services,CN=Configuration" + ",DC=" + objServer.DCName1 + ",DC=" + objServer.DCName2);
ActiveDirectorySecurity ads = (ActiveDirectorySecurity)Perm.ObjectSecurity;
System.Security.Principal.NTAccount group = new System.Security.Principal.NTAccount(DomainName);
ActiveDirectoryAccessRule ar = new ActiveDirectoryAccessRule(group, ActiveDirectoryRights.GenericRead | ActiveDirectoryRights.ExtendedRight, System.Security.AccessControl.AccessControlType.Allow);
 ads.AddAccessRule(ar);
Perm.CommitChanges();

merci d'avence ;)

Francois
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
22
salut,

d'abord, je suppose que Perm reçoit bien un DirectoryEntry...

je vois des trucs qui me semblent bizarres :
-> le NTAccount qui prend un DomainName : DomainName si c'est vraiment un nom de domaine AD, ca me parait bizarre d'autoriser un domaine...et d'ailleurs, je ne pense pas que ca soit possible...
-> ActiveDirectoryRights.ExtendedRight : ca mappe sur des vrai droits ?

ShareVB
Messages postés
36
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
7 juillet 2008

DomainName comptient juste le nom du groupe

le probleme c que mon code fonctionne si je suis inscrit au domaine(Active directory) par contre si le pc est pas inscrit sela ne fonctionne pas....
Messages postés
2676
Date d'inscription
vendredi 28 juin 2002
Statut
Membre
Dernière intervention
13 janvier 2016
22
salut,

"le probleme c que mon code fonctionne si je suis inscrit au
domaine(Active directory) par contre si le pc est pas inscrit sela ne
fonctionne pas" : c'est le principe d'un domaine...l'autre solution consiste à avoir un compte local qui a le même nom et password qu'un compte de domaine, de préciser l'IP du serveur quand tu crées ton DirectoryEntry...mais c'est mieux d'être dans le domaine...

ShareVB
Messages postés
36
Date d'inscription
mercredi 13 avril 2005
Statut
Membre
Dernière intervention
7 juillet 2008

ok je teste ca demain ;) merci pour ton aide.

si non je ferai un petit programme client sur le serveur :D qui fera se que je lui demande a distance.
Messages postés
28
Date d'inscription
mardi 10 juillet 2007
Statut
Membre
Dernière intervention
17 septembre 2007

salut,
je suis debutante dans la programmation avec Csharp. et je dois ecrire une programme avec active directory.
quand je compile mon programme il m' affiche une erreur de la sorte:

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

je ne sais pas où ajouter cette permission là.

voila mon code:

using System;
using System.DirectoryServices;
using System.DirectoryServices.ActiveDirectory;
using System.Diagnostics; 
using System.Security.Permissions;

namespace Active
{
    class Class1
    {
        [Serializable]
        public sealed class DirectoryServicespermission : ResourcePermissionBase
        {
            public class SecurityExeption : SystemException
            {

                public static void Main(string[] args)
                {
                    try
                    {

                        // string Path = Serveur + "CN=domaine.be,CN=All Address Lists" + ExchADC + DCDomaine;
                        DirectoryEntry Ldap = new DirectoryEntry("ldap://hte.intra", "don", "mamanetpapa");

                        ActiveDirectorySecurity ads = (ActiveDirectorySecurity)Ldap.ObjectSecurity;
                        System.Security.Principal.NTAccount group = new System.Security.Principal.NTAccount("GroupeTest");
                        ActiveDirectoryAccessRule ar = new ActiveDirectoryAccessRule(group, ActiveDirectoryRights.DeleteTree | ActiveDirectoryRights.ListObject, System.Security.AccessControl.AccessControlType.Allow);
                        ads.AddAccessRule(ar);

                        DirectoryEntry ldap = new DirectoryEntry("ldap://hte.intra", "don", "mamanetpapa");

                        DirectorySearcher searcher = new DirectorySearcher(ldap);

                        searcher.Filter = "(SAMAccountName=SG)";

                        SearchResult result = searcher.FindOne();

                        DirectoryEntry DirEntry = result.GetDirectoryEntry();

                        DirEntry.Properties["TelephoneNumber"].Value = "110";

                        DirEntry.CommitChanges();

                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(" Exception : " + e.Message);
                    }
                }
            }

        }
    }

}

merci pour votre aide