Sur MS SQL Server 2008 R2, j'ai besoin d'un utilisateur qui peut créer, restaurer, DBCC CHECKDB puis supprimer des bases de données. Mais il ne doit pas pouvoir accéder ou supprimer les bases de données spécifiées sur le serveur (raisons de sécurité). Cette configuration est-elle possible?
Oui, c'est possible grâce à quelques autorisations.
Tout d'abord - pour créer une base de données - Vous devez accorder l'autorisation au niveau du serveur Create Any Database
. Cette autorisation fait exactement ce que cela ressemble - le pouvoir de créer une base de données. Remarque c'est pas donner le rôle de serveur fixe de dbcreator à la connexion, car ce rôle de serveur fixe donne des autorisations de modification/suppression sur n'importe quelle base de données. Create Any Database
permet à la connexion d'avoir uniquement le pouvoir sur les bases de données qu'elle possède. Cela donnera également la possibilité de restaurer.
(Donc, en faisant "Créer une base de données" [~ # ~] seulement [~ # ~] - vous donnez la possibilité de créer une nouvelle base de données, mais en évitant la possibilité de supprimer ou de modifier [~ # ~] toute base de données [~ # ~] que vous obtiendriez en utilisant le rôle de serveur fixe dbcreator )
Pour accorder cette autorisation "Créer une base de données" -
use [master]
GO
GRANT CREATE ANY DATABASE TO [LoginName]
GO
Pour pouvoir exécuter DBCC CHECKDB
et pour supprimer des bases de données - le rôle de base de données fixe db_owner est suffisant. Cela accorde tout ce que vous demandez. Veuillez noter: Vous accordez également à cet utilisateur la possibilité de sélectionner, supprimer, tronquer, mettre à jour et insérer avec db_owner
. J'aime à penser à cela comme sysadmin
dans une base de données.
Vous n'appliquerez cette autorisation qu'à la base de données sur laquelle vous prévoyez d'avoir cette capacité. Cela vous permettra de contrôler sur quelles bases de données l'utilisateur peut supprimer, restaurer ou vérifier. Toutes les bases de données sur lesquelles vous n'avez pas accordé à l'utilisateur ces autorisations seront à l'abri de cet utilisateur effectuant ces actions sur
Pour ce faire, vous devez d'abord mapper la connexion à un utilisateur de base de données:
USE [DatabaseName]
GO
CREATE USER [UserName] FOR LOGIN [LoginName]
GO
Et puis ajoutez cet utilisateur au db_owner
rôle (fonctionne dans SQL Server 2012 et versions ultérieures):
ALTER ROLE [db_owner] ADD MEMBER [frank]
GO
Pour SQL Server 2008, vous devez utiliser la procédure stockée système pour ajouter un membre de rôle en tant que commentateur indiqué à juste titre:
EXEC sp_addrolemember 'db_owner', 'frank';
Vous pouvez également faire tout cela via l'interface graphique. Les informations de connexion que vous feriez via le dossier de sécurité dans SSMS au niveau de l'instance: cliquez avec le bouton droit sur la connexion -> Propriétés -> Securables. Pour le niveau de la base de données, vous le feriez via le dossier de sécurité au niveau de la base de données: faites un clic droit et sélectionnez un nouvel utilisateur -> choisissez la connexion que vous souhaitez utiliser dans votre liste de connexions au serveur/donnez un nom à l'utilisateur de la base de données -> allez à l'onglet d'appartenance pour sélectionner l'appartenance au rôle.
Le système d'aide de SQL Server, Books Online, est également une ressource fantastique pour la plupart des questions sur les autorisations - si vous déterminez que vous devez attribuer d'autres autorisations. Recherchez simplement la commande T-SQL à laquelle vous souhaitez accorder des autorisations et il existe généralement une section Autorisations pour cette commande dans l'article pour vous informer quelles autorisations sont nécessaires pour effectuer cette action. Vous pouvez consulter l'article pour DBCC CHECKDB pour un exemple - environ 7/8 de la descente de l'article est la section des autorisations.