2009-05-26 11 views
0

J'ai un algorithme de recherche qui tente de résoudre l'emplacement d'un répertoire sur un lecteur local. Le répertoire devra évidemment accéder à d'autres répertoires présents sur le système s'il recherche un sous-répertoire de l'un de ceux-ci. Cependant, en faisant cela, je continue à obtenir l'exception UnauthorizedAccessException.Acquisition des privilèges d'accès d'un utilisateur actif

Je voudrais fournir au mécanisme de recherche les privilèges d'accès de l'utilisateur actif lors de son exécution, comment puis-je y parvenir.

+1

Vous voudrez probablement inclure plus d'informations sur le langage/cadre de programmation que vous utilisez. – Marplesoft

+0

Quel système d'exploitation utilisez-vous? –

+0

BTW, en définissant une question de programmation légitime comme ceci est 'wiki communautaire' est un excellent moyen de s'assurer que beaucoup de gens ne vous dérange pas de vous donner une réponse. Vous devriez être d'humeur à «travailler gratuitement» :-). Bonne chance –

Répondre

0

Dans la plupart des cas, la réponse correcte est que vous ne devriez pas.

Votre algorithme doit attraper l'exception UnauthorizedAccessException, accepter qu'il ne sera pas autorisé à naviguer plus bas dans ce dossier et agir comme s'il était vide. Cela signifie que parfois vous obtiendrez une réponse indiquant qu'un répertoire que vous recherchez n'existe pas lorsqu'il existe techniquement. C'est bon. C'est comme ça que c'est censé être. Si vous n'avez pas la permission, cela n'existe pas pour vous.

Les dossiers protégés par les droits d'autres utilisateurs sont "privés". Un programme exécuté par "Joe" n'est pas censé regarder les dossiers qui appartiennent à "Mary". C'est tout le point des permissions.

Il existe très peu d'exceptions contrôlées à la règle. Notoirement, les applications de sauvegarde de disque et d'antivirus doivent être capables de naviguer sur le disque entier, indépendamment des autorisations de dossier. Ils le font en mettant en place un service qui fonctionne sous un compte hautement privilégié (peut-être "SYSTEM", peut-être quelque chose d'autre). Ce sera probablement un compte qui contient le SeBackupPrivilege.

Vous pouvez faire cela pour votre programme, si vous vraiment besoin d'analyser le disque entier, mais pour la plupart des scénarios d'application, vous ne devriez pas. Seule une application de maintenance à l'échelle de la machine, comme un programme antivirus ou de sauvegarde, devrait avoir ce type d'autorité.

Ce n'est pas que c'est "overkill"; c'est que c'est "faux". Cela ne joue pas selon les règles.

+0

> Un programme exécuté par "Joe" n'est pas censé regarder les dossiers qui appartiennent à "Mary". Très vrai, c'est pourquoi dans ma question, j'ai déclaré que je voudrais que l'algorithme ait accès à seulement les répertoires auxquels l'utilisateur actif actuel a accès. J'ai exécuté des tests avec mon algorithme et il semble qu'il y ait des fichiers "fantômes" (fantômes non cachés) dans le système qui provoquaient les exceptions auxquelles je faisais face. Attraper l'exception ici, je pense est justifiée, mais je pense toujours que l'accès à l'algorithme de l'utilisateur actif actuel n'est pas dangereux. comment faire c'est le problème. – gogole

+1

Je ne suis pas sûr d'avoir compris alors; Cherchez-vous un moyen d'éviter l'exception pour commencer - peut-être détecter à l'avance si vous pouvez accéder au dossier? Le conseil général que j'ai vu est qu'il est incroyablement difficile de vérifier correctement les autorisations à l'avance, il peut être considérablement plus lent (en particulier sur le réseau) et il est évidemment soumis à des conditions de course. La recommandation est de simplement faire ce que vous devez faire avec le dossier et gérer l'erreur avec élégance quand et si cela arrive. Ou s'agit-il d'autre chose? –

Questions connexes