web-dev-qa-db-fra.com

Autorisations de sauvegarde

J'ai créé un nouvel utilisateur sur le serveur qui va accéder à certaines bases de données.

Mais quand je vais sauvegarder ou restaurer la base de données, je reçois le message d'erreur:

C:\Program Files\Microsoft SQL Serveur\MSSQL10.MSSQLSERVER\MSSQL\Backup
Impossible d'accéder au chemin ou fichier spécifié sur le serveur. Vérifiez que vous avez le privilèges de sécurité nécessaires et que le chemin ou le fichier existe .....................

L'erreur montre pour tout autre chemin dans mon système. Même ceux où l'utilisateur et le compte de service disposent d'autorisations de contrôle total.

MAIS, si je tape le chemin complet et que je clique sur ok, il se plaint de ne pas pouvoir s'afficher, MAIS il sauvegarde ou restaure la base de données. Juste ne montre pas l'arborescence pour le chemin.

Si je fais l'opération à l'aide du compte sa, la boîte de dialogue affiche tous les chemins sans problème.

PS: Utilisateur déjà ajouté au rôle db_backoperator.

Quelles sont les autorisations nécessaires?

25
Alan Araya

Êtes-vous connecté à l'aide d'un identifiant d'authentification SQL ou d'un identifiant Windows? Si vous vous connectez avec une autorisation SQL, comment lui attribuez-vous des "autorisations de contrôle total" sur un dossier Windows? Windows n'a aucune idée des connexions d'authentification SQL que vous avez créées dans SQL Server. Veuillez nous montrer exactement ce que vous entendez par "J'ai créé un utilisateur sur le serveur" - quel utilisateur? quel serveur? SQL Server ou Windows?

Pour contourner le problème, vous pouvez également créer une procédure stockée qui s'exécute sous la forme sa ou une connexion Windows faisant partie du groupe sysadmin et donner à cet utilisateur disposant de moins de privilèges la possibilité de s'exécuter. Cependant, j'ai pu sauvegarder une base de données en ajoutant un utilisateur peon sans aucune autre autorisation et en les ajoutant simplement au rôle db_backupoperator:

CREATE LOGIN peon WITH PASSWORD = 'foo', CHECK_POLICY = OFF;
GO
CREATE DATABASE splunge;
GO
USE splunge;
GO
CREATE USER peon FROM LOGIN peon;
GO
EXEC sp_addrolemember 'db_backupoperator', 'peon';
GO
EXECUTE AS USER = 'peon';
GO
BACKUP DATABASE splunge
  TO DISK = 'C:\tmp\splung.bak' -- change this path obviously
  WITH INIT, COMPRESSION;
GO
REVERT;
GO

Donc, je validerais que le compte de service SQL Server a suffisamment de privilèges pour écrire sur le chemin en question. Je sais que vous avez dit que c'était le cas, mais comme je l'ai montré, cela ne semble pas poser de problème à l'utilisateur peon, mais plutôt à la capacité du moteur sous-jacent à écrire dans le système de fichiers. Si vous essayez la commande de sauvegarde ci-dessus sans ajouter peon au rôle db_backupoperator, vous obtenez cette erreur (cela ne vous permet pas de vous rapprocher de la commande de sauvegarde réelle ni de vérifier les autorisations éventuelles sur le disque):

Msg 262, Level 14, State 1, Line 1
BACKUP DATABASE permission denied in database 'splunge'.
Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally.

S'il s'agit d'une connexion Windows, veuillez valider que l'utilisateur dispose bien d'autorisations en écriture sur le dossier en question. Essayez un autre dossier que la hiérarchie sous C:\Program Files\... et n'essayez pas d'écrire directement à la racine (par exemple C:\file.bak).

17
Aaron Bertrand

db_backupoperator est un rôle de base de données, et non un rôle de serveur ou une autorisation Windows. Il n'accorde à l'utilisateur que l'accès nécessaire à la base de données pour effectuer une sauvegarde. Il n'accorde aucun droit sur la structure de fichiers du serveur, nécessaires pour créer le fichier de sauvegarde.

IIRC, pour accéder à la structure de fichier afin de créer une sauvegarde, l'utilisateur doit déjà disposer des droits Windows/du domaine pour y accéder, ou bien le rôle de serveur sysadmin pour pouvoir accéder aux droits d'accès Windows du serveur SQL Server.

En outre, pour restaurer une base de données, l'utilisateur aura besoin du rôle de serveur dbcreator .

17
RBarryYoung

Mon hypothèse est qu'il s'agit d'un problème d'authentification Windows et de sécurité intégrée. SQL Server emprunte parfois l'identité de l'utilisateur qui se connecte. Essayez d’ajouter des autorisations Windows ACL pour l’utilisateur Windows avec lequel vous vous connectez.

1
usr

J'exécute Windows 10 (x64), SQL Server Express 2014, en essayant de restaurer une sauvegarde sur une base de données x86 SQL Server 2005 afin de pouvoir utiliser les données et aider à résoudre un bogue dans notre application. J'ai rencontré le même scénario avec des autorisations lors de la sauvegarde et de la restauration d'un fichier .bak.

Même chose ici, je suis un administrateur sur mon PC, j'ai supposé (mon erreur) que le service SQL Server fonctionnait sous mon compte Windows (car je me connectais à la gestion SQL avec mes informations d'identification Windows). 

Donc, ce que j’ai fait, c’est aller dans Services dans Windows, trouver SQL Server, cliquer avec le bouton droit de la souris sur Propriétés, arrêter le service, puis aller sur l’onglet LogOn et changer le "Ouvrir une session" en "Compte système local" et cocher la case "Autoriser le service à interagir avec le bureau". Commencé le service, et j'étais sur mon chemin.

Étant donné que mon environnement est fermé - uniquement pour le développement - cela a été une solution rapide pour moi. Je dois vous prévenir que ce n'est pas une pratique recommandée pour les utilisateurs finaux! Juste pour nous devs.

1
JasonH