Autorisations SQL Server pour créer, restaurer, supprimer uniquement certaines bases de données

17

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?

Cicik
la source
Vous pouvez obtenir quelques conseils ici: toadworld.com/platforms/sql-server/w/wiki/…
dezso

Réponses:

27

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. Notez que cela ne donne pas 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 Databasepermet à la connexion d'avoir uniquement le pouvoir sur les bases de données dont elle est propriétaire. Cela donnera également la possibilité de restaurer.

(Donc, en faisant "Créer n'importe quelle base de données" UNIQUEMENT - 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 CHECKDBet 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. Remarque: 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 sysadmindans une base de données.

Vous appliquerez uniquement cette autorisation à la base de données sur laquelle vous avez l'intention 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_ownerrôle (Works 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 ci-dessous, à juste titre indiqué:

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: Faites un clic 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. Effectuez simplement une recherche pour 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 vous indiquant les autorisations requises pour effectuer cette action. Vous pouvez consulter l'article pour DBCC CHECKDB pour un exemple - environ 7/8 du bas de l'article est la section des autorisations.

Mike Walsh
la source
3
Je voudrais juste ajouter que cela ALTER ROLE [db_owner] ADD MEMBER [frank]ne fonctionne qu'à partir de SQL Server 2012. Si vous êtes sur SQL Server 2008, il faut aller avec le SP: EXEC sp_addrolemember 'db_owner', 'frank';(Ref ici et ici )
superjos