0

Avec notre produit, nous avons un outil de sauvegarde simple pour la base de données du serveur SQL. Cet outil devrait juste faire faire une sauvegarde complète et restaurer vers et depuis n'importe quel dossier.Sql Server Sauvegarder et déplacer le fichier de sauvegarde: Comment faire face aux autorisations de fichiers?

Bien sûr, l'utilisateur (généralement un administrateur) a besoin d'une autorisation pour écrire dans le dossier cible.

Pour éviter le problème de ne pas pouvoir effectuer une sauvegarde sur un lecteur réseau, j'écris la sauvegarde dans un fichier temporaire dans le répertoire de sauvegarde de Sql Server. Ensuite, je le déplace vers le dossier cible. Cela nécessite l'autorisation de supprimer le fichier temporaire du dossier de sauvegarde des serveurs SQL. La restauration est la même dans l'autre sens.

Cela a semblé fonctionner correctement jusqu'à ce que quelqu'un l'a testé sur Vista, où l'utilisateur n'a pas accès en écriture au dossier de sauvegarde par défaut.

Il existe donc de nombreuses solutions pour résoudre ce problème, mais aucune d'entre elles ne semblait vraiment intéressante.

Une solution consisterait à trouver un autre dossier pour le fichier temporaire. L'utilisateur du serveur sql et l'administrateur exécutant la sauvegarde ont tous deux besoin d'autorisations de lecture et d'écriture. Y a-t-il un tel répertoire?

D'autres idées? Merci beaucoup.


Edit: solution doit travailler avec Sql Server 2005 et 2008, C# 3.0 (Smo), Windows XP et Vista.

+0

Pourquoi ne pouvez-vous pas placer manuellement les autorisations correctes sur le dossier que vous utilisez pour contenir le fichier de sauvegarde? – Gabe

+0

Il est installé par un installateur et doit fonctionner hors de la boîte. –

Répondre

0

Ok, j'ai trouvé la solution. C'est en fait assez simple si vous en savez un peu plus sur Vista alors je le fais. Le dossier de sauvegarde est configuré de la même manière que sous XP, mais les autorisations d'administrateur ne sont pas disponibles tant que le processus n'est pas en mode élevé. Pour y arriver, je avais juste besoin d'ajouter un manifeste à l'exécutable qui requiert les privilèges d'administrateur:

<requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 

Maintenant, je reçois un appel de la contrôle de compte lorsque l'application et tout fonctionne bien.

0

Les applications effectuant des opérations de sauvegarde peuvent demander l'ouverture de fichiers en mode de sauvegarde. Cela signifie que l'application a le privilège SeBackupPrivilege et il ouvre des fichiers avec le drapeau FILE_FLAG_BACKUP_SEMANTICS:

SeBackupPrivilege contenu fichier -Permet récupération , même si la sécurité descripteur sur le fichier pourrait ne pas accorder un tel accès. Un appelant avec SeBackupPrivilege activé évite le besoin pour tout contrôle de sécurité basé sur ACL.

Bien que cela semble technique et complexe, ce qui se résume à la pratique consiste à copier les fichiers à l'aide ROBOCOPY /B

+0

Et comment puis-je supprimer le fichier temporaire?(btw: Il doit également fonctionner sur XP) –

+0

Pour supprimer le fichier, vous devez avoir la permission. Si vous n'avez pas d'autorisations, vous devez créer le fichier de sauvegarde dans un dossier où vous hériterez * de l'autorisation des paramètres du dossier. Utilisez un chemin qualifié dans l'instruction BACKUP pour que SQL n'utilise pas le dossier par défaut. Il n'existe aucun dossier par défaut (où le compte de service SQL et l'utilisateur disposent de ces autorisations). Ce dossier doit être créé et les listes de contrôle d'accès appropriées doivent être définies lors du déploiement de l'application (lors de l'installation). –

+0

Par exemple: le compte de service SQL est domain \ sqluser. L'application est installée par domaine \ utilisateur. Au cours de l'installation, le fichier .msi crée un dossier dans le profil du domaine \ utilisateur pour les sauvegardes, c: \ Users \ domain.user \ AppData \ MyApp \ Backups. Il accorde l'accès en écriture et en écriture aux objets hérités dans le dossier vers domain \ sqluser. Lorsque l'application s'exécute, elle transmet à SQL le chemin d'accès complet c: \ Users \ ... \ Backups \ backupfile.bak. SQL a accès pour créer le fichier, l'utilisateur a un contrôle total sur le fichier de sauvegarde résultant (hérité du dossier). –