Alternative au Copie Database Wizard de SQL Server

Il y a quelques temps j’ai eu à faire face à une demande plutôt anodine chez un de mes clients. Un utilisateur voulait pouvoir utiliser le copie database Wizard pour pouvoir effectuer une sauvegarde avant de tester sa mise à jour applicative. En premier lieu je lui dis pas de souci, je te fais cela de suite mais en regardant la documentation en ligne SQL Server je m’aperçois rapidement que pour lancer et utiliser correctement l’assistant de copie de bases de données il faut faire parti du rôle de serveur sysadmin sur le serveur source et le serveur de destination !!! Autant dire que cela ne me convenait pas. Il a donc fallu trouver une alternative.

Notre utilisateur doit avoir les privilèges suivants :

  • Créer une base de données
  • Pouvoir utiliser un fichier de sauvegarde pour pouvoir restaurer la base de données concernée
  • Supprimer l’historique de sauvegarde dans le cas de suppression d’une base de données

icon_arrow Pour le premier point il suffit de donner les droits de création de base à l’utilisateur. Pour cela plusieurs méthodes :

  • Ajouter le compte de connexion associé à l’utilisateur au rôle de serveur db_creator
  • Octroyer le droit CREATE DATABASE de la façon suivante :

GRANT CREATE ANY DATABASE to [login]

icon_arrow[4] Pour le deuxième point, on se retrouve rapidement confronter (encore) à des problèmes de privilèges sur des procédures stockées ou vues systèmes (xp_available_media et VIEW SERVER STATE) d’une part et sur le système de fichiers d’autre part. J’ai préféré adopter une solution de contournement beaucoup plus simple à mettre en oeuvre : créer un périphérique de sauvegarde associé à un fichier de sauvegarde et qui pourra être utilisé sans problème par notre utilisateur. De plus ce dernier n’aura pas à se soucier de l’emplacement de la sauvegarde. Par exemple :

USE [master]
GO
EXEC master.dbo.sp_addumpdevice  @devtype = N’disk’, @logicalname = N’TestDB’, @physicalname = N’H:\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\TestDB.bak’
GO

icon_arrow[4] Enfin pour le dernier point il suffit simplement d’octroyer le droit d’exécution à la procédure stockée système sp_delete_database_backuphistory de la façon suivante :

GRANT EXECUTE ON [dbo].[sp_delete_database_backuphistory] TO [User]
GO

Voilà avec l’ensemble du paramétrage cité ci-dessus on peut finalement arriver au même résultat que l’assistant de copie de base de données avec des privilèges beaucoup moins élevés.

David BARBARIN (Mikedavem)
MVP SQL Server

 

2 réflexions au sujet de « Alternative au Copie Database Wizard de SQL Server »

Laisser un commentaire