2010-05-11 3 views
1

Je travaille sur une application qui fonctionne comme un utilisateur spécial non privilégié. Je voudrais être en mesure de vérifier facilement si l'utilisateur peut lire un fichier donné. Il semble que cela devrait être facile, même quand je vais dans le fichier dans l'Explorateur Windows et que l'autorisation de lecture est vérifiée, il semble parfois qu'il y ait quelque chose qui empêche l'utilisateur de lire le fichier (tel qu'un répertoire parent l'utilisateur ne peut pas parcourir) quand j'essaye de le lire en tant qu'utilisateur par programme.Quel est un bon moyen de vérifier si un utilisateur particulier peut accéder à un fichier particulier?

L'utilisateur n'a pas d'autorisation d'ouverture de session sur la console. Je ne peux donc pas me connecter en tant qu'utilisateur et essayer de lire le fichier.

Alors ...

Si je veux savoir, « Est-ce que UserBob ont accès au dossier c:\specialPath\specialFile, ce qui est un moyen facile de savoir? BTW, mon environnement est Windows Server 2003.

MISE à JOUR: pour clarifier les choses, je veux faire quelque chose comme ceci:

if UserHasAccess(UserBob, @"c:\specialPath\specialFile") 
{ 
doStuff(); 
} 
else 
{ 
// error handling 
} 

MISE À JOUR:

J'ai reçu une réponse suggérant que j'essaie simplement d'ouvrir le fichier. Le problème est que le code qui ouvre le fichier s'exécute sous un compte système spécial et est encapsulé dans une autre bibliothèque. Par conséquent, laissez-moi demander: comment puis-je faire mon code qui tente d'ouvrir le fichier en tant que compte système spécial. Supposons que j'ai un accès administrateur à la machine sur laquelle le code sera exécuté.

Répondre

1

Le moyen le plus simple de savoir est simplement d'essayer d'ouvrir le fichier. Si cela échoue, vous n'avez pas accès.

Je suppose que vous êtes vraiment essayer de le savoir est pourquoi UserBob ne peut pas accéder au fichier. Malheureusement, il n'y a pas grand-chose que vous pouvez faire comme UserBob pour le savoir. En particulier, il serait considéré comme une divulgation de la vulnérabilité de l'information si c'était possible. En tant qu'administrateur, vous pouvez activer l'audit pour ce fichier en particulier. Cliquez avec le bouton droit sur le fichier, sélectionnez Sécurité et accédez à l'onglet Audit. Une autre option consisterait à utiliser Process Monitor pour surveiller ce qui se passe pendant l'exécution du programme.

+0

D'accord, je devrais être plus précis. Je travaille avec du code .net. Y at-il un moyen simple d'essayer d'ouvrir le fichier en tant que 'UserBob'? –

+0

UserBob est-il un utilisateur * différent * de celui que votre application utilise? –

+0

Oui, codeka, 'UserBob' est un utilisateur différent de celui qui exécute l'application. En fait, UserBob et l'utilisateur qui exécute l'application peuvent être des comptes «système» sans privilèges d'ouverture de session directe. je voudrais avoir un code qui dit quelque chose comme: si UserHasAccess (UserBob, @ "c: \ specialPath \ Specialfile") { doStuff(); } autre { // gestion des erreurs } –

Questions connexes