Microsoft propose un résumé composé de dix étapes clés à mettre en place afin de sécuriser un serveur de bases de données SQL 2000. L’article original est disponible ici (version anglaise).
Pour les anglophobes, un résumé de ces dix étapes est disponible ci-dessous.
1. Installer le service pack le plus récent
SQL 2000 Serveur en est au service pack 3a. Si vous ne le saviez pas encore, il est encore temps de faire cette mise à jour au plus vite à partir du portail SQL 2000.
2. Tester le niveau de sécurité avec l’outil gratuit MBSA
L’outil Microsoft Baseline Security Analyser est gratuitement proposé en téléchargement par Microsoft. Cet outil effectue un contrôle exhaustif du niveau de sécurité de votre système et de la qualité du paramétrage de vos applications Microsoft. L’utilisation de cet outil sur un serveur SQL 2000 portera certainement un bon nombre de propositions à votre attention telles que:
- les droits accordés au compte invité
- la qualité des mots de passe des comptes déclarés
- intégrité des droits accordés aux différents rôles
- paramétrage incorrect des services associés au serveur
- …
Pour récupérer l’outil MBSA: Accueil MBSA (us)
3. Préférez le mode d’authentification Windows
Lorsque c’est possible, placez le serveur en configuration ‘authentification Windows’. Les authentifications bénéficieront dès lors de mécanismes améliorés d’échange de mots de passes, et les mots de passes eux-mêmes n’auront pas besoin d’être indiqués en clair dans vos applications clientes.
Pour passer un serveur SQL 2000 en authentification intégrée Windows, réalisez les trois étapes suivantes:
- Lancez le gestionnaire de serveurs SQL 2000
- Clic droit sur le serveur concerné, puis ‘propriétés
- Dans l’onglet ’sécurité’, puis dans la section ‘Authentification’, activez l’authentification intégrée Windows
4. Isolez physiquement le serveur et sauvegardez régulièrement ses données
Tout est dans la directive.
5. Utilisez un mot de passe complexe pour le compte sa
Remarque personnelle: faites-le aussi pour les autres comptes. Ca ne mange pas pain.
6. Limitez le niveau de privilège des services associés au serveur
Deux services sont principalement associés au serveur: le serveur de bases de données lui-même ainsi que l’agent (SQL Server Agent). Ces services permettent l’exécution de commandes systèmes. Lorsque de telles commandes sont lancées, elles sont associées au compte titulaire de l’exécution du service. Si l’administrateur ou le compte système sont titulaires du service, toutes les commandes systèmes lancées sont exécutées avec leurs droits associés.
Afin de prévenir ce risque, il est conseillé de modifier les comptes titulaires de ces deux services et de préférer des comptes dotés de droits utilisateurs simples.
Attention cependant, dans certains cas bien précis cette opération n’est pas possible.
7. Empêchez l’accès au serveur par l’extérieur
Si votre structure réseau ne dispose pas encore d’un pare-feu, il est grand temps de vous réveiller. Si ce n’est pas le cas, vérifiez que le pare-feu refuse toute tentative de connexion sur les ports TCP 1433 et UDP 1434 du serveur SQL 2000.
8. Utilisez le système de fichiers NTFS
Il est également possible d’utiliser le système de fichiers EFS (chiffrement transparent des fichiers). Veillez cependant à ne pas vous faire avoir: les données sont chiffrées selon une clé associée au compte utilisateur titulaire des données. En cas de perte de ce compte, toutes les données seront perdues.
9. Supprimez ou protégez l’accès aux fichiers d’installation
L’installation du serveur génère des fichiers inutiles s’il n’y a pas eu de problème particulier. C’est le cas par exemple des fichiers logs. Consultez l’article original pour obtenir les chemins précis de ces fichiers.
Sinon, Microsoft propose un outil gratuit, Killpwd, pouvant effectuer ce travail pour vous en nettoyant les fichiers journaux de toute information critique.
10. Auditez les connexions sur le serveur SQL 2000
Il est important d’avoir une trace des événements lorsque l’on souhaite mettre en place des mesures de sécurité. Les échecs de connexion constituent une information particulièrement importante, qui doit être surveillée au possible.
Pour activer cette journalisation, lancez le gestionnaire de serveurs SQL 2000, clic-droit sur le serveur concerné, puis ‘propriétés’. Dans l’onglet ’sécurité’, section ‘niveau d’audit’, activez l’option ‘auditer les échecs’.
Le développeur orienté Microsoft est de plus en plus amené à développer des applications dont les données sont gérées par des serveurs de type SQL 2000. Dans le cadre d’une machine de développement, l’installation d’une instance SQL 2000 peut s’avérer disproportionnée par rapport aux besoins réels, que ce soit au niveau des fonctionnalités offertes ou simplement des licences nécessaires à une utilisation légale.
MSSQL 2000 Server - Developer Edition
Il n’existe quasiment aucune différence entre La version Developer de SQL 2000 Server et la version Entreprise. On notera simplement que la licence ne permet une utilisation commerciale d’une instance Developer et doit être donc réservée aux environnements de développement uniquement. Cette version est payante mais, un bon point de la part de Microsoft, reste très accessible à un développeur grâce à son coût bas: 49.95$.
A ce prix-là, cela peut toujours s’avérer être une option intéressante dans la mesure où le packaging contient toute la documentation (SQL Books Online) et les outils de gestion de la version Professional dont le Query Analyzer et le Entreprise Manager.
Version épurée: MSDE
Epurée est le mot qui convient. La version Desktop de SQL 2000 Server ne propose à proprement parler que le moteur de gestion de données (serveur et librairies) ainsi que l’outil de gestion par ligne de commande: osql.
La version MSDE dispose de quelques limitations par rapport à ses grands frères: 2 processeurs maximum par serveur, 2 Go. de mémoire vive accessibles, un nombre limité de transactions simultanées et des bases de données limitées à une taille de 2Go. Néanmoins, ces limitations restent usuellement largement supérieures aux besoins d’une base de développement.
Autre point important: la licence MSDE accorde un droit explicite de redistribution. Vous avez bien lu: cette version peut être ‘bundlée’ dans vos solutions sans pour autant nécessiter un investissement supplémentaire. Cette option est donc à explorer pour tous les indépendants et petites structures.
Ah! J’oubliais un petit détail.. MSDE est gratuit et peut être téléchargé sur le site officiel.
Installer MSDE
L’on reproche fréquemment à la distribution MSDE de ne pas être aussi ‘facile’ d’installation que les autres versions de SQL 2000 Server. Il s’agit ici premièrement d’un choix politique de Microsoft: on vous fournit l’outil gratuitement mais à l’état brut. Il vous faudra donc retrousser un tout petit peu (promis!) vos manches pour pouvoir installer MSDE.
Après avoir décompressé MSDE dans un dossier de votre choix, vous voudrez intuitivement cliquer sur le fichier ’setup.exe’ pour démarrer l’installation. N’en faites rien, l’installation de MSDE est prévue pour s’effectuer en mode ‘unattended’, c’est-à-dire, sans intervention humaine. Aucune option ne vous sera donc proposée.
Afin de ‘personnaliser’ votre installation, vous allez devoir lancer l’installation à partir d’une ligne de commande. Cette procédure vous permettra de spécifier plusieurs paramètres à votre convenance.
Les paramètres suivants sont à retenir:
SAPWD="unmotdepassecomplexe”
Spécifie le mot de passe d’accès via le compte administrateur ’sa’
INSTANCENAME="unnomdinstance”
Spécifie un nom d’instance. N’utilisez pas cette option si vous voulez utiliser une instance par défaut (conseillé)
DISABLENETWORKPROTOCOLS=n (1 pour désactiver, 0 pour activer)
Active ou désactive les protocoles d’accès aux données à distance. L’accès via réseau est désactivé par défaut. Il est conseillé de désactiver cette option (valeur = 0) si vous souhaitez accéder à votre base via une autre machine ou des clients de gestion du serveur.
SECURITYMODE=sql
Permet l’authentification en mode SQL. Ne pas modifier cette option pour rester en mode intégré Windows.
DATADIR="d:\applications\sql2000\data\”
Spécifie le chemin d’accès où seront stockées les bases de données.
TARGETDIR="d:\applications\sql2000\server\”
Spécifie le chemin d’accès où seront stockés les fichiers du serveur.
Exemple de commande pour installer une instance standard, avec mot de passe administrateur ‘msde1945==’ dans le dossier ‘d:\applications\sql2000', authentification SQL et accès réseaux activés:
setup.exe SAPWD="msde1945==” TARGETDIR="d:\applications\sql2000\” SECURITYMODE="sql” DISABLENETWORKPROTOCOLS=0
L’installation s’effectuera automatiquement sans intervention supplémentaire de votre part.
Préparer MSDE pour le développement
Comme il a été stipulé plus haut, MSDE ne propose qu’un outil d’administration via ligne de commande. Il n’est pas nécessaire d’être un expert en T-SQL pour pouvoir faire ses premiers pas avec une application. Dans la majeure partie des cas, il s’agira de réaliser les étapes suivantes:
- Créer une base de données;
- Créer un compte utilisateur;
- Déclarer une autorisation pour cet utilisateur vers la base de données créée.
Vous pouvez lancer l’outil d’administration ‘osql’ via la ligne de commande en tapant soit ‘osql.exe -E s’il s’agit d’un accès local ou ‘osql.exe -H hote -U sa‘ pour un accès via un poste distant. Pour sortir de l’utilitaire, saisissez la commande ‘exit’. Ci-dessous, les copies de console dans les deux modes d’accès:
C:\tmp>osql -E
1> exit
C:\tmp>osql -H TABATHA -U sa
Password:
1> exit
C:\tmp>
Remarque: les commandes saisies en mode T-SQL sont ‘batchées’. Elles ne sont donc pas exécutées immédiatement après la saisie mais seulement lorsque vous donnez l’ordre d’exécution ‘GO’.
Créer une base de données
Pour créer une base de données, utiliser la commande ‘create database’.
C:\tmp>osql -E
1> create database demo
2> go
The CREATE DATABASE process is allocating 0.63 MB on disk ‘demo’.
The CREATE DATABASE process is allocating 0.49 MB on disk ‘demo_log’.
1> exit
C:\tmp>
Créer compte utilisateur
Pour créer le compte utilisateur (procédure ’sp_addlogin’):
C:\tmp>osql -E
1> sp_addlogin ‘casanova’,'casa1945'
2> go
New login created.
1> exit
Déclarer une autorisation pour cet utilisateur vers la base de données créée
Utiliser la commande ‘use’ pour sélectionner la base concernée puis utiliser la procédure ’sp_grantdbaccess’:
C:\tmp>osql -E
1> use demo
2> go
1> sp_grantdbaccess ‘casanova’,'demo’
2> go
Granted database access to ‘casanova’.
1> exit
C:\tmp>
Autres commandes utiles
sp_droplogin ‘utilisateur’ : supprime un compte utilisateur
sp_password ‘ancien’, ‘nouveau’, ‘compte’ : modifie le mot de passe d’un utilisateur
backup database nombase to disk = ‘chemindisque\fichier.bak’ : effectue une sauvegarde de la base de données
backup log nombase to disk = ‘chemindisque\fichier.bak’ : effectue une sauvegarde du journal de la base de données
restore database nombase FROM DISK = ‘chemindisque\fichier.bak’ : effectue une restauration de la base de données
Modélisation des bases MSDE
La modélisation des données peut s’effectuer au travers de n’importe quel outil ‘externe’ tel que Visio ou Access par exemple. Il existe également des outils gratuits tels que le MSSQL Web Data Administrator (téléchargeable ici) ou encore l’outil de modélisation inclus dans l’IDE gratuit Webmatrix (téléchargeable ici). Je ne vais donc pas m’attarder plus longuement sur ce sujet!
Conclusion
La communauté MSDE étant de plus en plus nombreuse, le sujet est dès lors plus présent au travers des moteurs de recherche. Vous trouverez facilement de la documentation relative aux différentes tâches d’administration sur différents sites, ou dans de la littérature spécialisée (les premiers ouvrages intéressants apparaissent) si votre bourse vous le permet.
La version MSDE de SQL 2000 Serveur est donc une alternative de choix dans les environnements de développement, de production ‘basse’ (-de 25 utilisateurs) ou encore dans le cadre d’applications web (connections directes avec un serveur d’applications). Elle fournit les fonctionnalités et la puissance du serveur de bases de données SQL 2000 Server tout en demandant un léger compromis en termes administratifs.