Skip to main content

Restrictions et règles SQL Server

Environnement: WINDOWS SQL Server 2014
Base de données: AdventureWorks2012

Introduction

En tant qu’administrateur de base de données vous allez être amené à mettre en place un certain nombre de règles et de restrictions sur votre serveur.

  • interdiction de commencer une procédure stockes par « sp_ ».
  • interdiction de mettre les fichiers DATA ET LOG sur le même volume.
  • vérifier qu’une base de données possède l’option autoshrink et
    autoclose
    .
  • vérifier que toutes tables utilisateurs possèdent une clé primaire.

Et bien d’autres règles.

Pour nous aider à mettre cela en place MICROSOFT a mis en place depuis la version 2008 de SQL Server, une gestion basée sur les règles. Celle-ci est accessible via SQL Server Management Studio sous le nœud Gestion/Management. On retrouve l’ensemble des concepts présentés ci-dessus sous le nœud « Policy Management » comme les règles (Policies), les conditions (Conditions) et les facettes (Facets).

Emplacement de la gestion des règles et restrictions dans SQL Server management studio.
Emplacement de la gestion des règles et restrictions dans SQL Server management studio.

Les facettes : objets sur lesquels vont porter des conditions.
Les conditions : tests qui portent sur une facette.
Les règles : conditions appliquées à des cibles (bases, serveurs…) avec ou sans planification.

Restrictions et règles SQL Server – Création d’une règle

Nous allons utiliser la facette procédure stockée pour y mettre une condition qui vérifiera que le nom ne commence pas par « sp_ ».

Condition qui vérifie que le nom ne commence pas par "sp_"
Condition qui vérifie que le nom ne commence pas par « sp_ »

Ensuite nous créons une règle qui utilise notre condition. Elle sera évaluée à chaque création de procédure stockées et bloquée si besoin.

Règle appliquée à notre condition
Règle appliquée à notre condition

Essayons maintenant d’ajouter une procédure stockée qui ne respecte pas notre règle :

create procedure sp_test as
begin
   select getdate()
end

Nous avons l’erreur suivante :

Policy ‘VerifNameStoredProcedure’ has been violated by
‘SQLSERVER:\SQL\localhost\DEFAULT\Databases\AdventureWorks2012\StoredProcedures\dbo.sp_test’.
This transaction will be rolled back.
Policy condition: ‘@Name NOT LIKE ‘sp% »
Policy description:  »
Additional help:  » :  »
Statement: ‘create procedure sp_test as
begin
select getdate()
end ‘.
Msg 3609, Level 16, State 1, Procedure sp_syspolicy_dispatch_event, Line 65
The transaction ended in the trigger. The batch has been aborted.

Restrictions et règles SQL Server – Import d’une règle

Microsoft a mis en place quelques règles que nous pouvons importer.
Voici l’écran d’import de la règle qui vérifiera l’autoshrink de nos bases.

Import d'une règle
Import d’une règle
Notre stratégie vient d’être ajoutée à la liste, nous allons pouvoir l’évaluer.
Notre stratégie vient d’être ajoutée à la liste, nous
allons pouvoir l’évaluer.

Le résultat de l’évaluation est le suivant :

Nous constatons que une des bases de données ne respecte la règle de gestion importée.
Nous constatons que une des bases de données ne respecte la règle de gestion importée.

Conclusion

Grâce à la gestion basée sur les règles, nous allons pouvoir valider que notre serveur de bases de données suit les règles et « best practice » préconisé par Microsoft. De plus nous pourrons ajouter autant de règles que nous le déciderons et qui seront propre à notre métier.

Nicolas C.

Architecte .Net

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.