none
Run With Elevated privileges RRS feed

  • Question

  • Bonjour a tous,
    j'ai un probleme de droits dans lexecution d'un bout de code. Je me connecte a mon server stand alone avec un compte qui n'est pas admin.
    Je lance un bout de code simple

    static void Main(string[] args){
              try {
              using (SPSite objSite = new SPSite("http://serverAppli/site")){
                        using (SPWeb objWeb = objSite.OpenWeb()){
    System.Windows.Forms.MessageBox.Show(objSite.Url + " OK");
                        }
              }
              }
              catch (Exception ex) { MessageBox.Show(ex.Message); }
    }
    et j'obtiens l'erreur suivante:
    The Web application at http://serverAppli/site could not be found. Verify that you have typed the URL correctly. If the URL should be serving existing content, the system administrator may need to add a new request URL mapping to the intended application.

    Si je fais ca
    static void Main(string[] args){
              try          {
    SPSecurity.RunWithElevatedPrivileges(delegate() {
              using (SPSite objSite = new SPSite("http://serverAppli/site")){
                        using (SPWeb objWeb = objSite.OpenWeb()){
    System.Windows.Forms.MessageBox.Show(objSite.Url + " OK");
                        }
              }
     });
              }
              catch (Exception ex) { MessageBox.Show(ex.Message); }
    }
    j'obtient l'erreur suivante:
    Object reference not set to an instance of an object. (a cause  du RunwithElevatedPrivileges)


    Le compte utilisé à les droits de lectures sur toutes les base de données de contenu.
    En donnant les droits dbowner à ce compte, le code fonctionne mais ce n'est pas normal!
    Quelqu'un connait un moyen de contournement?
    En fait c un exe qui tournera sur le serveur d'appli de la ferme!
    Il ya  til possibilité d'utiliser des credentials par exemple...

    Merci.

    mardi 26 août 2008 16:59

Toutes les réponses

  • Pour votre problème, le mode debug pourrait nous dire quelle ligne de code contient une référence null.

    Pour vous connecter avec des credentials donnés vous pouvez directement lancer l'application .exe avec un compte disposant des droits suffisants (même chose si votre appli devient un service Windows). Sinon, serait-ce envisagebable de passer votre application en Job SharePoint (dans ce cas, c'est le service OWS_Timer qui l'executerait).

     

    Enfin, sans pour autant parler de credentials, vous pouvez vous "connecter en tant que" compte spécifique en utisant l'autre constructeur de SPSite (jetez un coup d'oeil au UserToken).

    mercredi 27 août 2008 07:07
    Modérateur
  • Merci pour votre réponse.
    Néanmoins.
    Pour l'utilisation du token, je me retoruve face a un probleme, pr récupérer le token je dois récupere le SPUser et donc me connecter au site....
    static void Main(string[] args){
              try {
              using (SPSite objSite = new SPSite("http://serverAppli/site")){
                        using (SPWeb objWeb = objSite.OpenWeb()){
    SPUser spUser =web.AllUsers["monUserAdmin"];
    SPUserToken token = spUser.UserToken;
    using (SPSite impSite = new SPSite("http://par1ws4-55/res2/testDev/", token))
    {
    ....
    }

                        }
              }
              }
              catch (Exception ex) { MessageBox.Show(ex.Message); }
    }
    Je ne vois pas d'autre moyen de recuperer le SPUserToken....

    Pr la reference null, c'est au niveau du SPSecurity qu'il bloque!

    Pr le service windows comment pourrais je le lancer avec un compte autre ??

    Merci d'avance.




    mercredi 27 août 2008 16:19
  • Je suis désolé, j'ai mal lu votre message d'origine. Ca vous aura permis de découvrir les UserToken, mais je vais tâcher de revenir au problème initial.

     

    Dans le premier cas, vous obtenez l'erreur "The Web application at http://serverAppli/site could not be found. Verify that you have typed the URL correctly. If the URL should be serving existing content, the system administrator may need to add a new request URL mapping to the intended application." Si vous tombiez dans le bloc catch du fait de droits insuffisants, vous auriez un message tout autre. En conséquence, même avec le compte administrateur vous êtes confronté à une erreur (j'imagine que vous auriez la même si le bloc try...catch était à l'intérieur du bloc RunWithElevatedPrivileges.

     

    Bref, le message d'erreur semble explicite et indique que vous ne passez pas la bonne URL au constructeur de SPSite. Par hasard, l'URL http://serverAppli/site collée dans votre navigateur ne serait pas réécrite au chargement de la page ? La véritable URL ne serait pas quelque chose du genre http://serverAppli.mondomaine/site ?

    mercredi 27 août 2008 16:38
    Modérateur
  • le meme programme lancé lorsque je suis connecté en tant qu'admin ne provoque aucune erreur.
    Il s'agit ici d'un compte n'ayant pas beaucoup de droit.
    Par exemple lorsque je suis connecté avec cet user, je ne peux pas voir les sites dans IIS, il me demande de me conneceter avec un autre compte

    jeudi 28 août 2008 09:00
  • Pourtant l'erreur ne correspond pas à un problème de droits. Est ce que d'autres paramètres ne rentrerait pas en compte, comme le proxy utilisé par l'utilisateur ?

     

    Quoi qu'il en soit je ne vois pas d'erreur dans le code. Je peux vous confirmer qu'il fonctionne de mon côté.

    jeudi 28 août 2008 09:07
    Modérateur
  • ouai c ca qui me gene.... j'ai du mal a tracé l'erreur
    Je vais continuez d'investiguer.
    La question est : est ce que le model objet est utilisable par un compte utilisateur non admin?
    Si vous avez une machine stand alone et la possibilité de faire ce test, ca sera avec plaisir de connaitre votre feedback dessus.

    Merci ent tout cas pour votre aide.
    jeudi 28 août 2008 09:26
  • Sans soucis. Par contre, le programme ne peut tourner que sur un des serveurs (impossible de le faire tourner sur un poste client... vous obtiendriez un message d'erreur similaire à celui que vous avez actuellement d'ailleurs).

    jeudi 28 août 2008 09:29
    Modérateur
  • Oui c'est clair, le programme est bien lancé sur le serveur et non pas sur un poste client!
    Merci pour votre aide.
    jeudi 28 août 2008 09:32
  • Lancez vous l'execution en "Run As" ou bien ouvrez vous une session Windows sur le serveur avec un compte utilisateur ?

    jeudi 28 août 2008 09:34
    Modérateur
  • Je lance une remote desktop connection avec mon compte qui n'est pas admin
    Une fois sur le serveur j'ouvre mon visual studio et je lance mon exe

    J'ai l'impression que le modele objet SharePoint qui tourne sur le serveur est destiné uniquement aux admin et les autres users doivent absoluement utilisé des web services!

    jeudi 28 août 2008 09:45
  • Non, ils peuvent très bien executer le programme. La différence est ailleurs. Lorsque vous êtes connecté en remote avec le compte utilisateur, profitez en pour vérifier le proxy paramétré dans IE et les URL d'exclusion. Assurez vous que les utilisateurs peuvent bien accéder à l'URL définie dans votre programme par le IE, sur le serveur.

     

    Egalement, lancez votre exe sans passer par Visual Studio (tout du moins, ne l'exécutez pas en debug).

    jeudi 28 août 2008 09:49
    Modérateur
  • C'est toujours pareil !!
    Il ne semble pas y avoir de problème de proxy. Mon compte accede bien au site par l'interface graphique et est même owner du site!

    Un autre test que j'ai fait:
    J'ai créé un user local nommé testAPI. J'ajoute ce compte au groupe owner du site. Il a donc acces au site par l'interface graphique avec les droits admin. Jusque là tout va bien. Et je suis bien sur le serveur.
    Lorsque je lance le bout de code par VS ou a l'exterieur de VS, j'obtient la même erreur.
    Je n'y comprend plus rien.

    jeudi 28 août 2008 14:39
  • Qu'entendez vous pas 'user local' ? ce n'est pas un utilisateur du domaine ? Quel type d'installation de SharePoint avez vous (stand alone, complète, ...) ?

     

    Votre compte administrateur n'est-il pas plus que owner (genre site collection admin et/ou farm admin) ? Votre compte a t-il des droits sur le serveur Windows 2003 que l'autre compte n'aurait pas ?

    jeudi 28 août 2008 15:18
    Modérateur
  • Je m'exprime peut etre un peu mal. Je résume la situation.

    J'ai un compte admin zzAdmin qui est un compte de domaine qui a les droits admin sur mon serveur SRVMOSS
    J'ai installé MOSS avec cet user. Il est donc admin de la ferme.
    Avec ce compte je n'ai aucune restriction et le code que j'execute fonctionne toujours.

    J'ai un compte zzUser qui est un compte de service qui a les droits d'accès au serveur SRVMOSS et les droits de remote access (pour permettre l'accès a distance).
    J'ai ajouté cet user dans le groupe ownner du site sharepoint que j'ai créé. J'arrive à accéder au site par l'UI avec ce compte (par IE du serveur ou par un IE d'une machine cliente).
    Seulement le bout de code ne fonctionne pas!

    J'ai refais un test avec un compte local. J'ai créé un compte local au serveur SRVMOSS\uuUserLocal que j'ai ajouté de la même maniere au groupe owner du site sharepoint que j'ai créé. J'arrive à accéder au site par l'UI avec ce compte (par IE du serveur ou par un IE d'une machine cliente).
    Seulement le bout de code ne fonctionne pas!

    J'espere avoir été clair.

    Sinon quel a été votre test a vous?
    jeudi 28 août 2008 15:38
  • Code Snippet
        class Program
        {
            static void Main(string[] args)
            {
                using (SPSite site = new SPSite("http://office12-server"))
               {
                    using (SPWeb web = site.OpenWeb())
                    {
                        Console.WriteLine(web.Title);
                    }
                }
                Console.Read();
            }
        }

     

     

    Exécuté avec un compte de domaine (utilisateur du domaine) sur le serveur, appartenant au groupe membres de la collection de sites.

     

    Le code s'éxecute correctement : le titre du site est affiché et la fenêtre de commande attend une saisie de ma part. Tout est normal. Votre problème est ailleurs. Qui plus est, votre message d'erreur indique que l'adresse n'est pas valide... si ça fonctionne via le navigateur, je cherche ce qu'il peut y avoir de spécifique. Pouvez vous tester une simple HttpWebRequest sur la page d'accueil de votre site avec un autre compte que celui admin de domaine, en spécifiant l'utilisation des default credentials ?


    jeudi 28 août 2008 15:57
    Modérateur
  • J'ai posté sur un autre forum mon probleme

    Hi,
    I developed a windows service to get a specific list from my test site. here is the sample code

               SPSite siteCollection = new SPSite("
    http://myserver/site");
                SPWeb omsite = siteCollection.OpenWeb();
                SPListCollection AllLists = omsite.Lists;
    I run this code  on Sharepoint server with my account  who belong to the owner of my sharepoint site. I get the following error :
    The Web application at
    http://myserver/site could not be found. Verify that you have typed the URL correctly. If the URL should be serving existing content, the system administrator may need to add a new request URL mapping to the intended application.
    I have run this application in the system where sharepoint server resides. What's wrong with the code.
    The code  below run  with no probleme by the sharepoint administrator.
    The code run with no probleme when i give to  my account db_owner on the site content database and sharepoint configuration database.
    I need your help

    On m'a repondu:

    Michael Washam - MSFTMSFT, Moderator - Posted 11 hours 14 minutes ago

    To access the SharePoint object model outside of SharePoint the process account needs to have the following:

    ·         The user is a server farm administrator. 
    ·         The user has Read and Write permissions on the content database. 
    ·         The user is a site collection administrator. 
    ·         The user has permissions to access the Windows SharePoint Services site or the SharePoint Server 2007 site through which the code iterates. 


    et aussi

    Adam Toth - Posted 11 hours 13 minutes ago


    When writing console apps or windows services that use the sharepoint api, the account you run it under has to have actual permissions to the sharepoint content db at the sql server level to work. You can't just use an account that has been given SharePoint permissions to a site in the SharePoint UI.


    vendredi 29 août 2008 08:27
  • Vous voulez dire que les personnes amenées à executer votre code sont de simples utilisateurs, qu'ils ne sont ni farm admin, ni administrateur de BDD, ni même site admin ?

     

    Dans mon cas, les utilisateurs ont effectivement les droits sur la base de contenu SQL, et c'est pour ça que mon test est passé. Si vous utilisateurs ont un rôle à jouer sur le serveur, il pourrait être bon de définir leur périmètre d'intervention.

     

    vendredi 29 août 2008 09:20
    Modérateur