 TechNet Magazine April 2008

TechNet Magazine April 2008

SQL Server 2008: Nouveautés

La nouvelle version de SQL Server offre toute une gamme de nouvelles fonctionnalités et d'améliorations qui promettent d'accroître les performances, de renforcer la sécurité et de faciliter la vie aux administrateurs de base de données. Voici un aperçu des modifications clés et une idée de ce que vous pouvez attendre de SQL Server 2008.

Randy Dyess SQL Server 2008: Sécurité

La sécurité continue d'être un domaine d'amélioration intentionnelle pour SQL Server. Explorez certaines des modifications de sécurité les plus importantes que vous trouverez dans SQL Server 2008, des améliorations du chiffrement et de l'authentification à la gestion basée sur les stratégies et au nouveau système d'audit qui vous aidera à vous conformer aux exigences réglementaires.

Rick Byham SQL Server 2008: Nouveaux types de données

SQL Server 2008 offre sept nouveaux types de données prédéfinis vous permettant de travailler avec des données plus complexes et de simplifier la gestion de données structurées, semi-structurées et même non structurées. Examinez plus en détail ces nouveaux types de données et découvrez comment les utiliser pour améliorer la gestion des données dans votre infrastructure.

Kelly Wilson SQL Server 2008: Performances des requêtes d'entrepôts de données

SQL Server 2008 offre des possibilités d'entreposage de données relationnelles plus puissantes. Examinez les fonctionnalités d'entreposage de données associées aux performances principales et découvrez comment vous pouvez utiliser cette toute nouvelle technologie pour optimiser les performances des requêtes.

S. Agarwal, T. Grabs, and J. Hammer SQL Server: Réduire les blocages dans SQL Server

Même si les verrous sont essentiels à la prise en charge des activités de lecture et d'écriture simultanées sur une base de données, les blocages peuvent avoir un effet négatif sur les performances du système. Apprenez à optimiser votre base de données SQL Server pour réduire les blocages et voyez comment vous pouvez contrôler le système pour mieux comprendre l'impact des verrous sur les performances.

Cherié Warren Microsoft Office: Intégration de bases de données Access avec SharePoint

De nombreuses entreprises continuent de faire confiance à Microsoft Access. Fort heureusement, Microsoft Office SharePoint Server 2007 vous permet d'intégrer vos données Access héritées. Découvrez comment vous pouvez utiliser ces outils pour créer de nouvelles solutions pour votre organisation.

Peter Serzo Le mot du rédacteur en chef: Aux amis, anciens comme nouveaux

Joshua Hoffman Lettres: Les lecteurs ont la parole

Boîte à outils: Nouveaux produits pour les professionnels de l’informatique

Greg Steen Forum aux questions sur SQL: Expansion des bases de données, utilisation d'IFilters et connexion à distance

Découvrez comment étendre des bases de données par programmation, apprenez à utiliser IFilters et explorez les paramètres de pare-feu qui prennent en charge les connexions à distance de SQL Server.

Edited by Matthew Graven Coup de projecteur sur les utilitaires: Outil d'analyse de capacité Web

Les journaux Web et l'analyse de trafic peuvent vous donner une bonne idée du type de trafic que vous pouvez prévoir avec le temps. Mais comment pouvez-vous déterminer les capacités de traitement de votre infrastructure ? L'outil d'analyse de capacité Web gratuit peut vous aider à évaluer les performances de vos systèmes lorsqu'ils sont fortement sollicités.

Greg Steen Le petit câbleur: Dépannage de la contrainte de mise en conformité NAP

Le dépannage des comportements de contrainte de mise en conformité de la plate-forme de protection d'accès réseau peut constituer un défi. Le petit câbleur explique comment fonctionne l'évaluation de la stratégie de contrôle d'intégrité NAP et comment résoudre les problèmes les plus courants.

Joseph Davies Windows PowerShell: Signez ici, s'il vous plaît

Présentation de la signature des scripts pour une meilleure sécurité.

Don Jones Hé, vous le scripteur !: Le retour du script de base de données

Les bases de données contiennent probablement les informations les plus importantes pour votre organisation. Ce mois-ci, les scripteurs vous expliquent comment utiliser VBScript pour lire rapidement les informations d'une base de données, ajouter et supprimer des enregistrements, et même effectuer des mises avec seulement quelques lignes de code.

The Microsoft Scripting Guys Vigilance sécurité: Où se trouvent mes informations d’identification personnelle ?

Avant de pouvoir protéger vos informations d’identification personnelle, vous devez savoir où elles sont enregistrées sur votre PC. Voici comment écrire des scripts qui vous permettront de localiser vos données personnelles sur votre ordinateur. Ces scripts vous révéleront des choses surprenantes.

Frank Simorjay Histoires de Bureau: Déploiement de Windows XP avec Windows AIK

Le Kit d’installation automatisée a été principalement conçu pour Windows Vista et Windows Server 2008. Mais savez-vous qu'il peut également vous aider à déployer Windows XP et Windows Server 2003 ? Voici ce que vous devez savoir pour démarrer.

Wes Miller Sur le terrain: Une « MARveilleuse » initiative

Découvrez comment le nouveau programme MAR (Microsoft Authorized Refurbisher) peut aider les entreprises à faire face aux problèmes épineux liés aux licences de logiciels lorsqu'elles reconditionnent les vieux ordinateurs.

Neil Fawcett La vie secrète de Windows: Fichiers partagés

« Voulez-vous vraiment supprimer ce fichier partagé » ? Raymond Chen explique pourquoi un programme de désinstallation peut vous poser une telle question lorsque vous supprimez un programme.

Raymond Chen


 SQL Server&#160;2008: Nouveaut&#233;s
SQL Server 2008 Randy Dyess

Nouveautés
Vue d'ensemble:
  • Gestion plus puissante
  • Performances et évolutivité améliorées
  • Sécurité et disponibilité renforcées
  • Changements pour les développeurs

Microsoft a donc publié une nouvelle version de SQL Server qui promet de faire la joie des administrateurs de base de données. La dernière version est SQL Server 2008. Elle offre une grande variété de nouvelles
fonctionnalités qui faciliteront énormément les tâches administratives.
Les administrateurs de base de données qui sont familiers avec SQL Server® 2005 reconnaîtront plusieurs des fonctionnalités qu'ils utilisent dans leurs tâches quotidiennes, mais ils ne tarderont pas aussi à découvrir que ces outils familiers ont été améliorés dans SQL Server 2008. Les nouvelles fonctionnalités réduiront considérablement le nombre de solutions de contournement ou de personnalisation auxquelles il fallait faire appel pour utiliser diverses fonctionnalités dans les environnements de base de données complexes.
Les nouvelles fonctionnalités de SQL Server 2008 impliquent toute une gamme de rôles liés aux bases de données, ce qui les rend difficiles à classer. En classant les fonctionnalités par catégorie, je me rends compte que certains lecteurs se demanderont pourquoi j'ai placé la Fonctionnalité X sous la Catégorie Y alors qu'elle appartient clairement à la Catégorie Z. C'est une question de perspective, qui dépend également de la manière dont fonctionne votre entreprise.
Je sais que les administrateurs de bases de données se prennent souvent à effectuer d'autres tâches et à jouer d'autres rôles, mais j'essaierai de classer les nouvelles fonctionnalités dans les catégories génériques suivantes : gestion, évolutivité, performances, haute disponibilité, sécurité, développement et analyse décisionnelle.

Quoi de neuf dans la gestion ?
Pour les administrateurs de base de données (comme moi), la fonctionnalité de gestion supplémentaire fait de SQL Server 2008 un produit très intéressant. La nouvelle gestion de stratégies, la possibilité d'interroger plusieurs serveurs, les serveurs de configuration et le collecteur de données/entrepôt de gestion de données sont des fonctionnalités extrêmement utiles pour les administrateurs de base de données qui sont souvent responsables de la gestion d'environnements de bases de données aussi larges que complexes, avec souvent des centaines ou des milliers de bases de données et des dizaines ou même des centaines de serveurs.
La fonctionnalité de gestion de stratégies de SQL Server 2008, qui s'appelait DMF (Declarative Management Framework) dans les CTP (Community Technology Preview), vous permet de créer et exécuter des stratégies de configuration par rapport à un ou plusieurs serveurs bases de données. Ces stratégies vous permettent de veiller à ce que des paramètres de configuration standard soient appliqués et maintenus sur chacun des serveurs et des bases de données ciblés. Vous pouvez voir un exemple de cette fonctionnalité dans la figure 1.
Figure 1 Méthode recommandée pour l'emplacement des fichiers de données et des fichiers journaux
Figure 1 Méthode recommandée pour l'emplacement des fichiers de données et des fichiers journaux
Les stratégies sont créées à partir d'une série de facettes prédéfinies. Chaque facette contient un sous-groupe de paramètres de configuration SQL Server 2008 et d'autres événements que vous pouvez contrôler. Vous associez ces facettes à des conditions afin de créer une stratégie. Les conditions sont les valeurs autorisées pour les propriétés d'une facette, les paramètres de configuration ou d'autres événements se trouvant dans cette facette.
Les conditions sont également des valeurs qui sont utilisées pour les filtres de stratégies. Supposons que vous souhaitiez que la stratégie soit exécutée seulement par rapport à une base de données précise. Dans ce cas, vous pouvez créer une condition renfermant le nom de la base de données et l'ajouter à la stratégie. Celle-ci ne s'appliquera désormais qu'à cette base de données. La gestion de stratégies de SQL Server 2008 peut sembler complexe, mais une fois que vous l'aurez essayée, vous vous rendrez compte qu'elle est très intuitive.
Les nouvelles capacités d'interaction et de configuration multiserveurs sont très utiles lorsque vous avez besoin d'exécuter des requêtes sur plusieurs serveurs en même temps. Vous pouvez enregistrer des serveurs dans Management Studio puis les classer sous un groupe. Lorsque vous avez besoin d'exécuter une stratégie ou une requête par rapport à tous les serveurs de ce groupe, il vous suffit de cliquer avec le bouton droit sur le groupe et le tour est joué.
Autre avantage, vous pouvez configurer cette fonctionnalité pour qu'elle renvoie un jeu de résultats par serveur ou qu'elle regroupe tout le jeu de résultats dans un seul grand jeu de résultats. Vous pouvez également spécifier si vous voulez que les noms des serveurs et bases de données fassent partie des résultats afin de pouvoir séparer les résultats individuels de chaque serveur. La possibilité d'enregistrer les serveurs enregistrés sur le serveur de configuration plutôt que dans chaque Management Studio est un grand avantage.
Le collecteur de données est une autre fonctionnalité de gestion que vous trouverez très utile. Les administrateurs de bases de données ont souvent besoin de recueillir des données de gestion de plusieurs serveurs, et bon nombre d'entre eux ont créé leur propre solution personnalisée pour effectuer cette opération. Le collecteur de données est un mécanisme intégré qui facilite la tâche consistant à recueillir des données de gestion. Il vous permet d'utiliser l'Agent SQL Server et les services SSIS (SQL Server Integration Services) pour créer une infrastructure qui recueille et enregistre vos données tout en vous proposant un historique de gestion d'erreurs, d'audit et de collecte de données.
Contrairement aux outils tiers et aux tâches personnalisées, le collecteur de données sera facilement maîtrisé par la plupart des administrateurs de bases de données puisqu'il utilise l'Agent SQL Server et SSIS pour créer une série de tâches et de packages servant à contrôler les connexions, la collecte et le stockage de données (comme l'illustre la figure 2). Une fois ces données enregistrées dans un emplacement central généralement appelé Entrepôt de gestion, elles peuvent être affichées et organisées par le biais d'une série d'instructions T-SQL et de rapports SQL Server 2008 Reporting Services. Ce magasin de données central facilite énormément l'analyse et l'affichage des métriques de gestion générale de l'environnement des bases de données.
Figure 2 Fichier journal d'utilisation de disque du collecteur de données
Figure 2 Fichier journal d'utilisation de disque du collecteur de données

Quoi de neuf dans l'évolutivité ?
Avec le temps, les administrateurs de bases de données SQL Server ont vu leur environnement de bases de données devenir de plus en plus grand. À mesure que la taille de votre environnement de bases de données augmente, il vous faut de nouvelles méthodes et de nouveaux outils pour atteindre le niveau d'évolutivité que beaucoup d'entreprises requièrent. À cet effet, SQL Server 2008 a introduit plusieurs fonctionnalités utiles.
SQL Server 2008 est doté d'une fonctionnalité de compression intégrée qui vous permettra de compresser les fichiers de base de données et les fichiers journaux de transactions associés à la base de données compressée. SQL Server 2005 avait introduit la capacité de compresser des données sur un fichier ou un groupe de fichiers en lecture seule, mais cette forme de compression utilisait simplement la capacité de compression de Windows® NTFS. Avec SQL Server 2008, vous obtenez désormais une compression au niveau des lignes et des pages, ce qui vous donne des avantages que vous n'obtenez pas avec la compression au niveau des fichiers de données.
La compression au niveau des lignes et pages réduit la quantité d'espace de données nécessaire, tout en limitant également la quantité de mémoire nécessaire puisque les données demeurent compressées tant qu'elles sont en mémoire. Les données compressées en mémoire entraînent une utilisation de mémoire accrue, ce qui améliore l'évolutivité de nombreux systèmes.
SQL Server 2008 introduit également la compression au niveau de la sauvegarde. Bien que les sauvegardes de base de données n'enregistrent que la portion active de la base de données, elles représentent quand même des centaines de gigaoctets ou même des dizaines de téraoctets. Dans les environnements de bases de données qui possèdent plus d'une copie d'un fichier de sauvegarde de plusieurs téraoctets, l'espace de stockage pourrait être utilisé de manière plus efficace. En permettant aux administrateurs de bases de données de compresser leurs fichiers de sauvegarde, SQL Server 2008 libère une partie de cet espace qui peut ainsi être utilisé pour les données actives.
Nous arrivons à présent au gouverneur de ressources. Cette nouvelle fonctionnalité vous permet de définir les quantités de ressources que les groupes de charges de travail sont autorisés à utiliser pendant l'exécution. Avec le gouverneur de ressources, vous pouvez créer un environnement dans lequel différentes charges de travail coexistent sur un serveur sans avoir à craindre qu'une ou deux de ces charges ne submergent ce dernier, ce qui réduirait les performances des autres charges de travail.
L'avantage de cette fonctionnalité est que vous pouvez utiliser de manière plus efficace la quantité totale des ressources disponibles sur vos serveurs de bases de données. La figure 3 montre l'utilisation du gouverneur de ressources pour limiter l'activité sur un serveur.
Figure 3 Réduisez l'activité avec le gouverneur de ressources (Close Figure 3)
USE master
go

--Drop function
IF OBJECT_ID('rgclassifier_demo','Function') IS NOT NULL
DROP FUNCTION rgclassifier_demo
go

--Create a classifier function for report group
CREATE FUNCTION rgclassifier_demo() RETURNS SYSNAME
WITH SCHEMABINDING
AS
BEGIN
    DECLARE @group_name AS SYSNAME
  IF (USER_NAME() LIKE '%Launch_Demo%')
         SET @group_name = 'demogroup'
    RETURN @group_name
END
GO

--Drop workload group for anything coming from Management Studio
IF EXISTS (SELECT name FROM sys.resource_governor_workload_groups
  WHERE name = 'demogroup')
BEGIN
  DROP WORKLOAD GROUP demogroup
END
GO

--Create workload group
CREATE WORKLOAD GROUP demogroup
GO

--Register the classifier function with
--Resource Governor
ALTER RESOURCE GOVERNOR WITH (CLASSIFIER_FUNCTION= dbo.rgclassifier_demo)
GO

--Alter the dbogroup workload group to only
--allow 10% of CPU for each workload request
ALTER WORKLOAD GROUP demogroup
WITH (REQUEST_MAX_CPU_TIME_SEC = 10)
GO

--Create a new resource pool and set a maximum CPU limit for all workloads.
IF EXISTS (SELECT name FROM sys.resource_governor_resource_pools
  WHERE name = 'pooldemo')
DROP RESOURCE POOL pooldemo
GO

CREATE RESOURCE POOL pooldemo
WITH (MAX_CPU_PERCENT = 40)
GO

--Configure the workload group so it uses the
--new resource pool.
ALTER WORKLOAD GROUP demogroup
USING pooldemo
GO

--Apply the changes to the Resource Governor
--in-memory configuration.
ALTER RESOURCE GOVERNOR RECONFIGURE
GO

Quoi de neuf dans les performances ?
Les performances générales des bases de données sont améliorées avec SQL Server 2008. Grâce à plusieurs nouvelles fonctionnalités de SQL Server 2008, vous pouvez contrôler et surveiller les performances de vos bases de données et les applications qui s'exécutent sur elles.
Lorsque de nombreuses transactions sont exécutées toutes les secondes, le verrouillage qui survient normalement durant ces transactions peut avoir un impact négatif sur les performances de vos applications de bases de données. SQL Server est conçu pour réduire le nombre total de verrous tenus par un processus en les escaladant des plus petits verrous de niveaux de ligne et de pages aux grands verrous de niveau de table. Il est toutefois important de savoir que cette escalade de verrous peut causer des problèmes. Par exemple, une seule transaction peut verrouiller une table entière et empêcher d'autres transactions de fonctionner avec cette table.
SQL Server 2008 fonctionne avec le mécanisme de partitionnement de table (qui a été introduit dans SQL Server 2005) pour permettre au moteur de SQL Server d'escalader les verrous au niveau des partitions avant de les faire passer au niveau des tables. Ce niveau de verrouillage intermédiaire peut réduire de façon spectaculaire les effets d'escalade de verrous sur les systèmes qui traitent des centaines et des milliers de transactions par seconde.
SQL Server 2008 apportent plusieurs améliorations au processeur de requêtes qui s'avèrent particulièrement utiles lorsque la requête interagit avec des tables partitionnées. L'optimiseur de requête peut désormais exécuter des recherches de requêtes par rapport aux partitions comme il le fait par rapport aux index individuels en utilisant seulement l'ID de partition et non pas le mécanisme de partitionnement au niveau des tables.

Quoi de neuf dans la haute disponibilité ?
À mesure que les environnements de bases de données deviennent plus complexes et que la taille des bases de données augmente, la capacité à assurer la disponibilité de ces bases de données devient de plus en plus difficile. Les fonctionnalités familières que vous avez utilisées par le passé pour atteindre une haute disponibilité sont toujours présentes dans SQL Server 2008. Mais certaines de ces fonctionnalités ont été améliorées dans SQL Server 2008 et d'autres ont été ajoutées.
Avec SQL Server 2005, beaucoup d'administrateurs ont commencé à implémenter la mise en miroir de bases de données pour atteindre une haute disponibilité. SQL Server 2008 offre de nombreuses améliorations pour les opérations de mise en miroir des bases de données. Par le passé, par exemple, la mise en miroir des bases de données était parfois sujette à des problèmes de performances liés au déplacement des données de journaux de transactions des bases de données principales aux bases de données miroir. En réponse à ce problème, SQL Server 2008 réduit désormais la quantité d'informations qui est déplacée sur le réseau du journal des transactions de la base de données principale au journal des transactions de la base de données miroir en compressant ces information avant de les envoyer au journal des transactions du miroir pour être renforcées.
Vous avez à présent la capacité de réparer des pages de données corrompues sur la base de données principale. Si une base de données principale connaît une corruption des pages de données provoquée par les erreurs 823 et 824, la base de données principale peut demander une nouvelle copie de ces pages de données aux serveurs miroir. Cette requête de bonnes pages de données est un processus automatisé qui est transparent pour n'importe quel utilisateur qui accède actuellement aux bases de données principales.
Une autre nouvelle fonctionnalité, l'Ajout d'un processeur à chaud, vous permet d'ajouter des processeurs à un serveur de bases de données sans affecter la disponibilité des bases de données résidant sur ce serveur. Cependant, vous devez savoir que l'ajout de processeur à chaud comporte des restrictions car elle n'est utile que lorsque vous exécutez Windows Server® 2008 Enterprise Edition ou Datacenter Edition pour les systèmes Itanium de 64 bits et il nécessite l'édition Enterprise de SQL Server 2008.

Quoi de neuf dans la sécurité ?
SQL Server 2005 a introduit la sécurité des données sous forme de chiffrement de données. Dans SQL Server 2008, le chiffrement est considérablement amélioré avec l'introduction de deux fonctionnalités : la gestion des clés extensible et le chiffrement de données transparent.
La gestion des clés extensible propose une structure améliorée servant à enregistrer en toute sécurité les clés utilisées dans l'infrastructure de chiffrement, non seulement dans la base de données elle-même mais également en dehors de la base de données, dans des modules de logiciels tiers ou avec un module de sécurité physique.
Le chiffrement de données transparent offre une meilleure flexibilité dans le chiffrement des données en permettant au chiffrement d'être une propriété de la base de données et non pas uniquement le résultat de fonctions dans une ligne de code. Il en résulte que les administrateurs n'ont pas à exécuter toutes les modifications requises pour la structure des bases de données et le code d'application lorsqu'ils exécutent le chiffrement au niveau des données. Le code de la figure 4 montre comment chiffrer une base de données avec le chiffrement de données transparent.
Figure 4 Utilisation du chiffrement de données transparent (Close Figure 4)
USE master;
GO

--Create a master key
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'YouWillNeedToCreateAStrongPassword';
GO

--Create a certificate to use with TDE
CREATE CERTIFICATE TDECERT WITH SUBJECT = 'TDECert'
GO

--Change to the database to encrypt
USE AdventureWorks
GO

--Create your database master key
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_128 --Use a strong algorithm
ENCRYPTION BY SERVER CERTIFICATE TDECERT
GO

--Alter the database to encrypt it with the
--master database key
ALTER DATABASE AdventureWorks
SET ENCRYPTION ON
GO

Que deviennent les développeurs dans tout cela ?
Les administrateurs de bases de données ne sont pas les seuls à profiter directement des changements qui ont été apportés à SQL Server 2008. Il existe un certain nombre de nouvelles fonctionnalités qui ont été conçues pour aider les développeurs de bases de données. Parmi ces fonctionnalités, nous citerons les améliorations apportées à T-SQL et de nouveaux composants qui peuvent aider les développeurs à créer et utiliser des requêtes de base de données.
Beaucoup de développeurs de bases de données sont chargés de créer des requêtes servant à renvoyer les données nécessaires à leurs applications. Vous connaissez probablement l'outil LINQ ((Language Integrated Query) qui permet aux développeurs de bases de données de lancer des requêtes par rapport à une base de données en utilisant un langage de programmation de type Microsoft® .NET au lieu des instructions T-SQL normales. SQL Server 2008 a amélioré cet outil en offrant un nouveau fournisseur LINQ to SQL qui permet aux développeurs d'émettre des commandes LINQ directement par rapport aux tables et colonnes SQL Server. Ceci contribue à réduire le temps nécessaire pour créer de nouvelles requêtes de données.
En effectuant des tâches de développement par rapport aux bases de données, les développeurs utilisent des objets de plus haut niveau qu'ils associent aux tables et colonnes de bases de données individuelles. Ces objets, également appelés entités, représentent les données nécessaires aux applications de base de données et le développeur n'a donc pas besoin de comprendre la structure de stockage des données et le schéma de la base de données. Le nouveau ADO.NET Entity Framework permet désormais aux développeurs de créer des requêtes de base de données en utilisant ces entités. L'abstraction de la structure de base de données sous-jacente permet aux développeurs d'être plus productifs.
SQL Server 2008 offre plusieurs améliorations de T-SQL qui permettent aux développeurs de base de données d'être plus efficaces. Une de ces améliorations est la nouvelle instruction MERGE qui permet au développeur de vérifier l'existence de données avant de les insérer. Cette vérification qui s'effectue avant l'exécution de l'instruction INSERT permet aux données d'être mises à jour. Il n'est plus nécessaire de créer des jointures complexes afin de mettre à jour les données qui existent et d'insérer les données qui n'existent pas déjà, le tout lors d'une seule instruction.
En outre, la séparation des données heure/temps du type de données date/heure combiné est rendue plus facile. SQL Server 2008 introduit deux types de données séparés pour traiter les données liées à la date et à l'heure. Différents types de données auront des performances améliorées pour plusieurs requêtes puisqu'il n'y aura plus besoin d'effectuer une opération sur les données avant qu'elles ne puissent être utilisées dans la requête.
Lorsqu'ils créent de nouvelles structures de base de données, les développeurs de base de données ont souvent tendance à élargir la structure des bases de données afin d'implémenter les applications de mappage. SQL Server 2008 aide à résoudre ce problème avec de nouveaux types de données spatiales. Les deux types de données spatiales, GEOGRAPHY et GEOMETRY, permettent aux développeurs d'enregistrer des données spécifiques à un emplacement directement dans la base de données sans avoir à les diviser en formats convenant à d'autres types de données standard. Le code de la figure 5 est un exemple de table spatiale simple.
Figure 5 Une table spatiale simple (Close Figure 5)
IF OBJECT_ID ( 'Demo_SpatialTable', 'Table' ) IS NOT NULL
    DROP TABLE Demo_SpatialTable
GO

--Create table to hold spatial data
CREATE TABLE Demo_SpatialTable
    ( SpatialID int IDENTITY (1,1),
    SpatialInputCol geography,
    SpatialOutputCol AS SpatialInputCol.STAsText() )
GO

--Insert data into table
INSERT INTO Demo_SpatialTable (SpatialInputCol)
VALUES (geography::STGeomFromText('LINESTRING(47.656 -122.360, 47.656 -122.343)', 4326));

INSERT INTO Demo_SpatialTable (SpatialInputCol)
VALUES (geography::STGeomFromText('POLYGON((47.653 -122.358, 47.649 -122.348, 47.658 -122.348, 47.658 -122.358, 47.653 -122.358))', 4326));
GO

--View data to see that data has been converted and stored in col2
SELECT * FROM Demo_SpatialTable
Un problème fréquemment rencontré par les développeurs de bases de données par le passé était de savoir comment enregistrer et utiliser les gros objets binaires tels que les documents et les fichiers multimédia. La méthode généralement utilisée était celle qui consistait à enregistrer les fichiers en dehors de la base de données et d'enregistrer seulement un pointeur vers le fichier externe dans la base de données. Avec cette méthode, toutefois, vous ne devez pas oublier de mettre à jour le pointeur lorsque vous déplacez le fichier.
SQL Server 2008 résout ce problème grâce au nouveau type de données FILESTREAM. Avec ce type de données, les fichiers peuvent toujours être enregistrés à l'extérieur de la base de données, mais les données sont considérées comme faisant partie de la base de données pour des raisons de cohérence transactionnelle. Ceci permet d'utiliser les opérations de fichiers courantes tout en maintenant les avantages de performances et de sécurité de la base de données.

Et qu'en est-il de l'analyse décisionnelle ?
L'adoption de stratégies d'analyse décisionnelle a contribué en grande partie à une utilisation accrue de SQL Server durant ces dernières années. Les capacités d'analyse décisionnelle ne constituent pas une nouveauté pour SQL Server, mais SQL Server 2008 propose de nouvelles fonctionnalités pour la table.
Par exemple, l'enregistrement de données dans des entrepôts de données provoque souvent une perte d'espace en raison de la présence de valeurs NULL. Les colonnes qui enregistrent des valeurs NULL occupent l'espace de la plus grande taille des données qui soit autorisée et qui est définie dans la colonne. Cela signifie qu'une colonne comportant des milliers de valeurs NULL peut consommer plusieurs Mo d'espace sans en fait stocker de données.
SQL Server 2008 introduit des colonnes éparses qui permettent d'enregistrer les valeurs NULL sans occuper d'espace physique sur le disque. Parce que les colonnes éparses ne consomment pas d'espace, les tables qui renferment ce type de colonnes peuvent dépasser en fait la limite de 1 024 colonnes.
SQL Server 2008 introduit également une nouvelle fonctionnalité appelée Capture de données modifiées pour gérer les modifications incrémentielles qui doivent être chargées dans l'entrepôt de données. Cette fonctionnalité capture et place les données modifiées dans une série de tables de modification. La capture de données mises à jour, supprimées et insérées dans un schéma de stockage aisément consommé permet de charger de manière incrémentielle des entrepôts de données depuis ces tables, au lieu d'avoir à créer des instructions d'insertion personnalisées qui essaient de deviner les modifications apportées aux lignes de données existantes avant de mettre à jour l'entrepôt de données.

Conclusion
Ceci est un bref aperçu de ce que vous propose SQL Server 2008. Ce dernier apporte toute une gamme d'améliorations et mises à jour des fonctionnalités existantes qui feront la joie des administrateurs et développeurs de base de données. Enfin, il garantit aux bases de données d'aujourd'hui de meilleures performances et une meilleure évolutivité.

Randy Dyess est le mentor de Solid Quality Mentors. Il se spécialise dans les systèmes OLTP SQL Server. Randy est l'auteur de TransactSQL Language Reference Guide (Guide de référence du langage TransactSQL) et le coauteur de MCTS Self-Paced Training Kit: Microsoft SQL Server 2005 Implementation and Maintenance (Kit de formation MCTS : Implémentation et maintenance de Microsoft SQL Server 2005) (Examen 70-431). Il a également écrit de nombreux articles pour divers magazines et revues. Randy est également Directeur de programmes pour le groupe d'utilisateurs SQL Server du nord du Texas et MVP SQL Server. Consultez son blog à l'adresse blogs.solidq.com/EN/rdyess/default.aspx.
© 2007 Microsoft Corporation et CMP Media, LLC. Tous droits réservés. Toute reproduction, totale ou partielle, est interdite sans autorisation préalable.


 SQL&#160;Server&#160;2008: S&#233;curit&#233;
SQL Server 2008 Rick Byham

Sécurité
Vue d'ensemble:
  • Améliorations du chiffrement
  • Améliorations de l'authentification
  • Audit de sécurité
  • Gestion basée sur les stratégies

SQL Server 2008 apporte de nombreuses améliorations et de nouvelles fonctionnalités conçues pour améliorer la sécurité globale de votre environnement de base de données. Il ajoute le chiffrement par clé et des fonctionnalités d'authentification, et introduit un nouveau système d'audit pour
vous aider à créer des rapports sur le comportement des utilisateurs et à vous conformer aux exigences réglementaires.
Dans cet article, je vous présenterai les modifications les plus importantes en matière de sécurité que vous trouverez dans SQL Server® 2008. L'une des premières choses que vous remarquerez, c'est que l'outil Configuration de la surface d'exposition de SQL Server 2005 a disparu. Les options de protocole qui étaient exposées par cet outil sont maintenant disponibles dans l'outil Gestionnaire de configuration. Cependant, les fonctionnalités d'activation et de désactivation se trouvent désormais dans le nouvel environnement de gestion basées sur les stratégies de SQL Server 2008.

Améliorations du chiffrement
Il y a deux améliorations majeures dans le domaine du chiffrement. Premièrement, SQL Server peut désormais utiliser des clés de chiffrement stockées sur un module de sécurité matériel externe de fournisseur tiers. Deuxièmement, les données stockées dans SQL Server peuvent être chiffrées suivant une méthode transparente pour les applications qui se connectent à la base de données. Cela signifie que les administrateurs de base de données peuvent facilement chiffrer toutes les données stockées dans une base de données entière sans devoir modifier le code d'application existant.
La première amélioration est rendue possible grâce à la nouvelle fonctionnalité de Gestion des clés extensible (EKM), disponible dans les éditions Enterprise, Developer et Evaluation de SQL Server 2008. La Gestion des clés extensible permet aux fournisseurs tiers de solutions de gestion de clés d'entreprise et de modules de sécurité matériels d'inscrire leurs périphériques auprès de SQL Server. Une fois ces périphériques inscrits, les utilisateurs peuvent utiliser les clés de chiffrement stockées sur ces modules.
Ces fournisseurs peuvent même exposer des fonctionnalités de chiffrement avancées (telles que le vieillissement des clés et la rotation des clés) dans ces modules. Dans certaines configurations, ceci permet la protection des données contre les administrateurs de bases de données qui ne sont pas membres du groupe sysadmin. Les instructions cryptographiques T-SQL peuvent ensuite chiffrer et déchiffrer les données à l'aide des clés stockées sur le périphérique EKM externe.
Une autre nouvelle fonctionnalité, le chiffrement de données transparent, vous permet de chiffrer les fichiers de bases de données sans devoir modifier aucune de vos applications. Il exécute le chiffrement et le déchiffrement E/S des données et des fichiers journaux en temps réel. Le chiffrement utilise une clé de chiffrement de base de données (DEK), qui est stockée dans l'enregistrement de démarrage de la base de données pour être disponible pendant la récupération. La clé DEK est sécurisée avec un certificat stocké dans la base de données principale du serveur. Le diagramme de la figure 1 illustre l'architecture qui active le chiffrement de données transparent.
Figure 1 Architecture du chiffrement de données transparent
Figure 1 Architecture du chiffrement de données transparent
Cela est utile pour protéger les données au repos. Bien que vous puissiez prendre quelques précautions pour sécuriser votre base de données, par exemple en chiffrant les ressources confidentielles et en plaçant un pare-feu autour des serveurs de bases de données, le support physique sur lequel la base de données est stockée (même les bandes de sauvegarde) offrent une vulnérabilité différente. Un utilisateur malveillant pourrait voler ce support et potentiellement accéder aux données stockées.
Cependant, le chiffrement de données transparent, vous permet de chiffrer des données sensibles dans la base de données et de protéger les clés qui sont utilisées pour chiffrer les données avec un certificat. Ceci peut aider votre organisation à se conformer aux nombreuses lois, réglementations et directives sectorielles concernant la protection appropriée des données.
Le chiffrement de données transparent permet aux développeurs de logiciels de chiffrer les données à l'aide des algorithmes de chiffrement AES (Advanced Encryption Standard) et 3DES (Triple Data Encryption Standard). Le chiffrement du fichier de base de données est exécuté au niveau de la page, les pages étant chiffrées avant d'être écrites sur disque puis déchiffrées lors de leur lecture dans la mémoire. Les fichiers de sauvegarde des bases de données où le chiffrement de données transparent est activé sont également chiffrés à l'aide de la clé de chiffrement de base de données.
Pour restaurer une base de données chiffrée, vous devez avoir accès au certificat ou à la clé asymétrique qui a été utilisée pour chiffrer la base de données. Sans le certificat ou la clé asymétrique, la base de données ne peut pas être restaurée. Veillez par conséquent à conserver les clés tant que vous pouvez avoir besoin d'accéder aux sauvegardes apparentées.

Améliorations de l'authentification
Comme vous le savez probablement, Kerberos est un protocole d'authentification réseau utilisé pour fournir une méthode hautement sécurisée d'authentification mutuelle des entités client et serveur (ou des entités de sécurité) sur un réseau. Kerberos permet aux utilisateurs d'atténuer les failles de sécurité, telles que les attaques par leurre et les attaques d'intercepteur. Comparé à l'authentification Windows® NTLM, Kerberos est plus sécurisé, plus robuste et offre de meilleures performances.
Pour authentifier une connexion utilisant mutuellement Kerberos, les noms principaux de service (SPN) d'une instance SQL Server doivent être inscrits auprès d'Active Directory®, et un pilote de client doit fournir un SPN inscrit lors de la connexion. Dans SQL Server 2008, l'authentification Kerberos a été étendue à tous les protocoles réseau, notamment TCP, le Canal nommé, la mémoire partagée et l'adaptateur d'interface virtuel (VIA). Par défaut, le pilote client déduit automatiquement un SPN correct pour une instance SQL Server auquel il se connecte. Vous pouvez également spécifier explicitement un SPN dans le paramètre de chaîne de connexion pour améliorer la sécurité, le contrôle et la résolution des problèmes.
Internet Information Services (IIS) ne fournit plus l'accès à ASP.NET, au Gestionnaire de rapports, ou au service Web Report Server. Dans SQL Server 2008, Reporting Services gère toutes requêtes d'authentification via un nouveau sous-système d'authentification qui prend en charge l'authentification Windows et personnalisée.
Reporting Services héberge maintenant les technologies Microsoft® .NET Framework et ASP.NET intégrées dans le CLR (common language runtime) de SQL Server, et utilise également les fonctionnalités HTTP.SYS du système d'exploitation. Report Server inclut un écouteur HTTP qui accepte les requêtes qui sont dirigées vers une URL et un port que vous définissez pendant la configuration de serveur. Les réservations et l'inscription d'URL sont maintenant gérées directement par le serveur via HTTP.SYS.

Audit de sécurité
SQL Server Audit est une nouvelle fonctionnalité qui vous permettra de créer des audits personnalisés des événements du moteur de base de données. Cette fonctionnalité utilise des événements étendus pour enregistrer des informations pour les audits et fournit les outils et processus dont vous avez besoin pour activer, stocker et afficher des audits sur différents objets serveur et de base de données.
SQL Server Audit est également plus rapide que SQL Server Trace, et SQL Server Management Studio facilite la création et le contrôle des journaux d'audit. Vous pouvez maintenant auditer à un niveau plus granulaire en capturant les instructions SELECT, INSERT, UPDATE, DELETE, REFERENCES et EXECUTE pour les utilisateurs individuels. De plus, SQL Server Audit est totalement scriptable avec les instructions T-SQL CREATE SERVER AUDIT et CREATE SERVER AUDIT SPECIFICATION et leurs instructions ALTER et DROP apparentées.
Pour configurer la fonctionnalité d'audit, vous créez un audit et spécifiez l'emplacement où les événements audités seront enregistrés. Les audits peuvent être enregistrés dans le journal de sécurité Windows, le journal des applications Windows ou dans un fichier à un emplacement que vous spécifiez. Vous nommez l'audit et configurez ses caractéristiques, par exemple le chemin d'accès au fichier d'audit et sa taille maximale. Vous pouvez également sélectionner de fermer SQL Server si l'audit échoue. Et si vous avez besoin d'enregistrer les événements audités à plusieurs emplacements, il vous suffit de créer plusieurs audits.
L'étape suivante consiste à créer une ou plusieurs spécifications d'audits. Une spécification d'audit de serveur recueille des informations sur l'instance de SQL Server et inclut des objets définis du serveur, tels que les connexions et l'appartenance au rôle de serveur. Elle inclut également des informations de base de données qui sont gérées dans la base de données principale, telles que le droit d'accès à une base de données. Lorsque vous définissez une spécification d'audit, vous indiquez quel audit recevra les événements contrôlés. Vous pouvez définir plusieurs audits de serveur et plusieurs spécifications d'audit de serveur, mais chaque audit de serveur ne peut contenir qu'une seule spécification d'audit de serveur activée à la fois.
Vous pouvez également créer des spécifications d'audit de base de données qui contrôlent les événements d'une seule base de données. Vous pouvez ajouter plusieurs spécifications d'audit de base de données à un audit, mais un audit de serveur ne peut activer qu'une spécification d'audit de base de données à la fois par base de données.
Les événements d'actions d'audit de SQL Server utilisés pour les spécifications d'audit de serveur sont regroupés dans des collections d'événements d'actions d'audit apparentés. Celles-ci sont exposées en tant que groupes d'actions d'audit. Lorsque vous ajoutez un groupe à la spécification d'audit, vous contrôlez tous les événements inclus dans ce groupe. Par exemple, il existe un groupe d'actions d'audit appelé DBCC_GROUP qui expose les commandes DBCC. Cependant, les commandes DBCC ne sont pas disponibles pour les audits individuels.
Il existe 35 groupes d'actions d'audit disponibles pour le serveur, dont certains sont apparentés les uns aux autres. Citons par exemple les groupes SUCCESSFUL_LOGIN_GROUP, FAILED_LOGIN_GROUP et LOGOUT_GROUP. Vous pouvez également utiliser le type d'action d'audit appelé AUDIT_ CHANGE_GROUP pour auditer le processus d'audit.
Les spécifications d'audit de base de données peuvent également spécifier des groupes d'événements d'actions d'audit rassemblés dans les groupes d'actions d'audit au niveau de la base de données. Outre les groupes d'actions d'audit, la spécification d'audit de base de données peut inclure les événements d'actions d'audit individuels pour auditer les instructions de langage de manipulation de données. Ces événements peuvent être configurés pour contrôler toute la base de données ou uniquement certains objets de base de données spécifiques. L'action d'audit SELECT, par exemple, peut être utilisée pour auditer les requêtes SELECT pour une table unique ou un schéma entier. Ces événements peuvent également être configurés pour surveiller les actions d'utilisateurs ou rôles spécifiques, tels que tous les db_writers.
Vous pouvez utiliser l'action d'audit SELECT, par exemple, pour auditer les requêtes SELECT pour une seule table de l'utilisateur Marie, le rôle de base de données FINANCE_DEPT ou le rôle de base de données public. Cela offre assurément énormément de contrôle et de flexibilité pour créer les audits que vous souhaitez.

Création de rapports de dépendance
La création de rapports de dépendance a été améliorée avec une nouvelle vue de catalogue et de nouvelles fonctions système. Si vous utilisez sys.sql_expression_dependencies, sys.dm_sql_referencing_entities et sys.dm_sql_referenced_entities, vous pouvez créer des rapports sur les dépendances SQL entre serveurs, entre bases de données et de bases de données pour les objets liés au schéma et non liés au schéma.

Nouveaux rôles de bases de données
Des modifications ont été apportées aux rôles de bases de données inclus dans la base de données msdb. Le rôle db_dtsadmin a été renommé db_ssisadmin, le rôle db_dtsltduser a été renommé db_ssisltduser et le rôle db_dtsoperator a été renommé db_ssisoperator. Pour prendre en charge la compatibilité descendante, les anciens rôles sont ajoutés en tant que membres des nouveaux rôles lorsque les serveurs sont mis à niveau.
Outre ces modifications, de nouveaux rôles de bases de données ont été ajoutés pour prendre en charge les nouvelles fonctionnalités SQL Server 2008. En particulier, la base de données msdb inclut de nouveaux rôles pour les groupes de serveur (ServerGroupAdministratorRole et ServerGroupReaderRole), la gestion basée sur les stratégies (PolicyAdministratorRole) et le collecteur de données (dc_admin, dc_operator et dc_proxy). La base de données du magasin de données de gestion inclut également de nouveaux rôles pour le collecteur de données (mdw_admin, mdw_writer et mdw_reader).

Sécurité FILESTREAM
SQL Server inclut désormais la prise en charge du stockage FILESTREAM, qui permet aux applications de SQL Server de stocker des données non structurées, telles que les documents et les images, dans le système de fichiers. Cela signifie que les applications client peuvent bénéficier des API de flux et des performances du système de fichiers tout en conservant la cohérence transactionnelle entre les données non structurées et les données structurées correspondantes.
Les données FILESTREAM doivent être stockées dans les groupes de fichiers FILESTREAM. Il s'agit d'un groupe de fichiers spécial qui contient des répertoires de système de fichiers au lieu des véritables fichiers. Ces répertoires, appelés conteneurs de données, fournissent l'interface entre le stockage du moteur de base de données et le stockage du système de fichiers.
En termes de sécurité, les données FILESTREAM sont sécurisées comme toutes les autres données, c'est-à-dire que des autorisations sont accordées au niveau des tables ou des colonnes. Le seul compte auquel des autorisations NTFS sont accordées pour le conteneur FILESTREAM est le compte sous lequel le compte de service SQL Server s'exécute. Lorsqu'une base de données est ouverte, SQL Server limite l'accès aux conteneurs de données FILESTREAM, sauf lorsque l'accès est effectué à l'aide des transactions T-SQL et des API OpenSqlFilestream.

Gestion basée sur les stratégies
La gestion basée sur les stratégies de SQL Server 2008 fournit un nouveau système pour gérer SQL Server. Vous pouvez créer des stratégies pour tester et créer des rapports sur de nombreux aspects de SQL Server, et les stratégies peuvent être appliquées sur une seule base de données, une seule instance de SQL Server ou tous les serveurs SQL que vous gérez.
Avec la gestion basée sur les stratégies, vous pouvez tester les options de configuration de SQL Server et un grand nombre des paramètres de sécurité. Et pour certains paramètres de sécurité, vous pouvez créer des stratégies qui détectent les serveurs de base de données qui sont non conformes puis prennent des mesures pour les obliger à être conformes.
Dans SQL Server 2008, un certain nombre de fonctionnalités qui ne sont pas essentielles sont désactivées par défaut pour diminuer votre exposition à une attaque possible. La gestion basée sur les stratégies permet d'activer de façon sélective toutes les fonctionnalités supplémentaires que vous souhaitez. Vous pouvez ensuite évaluer votre configuration de façon planifiée, en obtenant des alertes si les paramètres de configuration ne correspondent pas à la stratégie.
La gestion basée sur les stratégies regroupe les propriétés apparentées et les expose dans des composants appelés facettes. Par exemple, la facette Configuration de la surface d'exposition contient des propriétés pour les requêtes à distance ad hoc, l'intégration du CLR, la messagerie de base de données, l'automatisation OLE, la connexion administrateur dédiée distante, SQL Mail, l'Assistant Web et xp_cmdshell. Vous pouvez créer une stratégie qui active l'Intégration du CLR mais désactive toutes les autres fonctionnalités. Votre stratégie peut inclure des instructions de condition complexes, telles que la désactivation de la messagerie de base de données sur toutes les instances de SQL Server à moins qu'elles soient nommées Customer_Response.
Une fois que vous avez créé la stratégie, vous pouvez évaluer la stratégie sur tous vos serveurs pour générer un rapport qui vous indique les serveurs qui ne sont pas conformes. Appuyez sur le bouton Configurer pour configurer toutes les instances non conformes avec les paramètres de stratégie. Vous devez également planifier la stratégie afin qu'elle s'exécute périodiquement pour contrôler l'état de vos serveurs. Les facettes Configuration de la surface d'exposition sont fournies pour le moteur de base de données, Analysis Services et Reporting Services.
Notez, cependant, que cette gestion basée sur les stratégies n'est pas destinée à être un mécanisme d'application de la sécurité. Dans la plupart des cas, un utilisateur avec des privilèges suffisants peut émettre des instructions qui violent une stratégie ou contourner la stratégie et exécuter des actions de reconfiguration qui peuvent violer votre stratégie de sécurité. La gestion basée sur les stratégies de SQL Server 2008 doit simplement être considérée comme une aide à la surveillance de vos paramètres de sécurité SQL Server.
Les facettes varient au niveau de leur capacité à appliquer les paramètres, selon que leurs instructions DDL apparentées peuvent ou non s'exécuter dans les modes de non validation automatique. Une facette peut parfois forcer un paramètre de configuration sur une instance du moteur de base de données, mais un administrateur peut toujours reconfigurer les paramètres. Certaines facettes peuvent être appliquées par un déclencheur de serveur ; cela peut empêcher des utilisateurs de privilèges inférieurs de modifier le paramètre et réduire le risque qu'un administrateur modifie accidentellement les paramètres. Dans ce cas, l'administrateur doit temporairement désactiver la stratégie avant de modifier les paramètres. Les autres facettes peuvent seulement générer un rapport sur l'état d'une propriété mais ne peuvent pas la modifier. C'est le cas avec une stratégie qui vérifie la longueur d'une clé symétrique ou asymétrique (comme illustré à la figure 2).
Figure 2 Facette pour les clés asymétriques
Figure 2 Facette pour les clés asymétriques
Il existe des facettes pour la plupart des types d'objets de base de données, et bon nombre d'entre elles ont utilisations liées à la sécurité. Par exemple, la facette de connexion peut déterminer si la stratégie de mot de passe est appliquée pour chaque connexion et la facette de procédure stockée peut détecter si toutes procédures sont chiffrées. Les autres facettes testent les propriétés des utilisateurs, les schémas, les fournisseurs cryptographiques, la conformité des critères communs et l'audit C2.

Windows Server 2008
SQL Server 2008 est entièrement testé avec Windows Server® 2008, qui est fourni avec le pare-feu activé. C'est un bon moment pour revoir la façon de configurer les paramètres de pare-feu. Par ailleurs, Windows Server 2008 fournit également le contrôle d'accès d'utilisateur, que vous avez peut-être découvert avec Windows Vista®. Celui-ci limite les privilèges que vous recevez automatiquement en tant qu'utilisateur administratif. Ces fonctionnalités affecteront toutes les versions de SQL Server.

En conclusion
La sécurité continue d'être un domaine d'amélioration intentionnelle pour SQL Server. Les améliorations de chiffrement et d'authentification fournissent de nouvelles fonctionnalités, et le nouveau système d'audit et la gestion basée sur les stratégies de SQL Server 2008 vous donnent de nouveaux outils pour contrôler l'état de conformité de la sécurité.

Rick Byham a rejoint Microsoft en 1995. Il a d'abord travaillé comme Ingénieur de support SQL Server au sein de la division Customer Support Services, puis a rejoint l'équipe SQL Server auprès de la division Microsoft Learning. Il a intégré l'équipe SQL Server Books Online en tant que rédacteur technique en 2003 où il est actuellement responsable de la documentation sur la sécurité. Vous pouvez contacter Rick à l'adresse rick.byham@microsoft.com.


 SQL&#160;Server&#160;2008: Nouveaux types de donn&#233;es
SQL Server 2008 Kelly Wilson

Nouveaux types de données
Vue d'ensemble:
  • Nouveaux types de données de date et d'heure
  • Représentation de la position dans une hiérarchie
  • Deux modèles pour la manipulation des données spatiales

Dans notre économie mondialisée, les activités commerciales nécessitent de plus en plus que les entreprises utilisent de nouveaux types de données, d'applications et de calculs complexes. Les sept nouveaux types de données intégrés à SQL Server 2008
fournissent les moyens nécessaires pour travailler avec des données plus complexes et simplifier leur gestion.

Date et time
Avec l'ancien type de donnée datetime, les utilisateurs de SQL Server® n'avaient pas la possibilité de travailler avec les informations de date et d'heure séparément. Quatre des nouveaux types de données (date, time, datetime2 et datetimeoffset) y remédient, simplifiant ainsi la manipulation des données de date et d'heure et permettant l'utilisation de plages de dates, une précision de l'ordre de la fraction de seconde et la prise en charge des fuseaux horaires. Les nouvelles applications de base de données devraient utiliser ces nouveaux types de données au lieu de l'ancien datetime. Examinons de plus près ces nouvelles versions.
Le type de données date enregistre une date sans composant d'heure. Sa plage de valeurs s'étend du 1er janvier 1000 au 31 décembre 9999 (0001-01-01 à 9999-12-31). Chaque variable de date nécessite 3 octets de stockage et possède une précision de 10 chiffres. La précision du type date se limite à un jour.
Examinons la figure 1, qui montre comment créer et initialiser les variables Date dans les scripts T-SQL. La variable @myDate1 est initialisée par une chaîne au format « MM/JJ/AAAA ». La variable @myDate2 n'est pas initialisée. Elle aura la valeur NULL. La variable @myDate3 est initialisée avec la date de l'ordinateur local. La valeur des variables peut être modifiée à tout moment avec les instructions SELECT et SET, comme le montre l'exemple modifiant la valeur de @myDate2. Des colonnes date peuvent également être créées dans les tables. La figure 2 montre comment créer une table avec trois colonnes date.
Figure 2 Créer une table avec trois colonnes date (Close Figure 2)
USE TempDB
GO

CREATE TABLE myTable
(
    myDate1 date,myDate2 date,myDate3 date
)
GO

INSERT INTO myTable
VALUES('01/22/2005',
       '2007-05-08 12:35:29.1234567 +12:15',
       GetDate())

SELECT * FROM myTable

--Results
--myDate1    myDate2    myDate3
------------ ---------- ----------
--2005-01-22 2007-05-08 2007-11-20
Figure 1 Créer et initialiser les variables date dans les scripts T-SQL (Close Figure 1)
DECLARE @myDate1 date = '01/22/2005'
DECLARE @myDate2 date
DECLARE @myDate3 date = GetDate()

SELECT @myDate2 = '2007-05-08 12:35:29.1234567 +12:15'

SELECT @myDate1 AS '@myDate1',
       @myDate2 AS '@myDate2',
       @myDate3 AS '@myDate3'

--Results
--@myDate1   @myDate2   @myDate3
------------ ---------- ----------
--2005-01-22 2007-05-08 2007-11-20
Le type de données time enregistre l'heure du jour sans composant de date. Il est basé sur une horloge de 24 heures et sa plage prise en charge est donc 00:00:00,0000000 à 23:59:59,9999999 (heures, minutes, secondes et fractions de secondes). Vous pouvez spécifier la précision fractionnaire de la seconde lorsque le type de données est créé. La précision par défaut est 7 chiffres, ce qui correspond à 100 ns. La précision affecte l'espace de stockage nécessaire, qui peut s'étendre de 3 octets jusqu'à 2 chiffres et 4 octets pour 3 à 4 chiffres à 5 octets pour 5 à 7 chiffres.
Le script T-SQL de la figure 3 illustre la façon dont la précision de la variable est affectée par les conversions implicites d'une valeur d'initialisation de chaîne. Le code T-SQL crée tout d'abord et initialise huit variables time distinctes de valeur identique. La précision fractionnaire de chaque variable correspond à son nom. Par exemple, @myTime3 possède une précision fractionnaire de trois décimales. Les résultats montrent que la précision de chaque donnée de type time est équivalente à la précision fractionnaire avec laquelle elle a été déclarée. Les décimales qui ne rentrent pas dans la plage sont tronquées.
Figure 3 Afficher la précision de la variable de type de données time (Close Figure 3)
DECLARE @myTime  time = '01:01:01.1234567 +01:01'
DECLARE @myTime1 time(1) = '01:01:01.1234567 +01:01'
DECLARE @myTime2 time(2) = '01:01:01.1234567 +01:01'
DECLARE @myTime3 time(3) = '01:01:01.1234567 +01:01'
DECLARE @myTime4 time(4) = '01:01:01.1234567 +01:01'
DECLARE @myTime5 time(5) = '01:01:01.1234567 +01:01'
DECLARE @myTime6 time(6) = '01:01:01.1234567 +01:01'
DECLARE @myTime7 time(7) = '01:01:01.1234567 +01:01'

SELECT @myTime  AS '@myTime',
       @myTime1 AS '@myTime1',
       @myTime2 AS '@myTime2',
       @myTime3 AS '@myTime3',
       @myTime4 AS '@myTime4',
       @myTime5 AS '@myTime5',
       @myTime6 AS '@myTime6',
       @myTime7 AS '@myTime7'

--Results
--@myTime          @myTime1   @myTime2    @myTime3     @myTime4
------------------ ---------- ----------- ------------ -------------
--01:01:01.1234567 01:01:01.1 01:01:01.12 01:01:01.123 01:01:01.1235
--
--@myTime5       @myTime6        @myTime7
---------------- --------------- ----------------
--01:01:01.12346 01:01:01.123457 01:01:01.1234567

DROP TABLE myTable
Un type de données time peut être créé en tant que colonne d'une table. Le script T-SQL DROP TABLE myTable de la figure 4 crée une table nommée myTable1 et ajoute trois colonnes time à la table. Un enregistrement est alors inséré dans la table et le contenu de la table est affiché avec une instruction SELECT.
Figure 4 Créer myTable1 (Close Figure 4)
USE TempDB
GO

CREATE TABLE myTable1
(
    myTime1 time(1),
    myTime2 time(2),
    myTime3 time(3)
)
GO

INSERT INTO myTable1
VALUES('01:30:01.1234567',
       '02:34:01.1234567',
       '03:01:59.1234567')

SELECT * from myTable1

--Results
--myTime1    myTime2     myTime3
------------ ----------- ------------
--01:30:01.1000000 02:34:15.1200000 03:01:59.1230000

DROP TABLE myTable1

Datetimeoffset et Datetime2
Le type de données datetimeoffset fournit la prise en charge des fuseaux horaires. Le type de données time ne contient pas de fuseau horaire et fonctionne uniquement à l'heure locale. Toutefois, dans notre économie mondialisée, il est souvent nécessaire de connaître la relation entre une heure d'une région du monde et l'heure d'une autre région. Le décalage de fuseau horaire est indiqué comme + ou - hh:mm.
Ce code crée une variable datetimeoffset et l'initialise avec la valeur d'heure 8h52, heure du Pacifique :
DECLARE @date DATETIMEOFFSET = '2007-11-26T08:52:00.1234567-08:00'
PRINT @date
--Results
--2007-11-26 08:52:00.1234567 -08:00
La chaîne qui initialise la variable datetimeoffset (@date dans le script) est spécialement mise en forme, ordonnée de l'élément le plus significatif au moins significatif. Une lettre T majuscule unique sépare les éléments de date et d'heure. Un signe moins sépare les éléments d'heure du fuseau horaire. Il n'y a pas d'espace entre le signe moins et les éléments d'heure ou de fuseau horaire. Ce format est l'un des deux formats ISO 8601 pris en charge par le type de données datetimeoffset. (ISO 8601 est une norme internationale pour la représentation des valeurs de date et d'heure)
La précision du composant d'heure est spécifiée comme pour le type de données d'heure, et elle utilise également sept chiffres, sauf spécification différente. La plage prise en charge est la même.
Le type de données datetime2 est une extension du type datetime original. Il prend en charge une plus grande plage de dates et une plus grande précision de fractions de secondes, et vous permet de spécifier la précision. La plage de dates du type datetime2 s'étend du 1er janvier 0001 au 31 décembre 9999, par comparaison à la plage 1er janvier 1753 au 31 décembre 9999 du type datetime original. Comme avec le type time, sept décimales de précision sont fournies pour les secondes. Le type datetime original compte trois chiffres pour la précision et une plage horaire s'étendant de 00:00:00 à 23:59:59,999. Voici comment créer une variable datetime2 et l'initialiser avec la date et l'heure locales du serveur :
DECLARE @datetime2 DATETIME2 = GetDate();
PRINT @datetime2

--Results
--2007-11-26 09:39:04.1370000
Je vais maintenant examiner le nouveau type de données hierarchyid. Ce type de données fonctionne avec la relation entre les éléments de données d'une table, plutôt qu'avec des données de date ou d'heure spécifiques.

Type de données hierarchyid
Le type de données hierarchyid vous permet de construire des relations entre les éléments de données d'une table, et en particulier de représenter une position dans une hiérarchie. Pour explorer ce type de données, commençons par créer la base de données MyCompany et la remplir avec des données d'employé, à l'aide du script de la figure 5.
Figure 5 Créer et remplir la base de données MyCompany (Close Figure 5)
USE MASTER
GO

CREATE DATABASE MyCompany
GO
USE MyCompany
GO

--Create a table called employee that will store
--the data for the employees for MyCompany.

CREATE TABLE employee
(
    EmployeeID int NOT NULL,
    EmpName    varchar(20) NOT NULL,
    Title      varchar(20) NULL,
    Salary     decimal(18, 2) NOT NULL,
    hireDate   datetimeoffset(0) NOT NULL,
)
GO

--These statements will insert the data for the employees of MyCompany.

INSERT INTO employee
VALUES(6,   'David',  'CEO', 35900.00, '2000-05-23T08:30:00-08:00')

INSERT INTO employee
VALUES(46,  'Sariya', 'Specialist', 14000.00, '2002-05-23T09:00:00-08:00')

INSERT INTO employee
VALUES(271, 'John',   'Specialist', 14000.00, '2002-05-23T09:00:00-08:00')

INSERT INTO employee
VALUES(119, 'Jill',   'Specialist', 14000.00, '2007-05-23T09:00:00-08:00')

INSERT INTO employee
VALUES(269, 'Wanida', 'Assistant', 8000.00, '2003-05-23T09:00:00-08:00')

INSERT INTO employee
VALUES(272, 'Mary',   'Assistant', 8000.00, '2004-05-23T09:00:00-08:00')
GO
--Results
--EmployeeID  EmpName Title      Salary   hireDate
------------- ------- ---------- -------- --------------------------
--6           David   CEO        35900.00 2000-05-23 08:30:00 -08:00
--46          Sariya  Specialist 14000.00 2002-05-23 09:00:00 -08:00
--271         John    Specialist 14000.00 2002-05-23 09:00:00 -08:00
--119         Jill    Specialist 14000.00 2007-05-23 09:00:00 -08:00
--269         Wanida  Assistant  8000.00  2003-05-23 09:00:00 -08:00
--272         Mary    Assistant  8000.00  2004-05-23 09:00:00 -08:00
La figure 6 illustre la base de données simple résultante, composée d'une seule table d'employés. Cette table d'employés de la base de données MyCompany ne possède pas de structure imposée. Ceci est normal pour une base de données relationnelle, car la structure est imposée dynamiquement par une application via son code de requête et de traitement.
Figure 6 Table d'employés MyCompany
Figure 6 Table d'employés MyCompany
Les données de l'entreprise, cependant, ont généralement un type de structure inhérente. Par exemple, chaque entreprise possède une structure hiérarchique, comme celle illustrée pour MyCompany à la figure 7. Tous les employés de MyCompany sont des subordonnés de David, le PDG (CEO). Certains employés sont ses subordonnés directs, comme c'est le cas pour Jill. Les autres, tels que Marie, sont séparés par un intermédiaire. En termes de programmation, la structure hiérarchique de MyCompany porte le nom d'arborescence, car c'est la forme physique qu'elle possède. David, au sommet, n'est subordonné de personne. Il est le parent ou ancêtre. Les employés subordonnés de David sont situés au-dessous. Ces nœuds portent le nom d'enfants ou descendants. David peut posséder autant de descendants que nécessaire pour représenter ses subordonnés directs.
Figure 7 Structure organisationnelle de MyCompany
Figure 7 Structure organisationnelle de MyCompany
Le script de la figure 8 reconstruit la base de données MyCompany à l'aide du type de données hierarchyid, construisant ainsi une relation qui correspond à la structure hiérarchique de MyCompany. L'instruction ALTER TABLE est utilisée pour ajouter tout d'abord une colonne de type hierarchyid. Le nœud de David est alors inséré avec la méthode GetRoot de hierarchyid. Les subordonnés directs de David sont alors ajoutés à l'arborescence avec la méthode GetDescendant.
Figure 8 Reconstruire la base de données avec hierarchyid (Close Figure 8)
DELETE employee
GO
ALTER TABLE employee ADD OrgNode hierarchyid NOT NULL
GO

DECLARE @child hierarchyid,
@Manager hierarchyid = hierarchyid::GetRoot()

--The first step is to add the node at the top of the
--tree. Since David is the CEO his node will be the
--root node.

INSERT INTO employee
VALUES(6,   'David',  'CEO', 35900.00,
       '2000-05-23T08:30:00-08:00', @Manager)

--The next step is to insert the records for
--the employees that report directly to David.

SELECT @child = @Manager.GetDescendant(NULL, NULL)

INSERT INTO employee
VALUES(46,  'Sariya', 'Specialist', 14000.00,
       '2002-05-23T09:00:00-08:00', @child)

SELECT @child = @Manager.GetDescendant(@child, NULL)
INSERT INTO employee
VALUES(271, ‚John',   ‚Specialist', 14000.00,
       '2002-05-23T09:00:00-08:00', @child)

SELECT @child = @Manager.GetDescendant(@child, NULL)
INSERT INTO employee
VALUES(119, ‚Jill',   ‚Specialist', 14000.00,
       ‚2007-05-23T09:00:00-08:00', @child)

--We can now insert the employee that reports to
--Sariya.
SELECT @manager = OrgNode.GetDescendant(NULL, NULL)
FROM employee WHERE EmployeeID = 46

INSERT INTO employee
VALUES(269, ‚Wanida', ‚Assistant', 8000.00,
       ‚2003-05-23T09:00:00-08:00', @manager)

--Next insert the employee that report to John.
SELECT @manager = OrgNode.GetDescendant(NULL, NULL)
FROM employee WHERE EmployeeID = 271

INSERT INTO employee
VALUES(272, ‚Mary',   ‚Assistant', 8000.00,
       ‚2004-05-23T09:00:00-08:00', @manager)
GO
Une fois les enregistrements de base de données ajoutés et la hiérarchie construite, le contenu de la table des employés peut être affiché avec une requête telle que celle-ci :
SELECT EmpName, Title, Salary, OrgNode.ToString() AS OrgNode
FROM employee ORDER BY OrgNode
GO
--Results
--EmpName  Title      Salary    OrgNode
---------- ---------- --------- -------
--David    CEO        35900.00  /
--Sariya   Specialist 14000.00  /1/
--Wanida   Assistant  8000.00   /1/1/
--John     Specialist 14000.00  /2/
--Mary     Assistant  8000.00   /2/1/
--Jill     Specialist 14000.00  /3/
OrgNode est la colonne hierarchyid. Chaque caractère barre oblique du résultat indique un nœud dans l'arborescence de la hiérarchie. David est à la racine, qui est indiquée par une barre oblique unique. Sariya, John et Jill sont des subordonnés directs de David et possèdent deux barres obliques, indiquant qu'ils représentent le deuxième nœud de la hiérarchie. Les numéros 1, 2 et 3 affichent l'ordre de chaque nœud enfant. Ce système est très souple. Les nœuds enfants peuvent être supprimés, insérés ou ajoutés selon les besoins. Si nous avions ajouté un employé entre John et Jill, par exemple, cet employé serait répertorié dans le jeu de résultats comme suit : /2.1/.
Pour répondre par exemple à la question « Qui est sous l'autorité de Sariya », vous pouvez créer une requête telle que celle du code T-SQL suivant :
DECLARE @Sariya hierarchyid

SELECT @Sariya = OrgNode
FROM employee WHERE EmployeeID = 46

SELECT EmpName, Title, Salary, OrgNode.ToString() AS 'OrgNode'
FROM employee
WHERE OrgNode.GetAncestor(1) = @Sariya
GO
--Results
--EmpName Title     Salary  OrgNode
--------- --------- ------- -------
--Wanida  Assistant 8000.00 /1/1/
La requête utilise la méthode GetAncestor de hierarchyid, qui renvoie le parent du nœud hierarchyid actuel. Dans le code précédent, la variable @Sariya est définie sur le nœud hiérarchique pour Sariya. C'est parce que Sariya est l'ancêtre direct de tout employé qui est sous son autorité. Par conséquent, l'écriture d'une requête qui renvoie les employés qui sont sous l'autorité directe de Sariya consiste à récupérer le nœud de Sariya depuis l'arborescence et à sélectionner ensuite tous les employés dont le nœud ancêtre est le nœud de Sariya.
Les colonnes hierarchyid ont tendance à être très compactes car le nombre de bits nécessaires pour représenter un nœud dans une arborescence dépend du nombre moyen d'enfants pour le nœud (habituellement appelé sortance du nœud). Par exemple, un nouveau nœud dans une hiérarchie organisationnelle de 100 000 employés, avec une sortance moyenne de six niveaux, nécessiterait à peu près cinq octets de stockage.
Le type de données hierarchyid fournit plusieurs méthodes facilitant l'utilisation des données hiérarchiques. Un récapitulatif de ces méthodes est présenté à la figure 9. Des informations détaillées sur toutes les méthodes sont disponibles dans la documentation en ligne de SQL Server (msdn2.microsoft.com/ms130214).
Figure 9 Méthodes fournies par le type de données hierarchyid (Close Figure 9)

Méthode | Description
GetAncestor | Renvoie un hierarchyid représentant le nième ancêtre de ce nœud hierarchyid.
GetDescendant | Renvoie un nœud enfant de ce nœud hierarchyid.
GetLevel | Renvoie un entier qui représente la profondeur de ce nœud hierarchyid dans la hiérarchie générale.
GetRoot | Renvoie le nœud hierarchyid racine de cette arborescence hiérarchique. Static.
IsDescendant | Renvoie true si le nœud enfant transmis est un descendant de ce nœud hierarchyid.
Parse | Convertit une représentation par chaîne d'une hiérarchie en valeur hierarchyid. Static.
Reparent | Déplace un nœud d'une hiérarchie vers un nouvel emplacement dans la hiérarchie.
ToString | Renvoie une chaîne contenant la représentation logique de ce hierarchyid.

Types de données spatiales
Les données spatiales sont des données qui identifient des formes et des emplacements géographiques, principalement sur terre. Ceux-ci peuvent être des points d'intérêt, des routes ou même l'emplacement d'entreprises. SQL Server 2008 fournit les types de données Geography et Geometry nécessaires à l'utilisation de ce type de données.
Le type de données Geography utilise des informations à base d'un modèle de terre ronde. Le modèle de terre ronde prend en compte la surface courbée de la terre dans ses calculs. Les informations de position sont données en longitude et latitude. Ce modèle est particulièrement adapté aux applications telles que l'expédition transocéanique, la planification militaire et les applications courte portée dont la surface de la terre constitue la référence. Ceci est le modèle à utiliser si vos données sont stockées sous forme de latitudes et longitudes.
Le type de données Geometry fonctionne avec le modèle de terre plate ou modèle planaire. Dans ce modèle, la terre est considérée comme une projection plate commençant à un point connu. Le modèle de terre plate ne prend pas en compte la courbure de la terre, et est donc principalement utilisé pour décrire les distances courtes, par exemple dans une application de base de données qui cartographie l'intérieur d'un bâtiment.
Les types Geography et Geometry sont construits à partir d'objets vectoriels, spécifiés au format WKT (Well-Known Text) ou WKB (Well-Known Binary). Il s'agit de formats de transport pour les données spatiales décrites par la spécification Simple Feature for SQL de l'Open Geospatial Consortium (OGC). La figure 10 répertorie les sept types d'objets vectoriels pris en charge par SQL Server 2008.
Figure 10 Objets vectoriels pris en charge par SQL Server 2008 (Close Figure 10)

Objet | Descripton
Point | Emplacement.
MultiPoint | Ensemble de points.
LineString | Ensemble de zéro point ou plus, connectés par des lignes.
MultiLineString | Ensemble de linestrings.
Polygon | Région contiguë décrite par un ensemble fermé de linestrings.
MultiPolygon | Ensemble de polygones.
GeometryCollection | Ensemble de types Geometry.
Pour construire un type Geography avec un ou plusieurs objets vectoriels, vous devez d'abord déclarer le type Geography dans votre script T-SQL, comme indiqué sur la figure 11. Appelez ensuite une des méthodes listées à la figure 12 et transmettez la chaîne de caractères de votre objet vectoriel et l'ID de référence spatiale (SRID). Le SRID est le système d'identification de référence spatiale, défini par l'European Petroleum Survey Group. Il fait partie d'un ensemble de normes développées pour la cartographie, l'arpentage et le stockage de données géodésiques. Chaque SRID identifie un type spécifique d'ellipsoïde à utiliser dans les calculs géographiques. Ceci est nécessaire car la terre n'est pas une sphère parfaite. SQL Server 2008 peut uniquement exécuter des calculs sur des SRID identiques.
Figure 12 Objets constructeurs pour Geography et Geometry (Close Figure 12)

Méthode | Description
STGeomFromText | Construit tout type d'instance Geography à partir du texte d'entrée.
STPointFromText | Construit une instance de Point Geography à partir du texte d'entrée.
STMPointFromText | Construit une instance de MultiPoint Geography à partir du texte d'entrée.
STLineFromText | Construit une instance de LineString Geography à partir du texte d'entrée.
STMLineFromText | Construit une instance de MultiLineString Geography à partir du texte d'entrée.
STPolyFromText | Construit une instance de Polygon Geography à partir du texte d'entrée.
STMPolyFromText | Construit une instance de MultiPolygon Geography à partir du texte d'entrée.
STGeomCollFromText | Construit une instance de Geometry-Collection Geography à partir du texte d'entrée.
Figure 11 Créer des points, des lignes et des polygones Geometry (Close Figure 11)
DECLARE @geo1 geometry
SELECT @geo1 = geometry::STGeomFromText('POINT (3 4)', 0)
PRINT @geo1.ToString()

DECLARE @geo2 geometry
SELECT @geo2 = geometry::Parse('POINT(3 4 7 2.5)')
PRINT @geo2.STX;
PRINT @geo2.STY;
PRINT @geo2.Z;
PRINT @geo2.M;

DECLARE @geo3 geography;
SELECT @geo3 = geography::STGeomFromText(
    'LINESTRING(47.656 -122.360, 47.656 -122.343)', 4326);
SELECT @geo3.ToString();

--Results
--POINT (3 4)
--3
--4
--7
--2.5

DECLARE @gx geometry;
SET @gx = geometry::STPolyFromText(
    'POLYGON ((5 5, 10 5, 10 10, 5 5))', 0);
PRINT @gx.ToString();
--Results
--POLYGON ((5 5, 10 5, 10 10, 5 5))

Différences entre Geography et Geometry
Les types de données Geography et Geometry sont conçus pour être utilisés avec des types de données différents et présentent par conséquent certaines différences essentielles dont vous devez être conscient. Avec le type de données Geometry, les distances et les zones sont indiquées dans la même unité de mesure que les coordonnées des instances. Par exemple, la distance entre les points (0,0) et (6,8) sera toujours 10 unités. Ceci n'est pas le cas avec le type Geography, qui utilise des coordonnées ellipsoïdales exprimées en degrés de latitude et de longitude.
Le type de données Geometry renvoie des résultats incohérents lorsque les coordonnées sont exprimées en tant que couples latitude-longitude. Le code T-SQL suivant calcule la distance entre les POINTS (90 0) et (90 180). Ces deux points font référence au pôle Nord et la distance entre ceux-ci doit être 0. Dans le cas de Geometry, la distance calculée est 180.
DECLARE @g1 GEOMETRY, @g2 GEOMETRY, @g3 GEOGRAPHY, @g4 GEOGRAPHY
SELECT @g1 = GEOMETRY::STGeomFromText('POINT (90 0)', 0)
SELECT @g2 = GEOMETRY::STGeomFromText('POINT (90 180)', 0)

SELECT @g3 = GEOGRAPHY::STGeomFromText('POINT (90 0)', 4326)
SELECT @g4 = GEOGRAPHY::STGeomFromText('POINT (90 180)', 4326)
SELECT @g2.STDistance(@g1) AS 'GEOMETRY',
       @g4.STDistance(@g3) AS 'GEOGRAPHY';

--Results
--GEOMETRY               GEOGRAPHY
------------------------ ----------------------
--180                    0
L'orientation des données spatiales est également différente pour les deux types de données. Dans le système planaire utilisé par le type de données Geometry, l'orientation d'un polygone n'est pas un facteur important. Par exemple, un polygone avec les coordonnées ((0, 0), (10, 0), (0, 20), (0, 0)) est considéré identique au polygone ((0, 0), (0, 20), (10, 0), (0, 0)). Mais dans le modèle de données utilisé par le type de données Geography, un polygone est incertain sans orientation spécifiée. Prenez par exemple un anneau autour de l'équateur. Le polygone décrit par cet anneau fait-il référence à l'hémisphère septentrional ou méridional ? L'idée ici est que, lors de la manipulation de données de type Geography, l'orientation et l'emplacement doivent être décrits avec précision.
Il existe également certaines restrictions placées sur le type de données Geography par SQL Server 2008. Par exemple, chaque instance de Geography doit trouver place dans un seul hémisphère. Les grands objets spatiaux ne sont pas autorisés et provoqueront la levée d'une exception ArgumentException. Les types de données Geography nécessitant deux entrées renverront NULL si les résultats des méthodes ne trouvent pas place dans un seul hémisphère.
SQL Server fournit plusieurs méthodes permettant d'effectuer des opérations sur les instances de Geography et Geometry. La figure 13 illustre certains exemples utilisant les méthodes fournies par SQL Server 2008 pour la manipulation des données spatiales. En raison de contraintes d'espace, je ne peux pas entrer plus en détail sur ce sujet, mais vous trouverez une description complète dans la documentation en ligne de SQL Server.
Figure 13 Utilisation des données spatiales (Close Figure 13)
DECLARE @gm geometry;
DECLARE @gg geography;
DECLARE @h geography;

SET @gm = geometry::STGeomFromText('POLYGON((0 0, 13 0, 3 3, 0 13, 0 0),(2 2, 2 1, 1 1, 1 2, 2 2))', 0);
SELECT @gm.STArea();

--Results
--38

SET @gg = geography::STGeomFromText('LINESTRING(0 0, 5 5)', 4326);
--Calculate the distance to a point slightly offset from the LINESTRING.
SET @h = geography::STGeomFromText('POINT(4 4)', 4326);
SELECT @gg.STDistance(@h);

--Results
-- 430.182777043046

--Calculate the distance to a point on the LINESTRING.
SET @h = geography::STGeomFromText('POINT(5 5)', 4326);
SELECT @gg.STDistance(@h);

--Results
-- 0

DECLARE @temp table ([name] varchar(10), [geom] geography);

INSERT INTO @temp values ('Point', geography::STGeomFromText('POINT(
5 10)', 4326));
INSERT INTO @temp values ('LineString', geography::STGeomFromText(
'LINESTRING(13 5, 50 25)', 4326));
--Calculate the distance to a point on the LINESTRING.
--Display the number of dimensions for a geography object stored in a --table variable.
INSERT INTO @temp values ('Polygon', geography::STGeomFromText(
'POLYGON((47.653 -122.358, 47.649 -122.348, 47.658 -122.348, 47.658 -122.358, 47.653 -122.358))', 4326));

SELECT [name], [geom].STDimension() as [dim]
FROM @temp;

--Results
--name       dim
------------ -----------
--Point      0
--LineString 1
--Polygon    2
J'espère que ces informations sur les sept nouveaux types de données de SQL Server 2008 vous ont été utiles.

Kelly Wilson travaille dans le secteur de l'ingénierie logicielle depuis plus de 20 ans. Son palmarès inclut des applications dans des domaines tels que SQL Server, les graphiques 3D, les jeux et les sciences de la couleur. Kelly est actuellement rédactrice en programmation au sein du groupe SQL Server de Microsoft.


 SQL Server&#160;2008: Performances des requ&#234;tes d'entrep&#244;ts de donn&#233;es
SQL Server 2008 Sunil Agarwal and Torsten Grabs and Dr. Joachim Hammer

Performances des requêtes d'entrepôts de données
Vue d'ensemble:
  • Optimisation de requêtes de jointure en étoile
  • Parallélisme de tables partitionnées
  • Compression de pages et de lignes
  • Affichages indexés alignés sur les partitions

SQL Server 2008 offrira des capacités d'entreposage de données relationnelles beaucoup plus puissantes que son prédécesseur. Cependant, vous vous demanderez peut-être toujours comment utiliser cette toute nouvelle technologie pour créer un entrepôt de données performant pour l'aide à la décision pour des milliards de lignes ou vous
souhaiterez peut-être découvrir les fonctionnalités qui peuvent vous aider à obtenir des performances de requêtes optimales pour vos requêtes et rapports d'aide à la décision, ou connaître le type d'améliorations de performances auquel vous pouvez vous attendre de manière réaliste avec cette nouvelle version de SQL Server®.
Les questions se multiplient à mesure que nous approchons de la date de mise sur le marché de la version finale. Nous espérons que cet aperçu approfondi sur certaines des fonctionnalités d'entreposage de données associées aux performances principales dans SQL Server 2008 vous permettra de vous préparer à la version finale.

Conception de base de données logique : Modélisation dimensionnelle
Les applications métier transactionnelles disposent généralement d'un schéma de base de données normalisé. La conception de schéma de base de données logique pour l'entreposage de données relationnelles met un accent moindre sur la normalisation. De nombreuses conceptions d'entrepôt de données relationnelles suivent aujourd'hui une approche de modélisation dimensionnelle, rendue populaire par Ralph Kimball et Margy Ross dans leur livre intitulé The Data Warehouse Toolkit: The Complete Guide to Dimensional Modeling. (Boîte à outils de l'entreposage de données : guide complet de la modélisation dimensionnelle)
Si vous passez beaucoup de temps à l'entreposage de données, vous serez certainement familier avec les modèles de schémas communs pour les entrepôts de données relationnelles (tels que les schémas en étoile ou en flocon). La modélisation dimensionnelle fait la distinction entre les tables de dimension et les tables de faits. Les tables de dimension contiennent les données principales (telles que les produits, les clients, les magasins ou les pays) tandis que les tables de faits contiennent les données transactionnelles (telles que les ventes, les commandes, les achats ou les retours).
Les tables de dimension et les tables de faits sont liées par les relations clé primaire (PK, Primary Key)/clé étrangère (FK, Foreign Key). Vous constaterez que beaucoup d'entrepôts de données n'appliquent pas les contraintes FK comme une façon de maintenir les besoins de stockage à un minimum. Ceci enregistre la surcharge de stockage des index sous-jacents et conserve les coûts de maintenance de la table de faits au niveau le plus bas. Les tables de dimension dans un entrepôt de données sont souvent assez petites. Elles contiennent généralement des milliers voire plusieurs millions de lignes. En revanche, les tables de faits peuvent être très volumineuses et contenir des centaines de millions voire des milliards de lignes. C'est pourquoi la conception logique doit vraiment faire attention aux besoins de stockage de la table de faits.
Ce facteur de taille a également des implications dans le choix de la clé que vous faites à partir d'une table de dimension pour maintenir les relations table de dimension/table de faits. Les clés composites basées sur la clé d'entreprise de la dimension (c'est-à-dire l'identificateur réel de l'entité représentée par la dimension) couvrent normalement plusieurs colonnes. Gardez à l'esprit qu'il s'agit d'un problème pour la clé étrangère correspondante dans la table de faits étant donné que la clé composite multicolonnes sera répétée pour chaque ligne de table de faits.
Pour répondre à ceci, il est courant d'utiliser des petites clés de substitution pour implémenter les relations entre une table de faits et ses dimensions. La clé de substitution est une colonne d'identité de type entier qui est utilisée en tant qu'une clé primaire artificielle de la table de dimension. Avec la table de faits se reportant à la clé de substitution plus petite, la réduction des grandes tables de faits en vue des besoins de stockage est significative. La Figure 1 illustre un schéma d'entrepôt de données modélisées de manière dimensionnelle à l'aide des tables de faits et de dimension avec des clés de substitution.
Figure 1 Exemple de schéma en étoile avec une table de fait et deux tables de dimension
Figure 1 Exemple de schéma en étoile avec une table de fait et deux tables de dimension
La conception de schéma en flocon s'étale sur une ou plusieurs dimensions sur plusieurs niveaux (par exemple, le client, le pays et la région pour une dimension de client) et par conséquent, normalise les dimensions plus grandes pouvant souffrir de redondances excessives dans les données. Les niveaux sont représentés par des tables séparées, donnant au schéma la forme d'un flocon. En revanche, la conception de schéma en étoile n'étale pas ses dimensions sur les tables. Un schéma en étoile a la forme d'une étoile et les tables de dimension sont groupées autour d'une table de faits en son centre.
Avec les schémas en étoile ou en flocon modélisés de manière dimensionnelle, les requêtes d'aide à la décision suivent un modèle typique : la requête sélectionne plusieurs mesures d'intérêt de la table de faits, joint les lignes de fait avec une ou plusieurs dimensions le long des clés de substitution, place des prédicats de filtres sur les colonnes d'entreprise des tables de dimension, les groupe par une ou plusieurs colonnes d'entreprise et agrège les mesures récupérées de la table de faits pendant un temps défini. Ce qui suit illustre ce modèle. On appelle parfois également une requête de jointure en étoile :
select ProductAlternateKey,
CalendarYear,sum(SalesAmount)
from FactInternetSales Fact
     join DimTime
on Fact.OrderDateKey = TimeKey
     join DimProduct
on DimProduct.ProductKey =
   Fact.ProductKey
where CalendarYear between 2003 and 2004
      and ProductAlternateKey like 'BK%'
group by ProductAlternateKey,CalendarYear

Conception physique
De nombreuses requêtes SQL dans votre entrepôt de données relationnelles suivent la structure de la requête de jointure en étoile. Cependant, au fil du temps, les requêtes d'aide à la décision varient parce que les responsables tentent continuellement de mieux comprendre leurs données d'entreprise fondamentales. C'est pourquoi les charges de travail pour les entrepôts de données ont tendance à avoir un rapport de requêtes ad hoc élevé. Ceci rend d'autant plus difficile l'élaboration physique pour les requêtes d'aide à la décision et un schéma d'entrepôt de données modélisé de manière dimensionnelle.
Avec SQL Server, les concepteurs d'entrepôts de données commencent généralement par l'élaboration du modèle ou l'élaboration physique qu'ils améliorent progressivement à mesure que les charges de travail évoluent. Vous pouvez adopter et modifier ce modèle pour satisfaire votre propre environnement d'entrepôt de données. Le cas échéant, gardez à l'esprit les méthodes recommandées pour l'élaboration physique de base de données, telles que l'impact des performances causé par la maintenance d'index pour les mises à jour et les besoins de stockage des index.

Table de faits
L'élaboration du modèle a pour but d'anticiper la requête en forme d'étoile typique et de générer les index sur la table de faits. L'index cluster de la table de faits utilise plusieurs colonnes de clés de substitution de dimension (colonnes de clé étrangère) comme clés d'index. Les colonnes les plus fréquemment utilisées doivent se produire dans la liste de clés d'index. Vous souhaiterez peut-être prendre le temps de vérifier que ceci fournit en effet un chemin d'accès adéquat pour les requêtes les plus fréquemment exécutées dans votre charge de travail.
De plus, le modèle crée un index non cluster sur une colonne unique pour la colonne de substitution de dimension (clé étrangère) dans la table de faits. Ceci fournit un chemin d'accès très efficace pour les requêtes qui sont très sélectives dans l'une de leurs dimensions.
Le but de l'index cluster est de fournir des performances optimales pour la majorité des requêtes dans votre charge de travail. La série d'index non cluster cible les requêtes qui récupèrent les mesures de tables de faits pour un client ou un produit spécifique. Ces index non cluster garantissent, par exemple, que vous n'avez pas besoin de numériser la table de faits pour récupérer les données de ventes pour un seul client.

Tables de dimension
Lorsque vous appliquez l'élaboration du modèle aux tables de dimension, vous devez créer des index pour chaque table de dimension. Ceux-ci incluent un index de contrainte de clé primaire non cluster sur la colonne de clé de substitution de la dimension et un index cluster sur les colonnes de la clé d'entreprise de l'entité de dimension. Pour les grandes tables de dimension, vous devriez également prendre en considération l'ajout d'index non cluster sur les colonnes qui sont fréquemment utilisées dans des prédicats hautement sélectifs.
L'index cluster facilite efficacement l'extraction, transformation et chargement (ETL) dans la fenêtre de maintenance de l'entrepôt de données, qui est souvent un processus critique. Avec des dimensions qui changent lentement, par exemple, les lignes existantes sont mises à jour alors que les lignes pas encore présentes dans la dimension sont ajoutées à la table de dimension. Pour aboutir, ce modèle d'accès nécessite une recherche bien exécutée et la mise à jour de la table de dimension au moment de l'ETL.
L'élaboration du modèle que nous vous avons présenté est un bon point de départ pour les élaborations physiques dans les entrepôts de données relationnelles créés avec SQL Server. Basé sur cette installation typique d'entrepôt de données relationnelles, nous pouvons explorer les nouvelles fonctionnalités clés dans SQL Server 2008.

Optimisation de requêtes de jointure en étoile
Le traitement de la table de faits est généralement ce qui coûte le plus cher lors de l'exécution d'une requête de jointure en étoile dans un entrepôt de données relationnelles modélisé de manière dimensionnelle. Vous le constaterez aisément étant donné que même les requêtes hautement sélectives récupèrent beaucoup plus de lignes à partir de la table de faits que de toute dimension. Par conséquent, l'utilisation du chemin d'accès optimal dans la table de faits est essentielle pour des performances de requêtes idéales.
Avec SQL Server, l'optimiseur de requête choisit automatiquement le chemin d'accès avec le coût estimé le plus faible à partir d'alternatives. Dans le contexte d'entreposage de données, l'objectif principal consiste à s'assurer que l'optimiseur de requête considère les alternatives de chemins d'accès probantes pour le plan d'exécution de la requête de jointure en étoile. SQL Server inclut diverses fonctionnalités dans son optimiseur de requête pour fournir automatiquement des plans d'exécution de requête de jointure en étoile performants.
Envisagez les requêtes de jointure en étoile comme étant divisées en trois classes différentes, comme décrit à la figure 2. Ces classes étendues aident également le moteur SQL Server à identifier les sélections de plan appropriées à ces requêtes. Le concept principal sur lequel repose SQL Server est la sélectivité de ces requêtes par rapport à la table de faits. Moins une requête utilise de lignes de la table de faits et plus elle sera considérée comme sélective. Le pourcentage de lignes récupérées de la table de faits est utilisé pour fournir l'intuition de ces classes de requêtes. Ces pourcentages représentent des valeurs des déploiements de clients typiques mais elles ne sont pas des limites strictes utilisées pour générer des définitions de chemin d'accès.
Figure 2 Plages de sélectivité pour les requêtes de jointure en étoile
Figure 2 Plages de sélectivité pour les requêtes de jointure en étoile
La première classe couvre des requêtes extrêmement sélectives, traitant jusqu'à 10 % des lignes dans la table de faits. La deuxième classe, avec une sélectivité moyenne, est composée de requêtes traitant de 10 à 75 % des lignes de table de faits. Les requêtes de la troisième classe, avec une sélectivité faible, nécessitent le traitement de plus de 75 % de lignes enregistrées dans la table de faits. Les zones de la figure soulignent également les sélections fondamentales du plan d'exécution de la requête au sein de chaque classe de sélectivité.

Sélection du plan en fonction de la sélectivité
Étant donné que les requêtes en étoile à sélectivité élevée ne récupèrent pas plus de 10 % des lignes de table de faits, ces requêtes offrent un accès aléatoire à la table de faits. Par conséquent, les plans de requête pour cette classe se reposent largement sur les jointures de boucle imbriquées en association avec des recherches d'index non cluster et des recherches de signets dans la table de faits. Étant donné que celles-ci effectuent des E/S aléatoires dans la table de faits, elles sont beaucoup moins performantes par rapport aux E/S séquentielles lorsque nous devons récupérer des parties plus importantes de la table de faits. Ceci entraîne des plans de requête différents à mesure que le nombre de lignes de la table de faits augmente au-delà d'un certain nombre.
Étant donné que les requêtes en étoile à sélectivité moyenne traitent une fraction significative des lignes dans la table de faits, les jointures de hachage avec les analyses de tables de faits ou les analyses de plages de tables de faits sont généralement le choix préféré du chemin d'accès dans la table de faits. SQL Server utilisent des filtres bitmap pour améliorer les performances de ces jointures de hachage.
La figure 3 illustre comment SQL Server utilise ces filtres bitmap pour améliorer des performances de jointures lors de l'exécution de requête de jointure en étoile. La figure affiche un plan pour une requête contre deux tables de dimension, Product et Time, associant la table de faits à leurs clés de substitution. La requête utilise des prédicats de filtre, tels que les clauses WHERE, contre les deux tables de dimension afin qu'une seule ligne se qualifie pour chaque dimension. Ceci est indiqué par les petites tables rouges en regard de leurs deux opérateurs de jointure.
Figure 3 Plan de requête de jointure en étoile avec traitement de réduction de jointure
Figure 3 Plan de requête de jointure en étoile avec traitement de réduction de jointure
L'implémentation de jointure pour chaque jointure est une jointure de hachage, qui autorise SQL Server à utiliser les informations relatives à la qualification des lignes à partir des tables de dimension dans ce que nous appelons les informations de réduction de jointure pour les deux tables de dimension. Les zones vertes de la figure représentent les structures de données d'informations de réduction de jointure. Une fois renseigné à partir des tables de dimension sous-jacentes, SQL Server déplace ces structures de données automatiquement lors de l'exécution de requête vers l'opérateur qui traite la table de faits, telle qu'une analyse de table. Cet opérateur utilise les informations des lignes de tables de dimension pour éliminer les lignes de table de faits qui ne se qualifieront pas pour les conditions de jointure contre les dimensions.
SQL Server supprime ces lignes de table de faits très tôt lors du traitement de requête, après avoir récupéré la ligne de la table de faits. Ceci permet des économies de processeurs et d'E/S de disque étant donné que les lignes supprimées ne doivent pas être traitées au sein d'autres opérateurs du plan de requête. SQL Server utilise une représentation bitmap pour implémenter efficacement les structures de données d'informations de réduction de jointure au moment de l'exécution de requête.

Pipeline d'optimisation de la jointure en étoile
Le processus d'optimisation utilise des heuristiques standard pour l'optimisation de requête de jointure afin de générer une série initiale d'alternatives de plans d'exécution de requête. Les extensions à objectif spécial sont alors invoquées pour produire des alternatives de plans de requête supplémentaires.
Dans le cas d'entreposage de données, l'extension détecte les schémas en étoile, les schémas en flocon et les modèles de requête en étoile puis analyse la sélectivité de la requête par rapport à la table de faits. Si le schéma et la forme de la requête correspondent au modèle, SQL Server ajoute automatiquement d'autres plans de requête à l'espace du plan, qui est alors couvert par l'optimisation à faible coût pour choisir le plan de requête la plus prometteur pour l'exécution.
Au moment de l'exécution de requête, SQL Server surveille également la sélectivité réelle de la réduction de jointure au moment de l'exécution. Si la sélectivité change, SQL Server réorganise les structures de données d'informations de réduction de jointure dynamiquement pour que celle qui est la plus sélective s'applique en premier.

Heuristiques de jointure en étoile
De nombreuses élaborations physiques pour les entrepôts de données suivent le schéma en étoile mais ne spécifient pas complètement les relations entre les tables de faits et de dimension, comme mentionné précédemment pour les contraintes de clés étrangères, par exemple. Sans contrainte de clés étrangères spécifiées explicitement, SQL Server doit dépendre des heuristiques pour détecter les modèles de requête de schéma en étoile. Les heuristiques suivantes sont appliquées pour détecter les modèles de requête de jointure en étoile :
  1. La plus grande des tables participant à la jointure n-aire correspond à la table de faits. Il existe des restrictions supplémentaires relatives à la taille minimale de la table de faits. Par exemple, même si la table la plus grande ne dépasse pas la taille spécifiée, la jointure n-aire n'est pas considérée comme une jointure en étoile.
  2. Toutes les conditions de jointure des jointures binaires dans une requête de jointure en étoile doivent être des prédicats d'égalité de colonnes uniques. Les jointures doivent être des jointures internes. Bien que ceci puisse sembler restrictif, la plupart des jointures entre la table de faits et les tables de dimension sur la clé de substitution dans les schémas en étoile typiques sont couvertes. Si une jointure dispose d'une condition de jointure plus complexe qui ne s'ajuste pas au modèle décrit ci-dessus, la jointure est exclue de la jointure en étoile. Une jointure à cinq branches, par exemple, peut mener à une jointure en étoile trilatérale (avec deux jointures ajoutées ultérieurement), si deux des jointures disposent de prédicats de jointure plus complexes.
Notez qu'il s'agit de règles heuristiques. Il existe peu de cas où les heuristiques choisissent une table de dimension comme table de faits. Ceci a une influence sur le choix du plan mais n'a pas vraiment d'impact sur l'exactitude du plan sélectionné. Les jointures binaires impliquées dans une jointure en étoile sont alors triées par sélectivité décroissante. La sélectivité de jointure dans ce contexte est définie comme un ratio de cardinalité d'entrée de la table de faits et de cardinalité de résultats de la jointure. La sélectivité de jointure indique à quel point une dimension spécifique réduit la cardinalité d'une table de faits. En règle générale, nous envisageons des jointures avec la sélectivité la plus élevée en premier.
Le processeur de requête de SQL Server applique automatiquement l'optimisation aux requêtes suivant le modèle de jointure en étoile et les conditions mentionnées ci-dessus lorsque les plans de requête résultants ont des coûts de requête estimés attrayants. Par conséquent, vous ne devez pas modifier votre application pour qu'elle profite de cette amélioration de performances significative. Cependant, il est important de noter que certaines des optimisations de jointure en étoile, telles que la réduction de jointure, ne sont disponibles que dans SQL Server Enterprise Edition.

Résultats de performance de jointure en étoile
Dans le cadre de l'effort de développement pour l'optimisation de jointure en étoile dans SQL Server 2008, nous avons mené plusieurs études de performances basées sur les charges de travail d'évaluation et de clients réels. Il est utile de regarder les résultats de trois de ces charges de travail.
Entrepôt de données de l'équipe de ventes de Microsoft Cette charge de travail suit les performances d'un entrepôt de données utilisé en interne pour aider à la décision dans l'organisation des ventes chez Microsoft. Nous avons pris un instantané de la base de données avec une taille d'environ 750 Go (avec les index). Les requêtes dans cette charge de travail sont un défi pour le traitement de requêtes, étant donné que beaucoup d'entre elles contiennent plus de 10 jointures.
Client détaillant Cette série d'expériences se base sur un client d'entreposage de données pour les commerces de détail (avec un magasin traditionnel et une présence en ligne). Le client est caractérisé par un schéma en flocon modélisé de manière dimensionnelle et des requêtes de jointure en étoile canonique. Nous avons utilisé environ 100 Go de données brutes pour renseigner un instantané de l'entrepôt pour nos expériences.
Charge de travail pour l'aide à la décision Cette série d'expériences examine les performances d'une charge de travail d'aide à la décision sur une base de données modélisée de manière dimensionnelle de 100 Go. La figure 4 illustre les résultats de ces trois charges de travail. La figure trace des moyennes géométriques normalisées du temps de réponse aux requêtes par rapport à toutes les requêtes dans la charge de travail. Cette métrique est un bon indicateur des performances de requêtes attendues lors de l'exécution d'une requête arbitraire à partir de la charge de travail. Les barres dans la figure comparent les performances de référence (1.0) lorsque l'optimisation de jointure en étoile n'est pas utilisée par rapport aux performances de jointure optimisée en étoile. Toutes ces exécutions ont été effectuées avec SQL Server 2008.
Figure 4 Améliorations de performances grâce à l'optimisation de jointure en étoile
Figure 4 Améliorations de performances grâce à l'optimisation de jointure en étoile
Comme vous le constatez dans la figure, toutes les charges de travail s'améliorent de manière significative, de 12 à 30 %. Tandis que votre kilométrage individuel variera, nous pensons que les charges de travail d'aide à la décision par rapport à SQL Server Engine seront améliorées d'environ 15 à 20 % en fonction de l'extension des optimisations de jointures en étoile spécifiques (nouveautés de SQL Server 2008).

Parallélisme de table partitionnée
Pour accélérer le traitement de requête dans les grands entrepôts de données, les administrateurs de base de données partitionnent souvent les tables de faits importantes par date. Ainsi, les données sont placées sur différents groupes de fichiers, réduisant la quantité de données à rechercher lors du traitement des lignes au sein d'une plage de données spécifique et utilisant les performances simultanées du système de disque sous-jacent lorsque les groupes de fichiers sont déployés sur plusieurs disques physiques.
SQL Server 2005 a introduit la capacité à partitionner une grande relation en parties logiques plus petites pour améliorer l'administration et la gestion des grandes tables. Il a également permis d'améliorer de manière significative le traitement de requêtes, surtout lorsqu'il s'agit d'applications d'aide à la décision importantes.
Malheureusement, certains clients utilisant SQL Server 2005 ont remarqué des problèmes de performances associés aux requêtes sur ces tables partitionnées, en particulier, lors de l'exécution sur des ordinateurs multiprocesseurs à mémoire partagée parallèle. Lors du traitement de requêtes parallèles sur les tables partitionnées dans SQL Server 2005, des instances ne peuvent être possibles que lorsqu'un seul sous-ensemble de threads disponibles est attribué à l'exécution de la requête.
Pensez à un ordinateur 64 cœurs dans lequel les requêtes peuvent utiliser jusqu'à 64 threads en parallèle et une requête concerne deux partitions. Avec SQL Server 2005, il ne reçoit que 2 des 64 threads et par conséquent, peut uniquement utiliser 2/64 (3,1 %) de la puissance du processeur de l'ordinateur. Il a été signalé que pour certaines requêtes, les performances dans le cas partitionné pourraient être 10 fois plus compliquées que lorsque la même requête est exécutée sur le même ordinateur sur une version non partitionnée de la même table de faits.
Il est important de noter que SQL Server 2005 a été optimisé pour les requêtes concernant une partition unique. Dans ce cas, le processeur de requête attribuera tous les threads disponibles pour exécuter l'analyse. Cette optimisation spéciale a entraîné une amélioration significative des performances pour les requêtes de partition unique s'exécutant sur des ordinateurs à plusieurs cœurs. Les clients peuvent donc s'attendre à ce type de comportement pour les requêtes concernant plusieurs partitions.
La nouvelle fonctionnalité de parallélisme de table partitionnée (PTP) dans SQL Server 2008 améliore les performances de requête en utilisant au mieux la puissance de traitement du matériel existant sans tenir compte du nombre de partitions d'une requête ou de la taille relative des partitions individuelles. Dans un scénario d'entrepôt de données typique avec une table de faits partitionnée, les utilisateurs verront une amélioration significative des requêtes s'exécutant sur des plans parallèles, surtout si le nombre de cœurs de processeurs disponibles est plus important que le nombre de partitions concernées par la requête. Cette nouvelle fonctionnalité est prête à l'emploi et ne nécessite aucun ajustement ni configuration.
Il s'agit d'une table de faits représentant des données de ventes organisées par dates de vente sur les quatre partitions. Le diagramme de la figure 5 vous aidera à visualiser cet exemple. Notez qu'au lieu d'un seul index en cluster pour toute la plage de dates, comme c'est le cas pour le cas non partitionné, il y a généralement un index en cluster sur la colonne de date pour chaque partition de la table de faits. Supposons maintenant que la requête R récapitule les ventes des sept derniers jours. Étant donné que les nouvelles données de ventes entrent dans la table de faits en continu via la dernière partition (appelée P4), la requête concernera probablement plusieurs partitions en fonction du moment de son exécution. Ceci est illustré dans la première ligne du diagramme par la manière dont la requête R1 ne concerne qu'une seule partition tandis que la requête R2 concerne deux partitions étant donné que les données pertinentes au moment de l'exécution s'étalent sur les partitions P3 et P4.
Figure 5 Nouvelle fonctionnalité PTP à l'œuvre
Figure 5 Nouvelle fonctionnalité PTP à l'œuvre
Supposons désormais qu'il existe huit threads disponibles. L'exécution de R1 et R2 sur SQL Server 2005 peut entraîner un comportement imprévu. SQL Server 2005 a été optimisé : si l'optimiseur sait qu'au moment de la compilation, une seule partition sera concernée par la requête, cette partition sera traitée comme une table non partitionnée et un plan sera généré et pourra accéder à la table avec tous les threads disponibles.
Le résultat : la requête R1 impliquant une partition unique (P3) sera dans un plan traité par huit threads (non affichés). Dans le cas de R2, qui concerne deux partitions, l'exécuteur attribue un seul thread à chaque partition même si le matériel sous-jacent a des threads supplémentaires disponibles. Par conséquent, R2 n'utilisera qu'une très petite fraction de la puissance du processeur disponible et s'exécutera certainement beaucoup plus lentement que R1.
L'exécution de R1 et R2 sur SQL Server 2008 entraîne une meilleure utilisation du matériel disponible, de meilleures performances et un comportement plus prévisible. Dans le cas de R1, l'exécuteur attribue une nouvelle fois les huit threads disponibles pour traiter les données dans P2 (non affiché). Pendant ce temps, R2 aura pour résultat un plan parallèle dans lequel l'exécuteur attribue tous les threads disponibles à P3 et P4 à tour de rôle, produisant l'effet illustré à la ligne inférieure du diagramme où chacune des deux partitions reçoivent quatre threads. Le processeur reste entièrement utilisé et les performances de R1 et R2 sont comparables.
Cette allocation de threads à tour de rôle active les requêtes pour une exécution améliorée avec des cœurs de processeurs supplémentaires par rapport au nombre de partitions accessibles par la requête. Malheureusement, il existe des cas dans lesquels l'allocation de threads à des partitions n'est pas aussi simple que dans cet exemple.
Les gains en termes de performances de SQL Server 2005 à SQL Server 2008 pour le scénario de table partitionnée sur un ordinateur avec des processeurs à plusieurs cœurs sont illustrés à la figure 6. Ce graphique anecdotique souligne les performances d'analyse pour les tables partitionnées. Pour ce test particulier, qui a été effectué sur un système avec 64 cœurs et 256 Go de mémoire RAM, nous avons partitionné une seule table de 121 Go en 11 partitions de 11 Go chacune. Pour la série de tests décrite dans cette figure, nous avons utilisé une organisation de fichiers de tas avec des démarrages de tampons à froid et à chaud. Toutes les requêtes exécutent des analyses simples par rapport aux données.
Figure 6 Performances en matière d'analyse pour SQL Server avec la nouvelle fonctionnalité PTP activée
Figure 6 Performances en matière d'analyse pour SQL Server avec la nouvelle fonctionnalité PTP activée
L'axe Y affiche le temps de réponse (en sec) et l'axe X indique le degré de parallélisme, qui est analogue au nombre de threads attribués à la requête. Comme vous pouvez le voir, dans les cas de démarrages à froid et à chaud, les temps de réponse continuent à décroître tandis que le degré de parallélisme atteint 22. À ce stade, le système E/S devient saturé pour le cas du démarrage à froid. Ceci est dû au fait que la requête utilisée dans cet exemple est liée aux E/S. Pour plus de charges de travail liées au processeur, cette restriction peut ne pas exister ou ne se produire qu'à un degré de parallélisme plus élevé.
Cependant, la courbe représentant le cas du démarrage à froid continue à afficher une diminution en matière de temps de réponse à mesure que le degré de parallélisme augmente. Sur SQL Server 2005, les deux courbes commençaient à se stabiliser lorsque le degré de parallélisme atteignait 11 étant donné que le nombre de threads par partition se limitait à 1 lors du traitement de partitions multiples.
Dans la pratique, il est important de noter que le gain en matière de temps de réponse pour les nombres croissants de degré de parallélisme n'est jamais linéaire. Le comportement attendu ressemble plutôt à une fonction étape, qui reflète la réalité, c'est-à-dire que la requête attend sur la sous-partie la plus lente. Par exemple, l'ajout d'un thread supplémentaire à cette analyse n'améliore pas le temps de finition d'une requête tant que toutes les analyses restantes n'ont pas reçu les threads supplémentaires leur permettant également de se terminer plus rapidement.
Nous avons effectué plusieurs expériences pour tester le nouveau comportement PTP pour plusieurs configurations de fichiers et matériels. Lors de ces tests, nous avons observé un comportement similaire sur le plan de mise à l'échelle des débits à mesure que le degré de parallélisme augmente au delà d'un thread ou d'une partition.
Enfin, la nouvelle fonctionnalité PTP dans SQL Server 2008 améliore également la lisibilité de plans de requête et permet un meilleur aperçu dans l'exécution de certaines charges de travail. Par exemple, dans le cadre de la fonctionnalité PTP, la manière dont les plans en série et parallèles sont représentés dans le showplan XML a été améliorée et les informations de partitionnement fournies dans les plans d'exécution lors de l'exécution et de la compilation ont également été améliorées.

Compression de données
À mesure que l'analyse décisionnelle devient monnaie courante, les entreprises transmettent de plus en plus de données dans leurs entrepôts de données à des fins d'analyse. Il en résulte une croissance exponentielle de la taille des données à gérer. En 1995, la première étude de Winter Corporation sur la taille des bases de données a indiqué que le système le plus important au monde contenait un téraoctet de données. Dix années plus tard, la base de données la plus importante contenait environ 100 fois plus. Fait encore plus étonnant : la taille des entrepôts de données triple tous les deux ans. Ceci crée de nouveaux défis pour gérer de telles quantités de données et offrir des niveaux acceptables de performances pour les requêtes d'entrepôts de données. Ces requêtes sont généralement complexes, impliquant plusieurs jointures et agrégats et accèdent à de grandes quantités de données. Il n'est pas rare pour de nombreuses requêtes dans la charge de travail d'être liées aux E/S.
La compression de données natives a pour but de résoudre ce problème. SQL Server 2005 SP2 a introduit un nouveau format de stockage de longueur variable, le format de stockage VarDecimal pour les données numériques et décimales. Ce nouveau format de stockage peut réduire la taille de vos bases de données de manière significative. À leur tour, le gain de place peut aider à améliorer les performances de requêtes liées aux E/S de deux manières. Tout d'abord, il y a moins de pages à lire. Ensuite, étant donné que les données sont stockées compressées dans un pool de tampons, la durée de vie de la page est accrue (en d'autres termes, la probabilité selon laquelle la page requise sera trouvée dans le tampon est accrue). Bien sûr, le gain de place obtenu grâce à la compression de données a un coût UC en raison du processus de compression et de décompression des données.
SQL Server 2008 génère le format de stockage VarDecimal, offrant deux types de compression : compression de ligne et compression de page La compression de ligne étend le format de stockage VarDecimal en stockant tous les types de données de longueur fixe à un format de stockage de longueur variable.
Certains exemples de types de données de longueur fixe sont des entiers, des caractères et des données flottantes. Bien que SQL Server enregistre ces types de données au format de durée variable, la sémantique des types de données restera inchangée (un type de données est toujours le type de données de longueur fixe pour l'application). Par conséquent, vous pouvez obtenir les avantages de la compression de données sans devoir modifier quoi que ce soit dans vos applications.
La compression de page réduit la redondance de données dans les colonnes dans une ou plusieurs lignes sur une page donnée. Elle utilise une implémentation propriétaire de l'algorithme LZ78 (Lempel-Ziv), stockant les données redondantes une seule et unique fois sur la page, puis s'y référant à partir de plusieurs colonnes. Notez que lorsque vous utilisez la compression de page, la compression de ligne est également comprise.
Les compressions de ligne et de page peuvent être activées sur une table ou un index ou sur une ou plusieurs partitions pour les tables et les index partitionnés. Vous avez ainsi une flexibilité complète sur le choix des tables, des index et des partitions pour la compression, vous offrant un équilibre adéquat entre le gain de place et l'impact sur le processeur. Vous verrez à la figure 7 une table de ventes partitionnée de différentes manières avec les index alignés.
Figure 7 Tables partitionnées avec différents paramètres de compression
Figure 7 Tables partitionnées avec différents paramètres de compression
Chaque partition représente un trimestre, octobre-décembre étant le dernier trimestre. Supposons que vous accédez aux deux premières partitions fréquemment, à la troisième partition modérément et à la dernière de manière la plus active. Dans ce cas, une configuration possible consiste à activer la compression de page sur les deux premières partitions pour obtenir un gain de place maximal avec un impact minimal sur les performances de la charge de travail, la compression de ligne sur la troisième partition et aucune compression sur la dernière.
Vous pouvez activer la compression, en ligne ou hors ligne, à l'aide des instructions du langage de définition de données (DDL) Alter Table ou Alter Index. SQL Server fournit également une procédure stockée pour estimer le gain de place. Le gain de place que vous atteignez dépendra de la distribution des données et du schéma de l'objet compressé.
En fonction des résultats des tests de plusieurs bases de données de clients, il est clair que la plupart des clients peuvent réduire la taille de leur base de données de 50 à 65 % et améliorer les performances de leurs requêtes liées aux E/S de manière significative. Cependant, l'estimation de l'impact sur les performances de requêtes liées à un processeur est un peu plus difficile et dépend de la complexité de la requête. Dans SQL Server, le coût de décompression ne se produit qu'au moment de l'accès aux index ou tables. Si le coût UC relatif des opérateurs d'analyse est inférieur au coût UC général de la requête (comme c'est généralement le cas dans le scénario d'entrepôt de données), vous devriez avoir un impact inférieur à 20-30 % sur l'utilisation du processeur.

Affichages indexés alignés sur les partitions
Dans SQL Server 2008, les affichages indexés alignés sur les partitions vous permettent de créer et gérer des agrégats récapitulatifs dans votre entrepôt de données relationnelles plus efficacement et de les utiliser dans les scénarios où vous ne pouviez pas les utiliser efficacement précédemment. Les performances de requête s'en trouvent améliorées. Dans un scénario typique, vous disposez d'une table de faits partitionnée par date. Les affichages indexés (ou les agrégats récapitulatifs) sont définis sur cette table pour faciliter la vitesse des requêtes. Lorsque vous basculez dans une nouvelle partition de tables, les partitions correspondantes aux affichages indexés alignés sur les partitions définis sur la table partitionnée basculent également, et ce, de manière automatique.
Il s'agit d'une amélioration significative par rapport à SQL Server 2005, avec lequel vous deviez déposer tout affichage indexé défini sur une table partitionnée avant d'utiliser le fonctionnement ALTER TABLE SWITCH pour basculer dans une partition ou en sortir. La fonction d'affichages indexés alignés sur les partitions dans SQL Server 2008 vous offre les avantages d'affichages indexés sur les grandes tables partitionnées tout en évitant le coût de reconstruire des agrégats sur la totalité d'une table partitionnée. Ces avantages incluent la maintenance automatique des agrégats et la correspondance d'affichages indexés.

Escalade de verrous au niveau de la partition
SQL Server prend en charge le partitionnement par plage, qui vous permet de partitionner les données pour la gérabilité ou de grouper les données selon leur modèle d'utilisation. Par exemple, les données de ventes peuvent être partitionnées avec une limite mensuelle ou trimestrielle. Vous pouvez mapper une partition à son propre groupe de fichiers, puis mapper le groupe de fichiers à un groupe de fichiers. Ceci offre deux avantages principaux. Tout d'abord, vous pouvez sauvegarder et restaurer une partition en tant qu'unité indépendante. Ensuite, vous pouvez mapper un groupe de fichiers pour ralentir ou accélérer le sous-système E/S en fonction du modèle d'utilisation ou de la charge de requête.
Ce qui est intéressant ici, c'est le modèle d'accès aux données. Les requêtes et le fonctionnement DML ne pourront peut-être accéder à ou manipuler qu'un sous-ensemble de partitions. Par conséquent, si par exemple, vous analysez les données de ventes pour 2004, vous ne devrez accéder qu'aux partitions pertinentes et, donc ne devriez pas être concerné, sauf si les ressources système par les requêtes accèdent simultanément aux données d'autres partitions. Dans SQL Server 2005, l'accès simultané aux données d'autres partitions peut entraîner le verrouillage d'une table pouvant avoir un impact sur l'accès aux autres partitions.
Pour minimiser ce problème, SQL Server 2008 introduit une option au niveau de la table pour contrôler l'escalade de verrous au niveau de la partition ou de la table. Par défaut, l'escalade de verrous est activée au niveau de la table, comme c'est le cas dans SQL Server 2005. Cependant, vous pouvez remplacer la stratégie d'escalade de verrous pour la table. Vous pouvez, par exemple, définir l'escalade de verrous ainsi :
Alter table <mytable> set (LOCK_ESCALATION = AUTO)
Cette commande demande à SQL Server de choisir la granularité d'escalade de verrous idéale pour le schéma de table. Si la table n'est pas partitionnée, l'escalade de verrous est au niveau TABLE. Si la table est partitionnée, alors la granularité d'escalade de verrous est au niveau de la partition. Cette option est également utilisée comme un indice par SQL Server pour désapprouver la granularité de verrouillage au niveau de la table.

Conclusion
Ceci n'est qu'une brève présentation des fonctionnalités améliorées que vous trouverez dans SQL Server 2008 et qui vous aideront à atteindre des performances optimales pour les requêtes d'aide à la décision concernant les entrepôts de données relationnelles. Gardez cependant à l'esprit que bien que le temps de réponse compétitif pour vos requêtes d'aide à la décision est essentiel, il y a d'autres exigences clés non indiquées dans cet article.
Certaines fonctionnalités supplémentaires associées à l'entreposage de données relationnelles comprennent ce qui suit :
  • la prise en charge de la syntaxe MERGE dans T-SQL pour mettre à jour, supprimer ou insérer des données (dimension) avec une instruction ou une boucle dans la base de données.
  • des performances de journalisation optimisées du moteur SQL Server pour permettre une ETL plus efficace.
  • des ensembles de groupes pour faciliter l'écriture de requêtes d'aide à la décision agrégées dans T-SQL.
  • la compression de sauvegarde pour réduire les exigences E/S pour les sauvegardes complètes et incrémentielles.
  • la gouvernance de ressources pour contrôler l'allocation de ressources système aux différentes charges de travail.
Nous vous encourageons à consulter les informations plus détaillées relatives à toutes ces fonctionnalités passionnantes sur la page Web de SQL Server, disponible à l'adresse microsoft.com/sql.
Nous souhaitons remercier Boris Baryshnikov, Prem Mehra, Peter Zabback et Shin Zhang pour leur expertise technique.

Sunil Agarwal est responsable de programme senior au sein du groupe SQL Server Storage Engine chez Microsoft. Il est responsable de l'accès simultané, des index, de tempdb, des applications métier, de la capacité de prise en charge et de l'importation/exportation en bloc.
Torsten Grabs est responsable de programme senior principal de Core Storage Engine au sein de l'équipe Microsoft SQL Server. Il possède un doctorat en systèmes de base de données et a plus de 10 ans d'expérience avec SQL Server.
Dr. Joachim Hammer est chef de projet au sein du groupe de traitement des requêtes chez Microsoft. Sa spécialité : l'optimisation de requêtes pour les applications d'entrepôt de données à grande échelle mais aussi les requêtes distribuées, l'extraction, transformation et chargement (ETL) et l'intégration d'informations.


 SQL&#160;Server: R&#233;duire les blocages dans SQL&#160;Server
SQL Server Cherié Warren

Réduire les blocages dans SQL Server
Vue d'ensemble:
  • Raisons de l'escalade de verrous
  • Éviter les blocages inutiles
  • Optimisation de vos requêtes
  • Surveillance de l'impact des verrous sur les performances

Les verrous sont nécessaires pour prendre en charge les activités de lecture et d'écriture simultanées sur une base de données, mais les blocages peuvent avoir un effet négatif sur les performances du système, parfois de façon subtile. Dans cet article, nous verrons comment optimiser votre base de données SQL Server 2005 ou SQL Server 2008 afin de réduire
les blocages et comment surveiller le système afin de mieux comprendre l'impact des verrous sur les performances.

Verrous et escalade
SQL Server® choisit le grain de verrou le plus approprié en se basant sur le nombre d'enregistrements qui ont été affectés et l'activité simultanée qui existe sur le système. Par défaut, SQL Server sélectionne le grain le plus fin et ne choisit des grains plus rugueux que s'il peut utiliser la mémoire système de manière plus efficace. SQL Server n'escalade un verrou que si une telle mesure a une influence positive sur les performances générales du système. Comme le montre la figure 1, les escalades surviendront lorsque le nombre de verrous dans une analyse particulière dépasse 5 000 ou lorsque la mémoire utilisée pour les verrous par le système dépasse la capacité disponible :
Figure 1 Conditions qui provoquent l'escalade de verrou
Figure 1 Conditions qui provoquent l'escalade de verrou
  • 24 % de la mémoire non AWE (address windowing extension) utilisée par le moteur de base de données si le paramètre des verrous est défini sur 0
  • 40 % de la mémoire non AWE utilisée par le moteur de base de données si le paramètre des verrous n'est pas défini sur 0
Si une escalade survient, elle concerne toujours à un verrou de table.

Éviter les blocages inutiles
Les blocages peuvent survenir sur n'importe quel grain de verrou, mais l'exposition des blocages augmente en cas d'escalade. L'escalade de verrou peut indiquer que votre application n'est pas bien conçue, codée ou configurée.
Il est important de se conformer aux principes fondamentaux concernant la conception des bases de données (par exemple utiliser un schéma normalisé avec des clés étroites et éviter les opérations de données en bloc sur les systèmes transactionnels) pour éviter ces blocages. Si vous ne suivez pas ces règles (en séparant, par exemple, le système de création de rapports du système transactionnel ou en traitant les flux de données en dehors des heures de travail), il vous sera difficile de régler le système.
L'indexation peut être un facteur clé pour déterminer le nombre de verrous nécessaires pour accéder aux données. Un index peut limiter le nombre d'enregistrements auquel accède une requête en réduisant le nombre de recherches internes que le moteur de base de données doit exécuter. Par exemple, lorsque vous sélectionnez une seule ligne d'une table sur une colonne non indexée, chaque ligne de la table doit être temporairement verrouillée, le temps que l'enregistrement désiré soit identifié. En revanche, si cette colonne était indexée, un seul verrou serait requis.
SQL Server 2005 et SQL Server 2008 renferment tous deux des vues de gestion dynamiques (sys.dm_db_missing_index_group_stats, sys.dm_db_missing_index_groups, sys.dm_db_missing_index_details) qui révèlent les tables et les colonnes qui profitent des index, selon les statistiques d'utilisation accumulées.
La fragmentation peut également jouer un rôle dans les problèmes de performances, en ce sens que le moteur de base de données peut avoir besoin d'accéder à plus de pages. En outre, des statistiques inexactes peuvent mener l'optimiseur de requête à choisir un plan moins efficace.
N'oubliez pas que, bien que les index accélèrent l'accès aux données, ils peuvent ralentir la modification des données, car non seulement les données sous-jacentes doivent changer mais les index doivent également être mis à jour. La vue de gestion dynamique sys.dm_db_index_usage_stats souligne la fréquence d'utilisation des index. Un exemple d'indexation inefficace assez courant concerne les index composites où la même colonne est indexée à la fois séparément et en combinaison. Étant donné que SQL Server accède aux index de gauche à droite, l'index sera utilisé tant que les colonnes se trouvant à l'extrême gauche sont utiles.
Les tables de partitionnement peuvent à la fois optimiser le système (afin qu'il y ait moins d'exposition de bloc) et diviser les données en objets physiques séparés qui peuvent être traités séparément. Le partionnement des lignes est la méthode la plus utilisée pour séparer les données, mais le partionnement horizontal des données est une autre option à considérer. Vous pouvez intentionnellement choisir de dénormaliser en divisant une table en plusieurs tables séparées ayant le même nombre de lignes et de clés mais des colonnes différentes afin de réduire les risques associés au fait que des processus séparés puissent souhaiter avoir un accès exclusif aux données en même temps.
Plus une application dispose de plusieurs manières d'accéder à une ligne de données particulière et plus les colonnes pouvant être incluses dans cette ligne sont nombreuses, plus la méthode de partionnement de colonnes est intéressante. La mise en file d'attente d'applications et les tables d'état peuvent parfois profiter de cette approche. SQL Server 2008 ajoutent la capacité à désactiver les escalades de verrous par partition (ou par table lorsque les partitions ne sont pas activées pour la table).

Optimisation des requêtes
L'optimisation des requêtes joue un rôle important dans l'amélioration des performances. Voici trois approches que vous pouvez adopter :
Réduire le temps de transaction L'un des meilleurs moyens de réduire les blocages, et donc d'améliorer les performances générales, est de veiller à ce que les transactions soient aussi brèves que possible. Tout traitement qui n'est pas critique pour l'intégrité de la transaction (tel que la recherche de données apparentées, l'indexation et le nettoyage de données) devrait être supprimé.
SQL traite chaque instruction comme une transaction implicite. Si l'instruction concerne plusieurs lignes, une seule instruction peut constituer une grande transaction, surtout si les colonnes sont nombreuses ou si les colonnes contiennent un grand type de données. Une seule instruction peut également provoquer des partitionnements de page si le facteur de remplissage est élevé ou si une instruction UPDATE remplit une colonne avec une valeur plus grande que la valeur allouée. Dans de telles circonstances, il serait utile de diviser la transaction en groupes de lignes et les traiter l'une après l'autre jusqu'au bout. Le traitement par lot ne devrait être envisagé que lorsque l'instruction individuelle ou les groupes d'instructions peuvent être divisés en lots plus petits qui peuvent toujours être considérés comme une unité de travail complète qu'ils réussissent ou qu'ils échouent.
Séquencer la transaction Au sein de la transaction, le séquencement intentionnel des instructions peut réduire les risques de blocage. Il y a deux principes à garder à l'esprit. Tout d'abord, accédez aux objets dans le même ordre et dans tout le code SQL de votre système. Sans une telle cohérence, des blocages peuvent se produire lorsque deux processus concurrents accèdent aux données dans un ordre différent, provoquant une erreur de système pour l'un des processus. Ensuite, placez les objets faisant l'objet d'un accès fréquent ou qui sont difficilement accessibles à la fin de la transaction. SQL attend que les objets soient requis dans la transaction pour les verrouiller. En retardant l'accès aux zones réactives, vous permettez à ces objets de maintenir les verrous pendant une période de temps plus courte.
Utiliser des indicateurs de verrou Les indicateurs de verrou peuvent être utilisés soit au niveau de la session soit au niveau de l'instruction pour une table ou une vue spécifique. Un exemple typique d'utilisation d'indicateur de verrou au niveau de la session concerne le traitement par lot dans un entrepôt de données durant lequel le développeur sait que le processus sera le seul à être exécuté à un moment donné sur cet ensemble de données. En utilisant une commande telle que SET ISOLATION LEVEL READ UNCOMMITTED au début de la procédure enregistrée, SQL Server ne réservera pas de verrou de lecture, ce qui réduira la surcharge de verrouillage générale et améliorera les performances.
Un exemple typique d'utilisation d'indicateur de verrou au niveau de l'instruction est lorsque le développeur sait qu'une erreur de lecture ou « dirty read » peut se produire sans créer d'incident (par exemple en lisant une seule ligne d'une table dans laquelle d'autres processus simultanés n'auront jamais besoin de cette même ligne) ou lorsque tous les autres efforts de réglage des performances ont échoué (conception de schéma, conception et maintenance d'index et réglage de requête) et que le développeur souhaite forcer le compilateur à utiliser un type d'indicateur spécifique.
Les indicateurs de verrou de ligne peuvent être pratiques si la surveillance montre que des verrous à gros grains ont eu lieu là où très peu d'enregistrements sont concernés par la requête, car cela risque de réduire les blocages. Les indicateurs de verrou de table peuvent être pratiques si la surveillance montre que des verrous à petits grains sont maintenus (et non escaladés) lorsque presque tous les enregistrements de la table sont concernés par la requête, car cela risque de réduire les ressources système nécessaires pour maintenir les verrous. Notez qu'en spécifiant un indicateur de verrou, vous ne garantissez pas que le verrou ne sera pas escaladé lorsque le nombre de verrous atteindra le seuil de la mémoire système. Toutefois, ce faisant, vous empêchez toute autre escalade.

Ajuster votre configuration
Comme le montre la figure 2, il y a plusieurs facteurs à considérer lorsque vous configurez votre système SQL Server.
Figure 2 Comment SQL Server détermine la quantité de mémoire qui peut être utilisée pour le verrouillage
Figure 2 Comment SQL Server détermine la quantité de mémoire qui peut être utilisée pour le verrouillage
Mémoire Les verrous sont toujours sont tenus dans la mémoire non AWE. En augmentant donc la taille de la mémoire non AWE, vous augmentez la capacité du système à maintenir les verrous.
Une architecture 64 bits doit être votre premier choix lorsque vous essayez d'augmenter la capacité de verrouillage, car l'architecture 32 bits est limitée à 4 Go de mémoire non AWE tandis que celle de 64 bits n'est pas du tout limitée.
Sur les systèmes 32 bits, vous pouvez prendre un gigaoctet de mémoire supplémentaire du système d'exploitation de SQL Server en ajoutant le commutateur /3GB au fichier Boot.ini.
Paramètres de configuration de SQL Server Plusieurs paramètres peuvent être ajustés via la procédure sp_configure qui affecte le verrouillage. Le paramètre des verrous configure le nombre de verrous que le système peut tenir avant de lancer une erreur. Par défaut, le paramètre est défini sur 0, ce qui signifie que le serveur ajustera dynamiquement les verrous réservés, les autres processus essayant tous d'accéder à la mémoire. SQL réservera au départ 2 500 verrous. Chaque verrou consomme 96 octets de mémoire. La mémoire paginée n'est pas utilisée.
Les paramètres de mémoire minimum et maximum réservent la quantité de mémoire utilisée par SQL Server, configurant ainsi le serveur à maintenir statiquement la mémoire. Puisque l'escalade de verrou est liée à la mémoire disponible, la réservation de la quantité de mémoire de processus concurrents peut faire la différence lorsqu'il s'agit de déterminer si les escalades auront lieu ou non.
Paramètres de connexion Par défaut, les verrous qui effectuent le blocage n'expirent pas, mais vous pouvez utiliser le paramètre @@LOCK_TIMEOUT qui provoque une erreur si le seuil d'attente spécifié pour la libération d'un verrou est dépassé.
Indicateurs de trace Deux indicateurs de trace, en particulier, sont associés aux escalades de verrous. Le premier est l'indicateur de trace 1211 qui désactive les escalades de verrous. Si le nombre de verrous consommés dépasse la mémoire disponible, une erreur est lancée. L'autre est l'indicateur de trace 1224 qui désactive les escalades de verrous pour les instructions individuelles.

Surveillance de votre système
Plus d'informations
  • Inside Microsoft SQL Server 2005: The Storage Engine par Kalen Delaney
  • Comment faire pour surveiller le blocage de SQL Server 2005 et SQL Server 2000
  • Script des statistiques de performances SQL Server 2005
  • Comment résoudre les problèmes de blocage provoqués par l'escalade de verrou dans SQL Server
  • Escalade de verrou (moteur de base de données)

Il est possible de surveiller l'impact des verrouillages et blocages sur les performances générales du système en interrogeant les données d'état à des intervalles donnés (peut-être toutes les heures) et en capturant les statistiques sur les verrous maintenus. Les principales informations à rassembler sont :
  • L'objet affecté, le grain et le type de verrou
  • La durée des verrous et blocages
  • La commande SQL émise (nom de la procédure enregistrée, instruction SQL à l'intérieur)
  • Les informations sur la chaîne de blocage, le cas échéant
  • Comment le système consomme la capacité de verrouillage à sa disposition
Vous pouvez exécuter un script comme celui de la figure 3 pour capturer ces informations et l'écrire sur une table avec l'horodateur approprié. Et pour décomposer davantage le ResourceId des données bloquées, vous pourriez exécuter un script tel que celui de la figure 4.
Figure 4 En savoir plus sur les données bloquées (Close Figure 4)
DECLARE @SQL                           nvarchar(max)
      , @CallingResourceType           varchar(30)
      , @Objectname                    sysname
      , @DBName                        sysname
      , @resource_associated_entity_id int

-- TODO: Set the variables for the object you wish to look up

SET @SQL = N'
USE     ' + @DbName + N'
DECLARE @ObjectId int

SELECT  @ObjectId = CASE
                    WHEN @CallingResourceType = ''OBJECT''
                    THEN @resource_associated_entity_id
                    WHEN @CallingResourceType IN (''HOBT'', ''RID'', ''KEY'',''PAGE'')
                    THEN (SELECT  object_id
                          FROM    sys.partitions
                          WHERE   hobt_id = @resource_associated_entity_id)
                    WHEN @CallingResourceType = ''ALLOCATION_UNIT''
                    THEN (SELECT  CASE
                                     WHEN type IN (1, 3)
                                     THEN (SELECT  object_id
                                           FROM    sys.partitions
                                           WHERE   hobt_id = allocation_unit_id)
                                     WHEN type = 2
                                     THEN (SELECT  object_id
                                           FROM    sys.partitions
                                           WHERE   partition_id = allocation_unit_id)
                                     ELSE NULL
                                     END
                          FROM    sys.allocation_units
                          WHERE   allocation_unit_id = @resource_associated_entity_id)
                    ELSE NULL
                    END

SELECT  @ObjectName = OBJECT_NAME(@ObjectId)'

EXEC    dbo.sp_executeSQL
        @SQL
      , N'@CallingResourceType varchar(30)
      , @resource_associated_entity_id int
      , @ObjectName sysname OUTPUT'
      , @resource_associated_entity_id = @resource_associated_entity_id
      , @CallingResourceType = @CallingResourceType
      , @ObjectName = @ObjectName OUTPUT
Figure 3 Capture de statistiques de verrouillage (Close Figure 3)
SELECT  er.wait_time                      AS WaitMSQty
      , er.session_id                     AS CallingSpId
      , LEFT(nt_user_name, 30)            AS CallingUserName
      , LEFT(ces.program_name, 40)        AS CallingProgramName
      , er.blocking_session_id            AS BlockingSpId
      , DB_NAME(er.database_id)           AS DbName
      , CAST(csql.text AS varchar(255))   AS CallingSQL
      , clck.CallingResourceId
      , clck.CallingResourceType
      , clck.CallingRequestMode
      , CAST(bsql.text AS varchar(255))   AS BlockingSQL
      , blck.BlockingResourceType
      , blck.BlockingRequestMode
FROM    master.sys.dm_exec_requests er WITH (NOLOCK)
        JOIN master.sys.dm_exec_sessions ces WITH (NOLOCK)
          ON er.session_id = ces.session_id
        CROSS APPLY fn_get_sql (er.sql_handle) csql
        JOIN (
-- Retrieve lock information for calling process, return only one record to
-- report information at the session level
              SELECT  cl.request_session_id                 AS CallingSpId
                    , MIN(cl.resource_associated_entity_id) AS CallingResourceId
                    , MIN(LEFT(cl.resource_type, 30))       AS CallingResourceType
                    , MIN(LEFT(cl.request_mode, 30))        AS CallingRequestMode
-- (i.e. schema, update, etc.)
              FROM    master.sys.dm_tran_locks cl WITH (nolock)
              WHERE   cl.request_status = 'WAIT' -- Status of the lock request = waiting
              GROUP BY cl.request_session_id
              ) AS clck
           ON er.session_id = clck.CallingSpid
         JOIN (
              -- Retrieve lock information for blocking process
              -- Only one record will be returned (one possibility, for instance,
              -- is for multiple row locks to occur)
              SELECT  bl.request_session_id            AS BlockingSpId
                    , bl.resource_associated_entity_id AS BlockingResourceId
                    , MIN(LEFT(bl.resource_type, 30))  AS BlockingResourceType
                    , MIN(LEFT(bl.request_mode, 30))   AS BlockingRequestMode
              FROM    master.sys.dm_tran_locks bl WITH (nolock)
              GROUP BY bl.request_session_id
                    , bl.resource_associated_entity_id
              ) AS blck
           ON er.blocking_session_id = blck.BlockingSpId
          AND clck.CallingResourceId = blck.BlockingResourceId
        JOIN master.sys.dm_exec_connections ber WITH (NOLOCK)
          ON er.blocking_session_id = ber.session_id
        CROSS APPLY fn_get_sql (ber.most_recent_sql_handle) bsql
WHERE   ces.is_user_process = 1
        AND er.wait_time > 0
Vous pouvez également surveiller les escalades de votre système par le biais du générateur de profils SQL (événement Lock:Escalation), la vue de gestion dynamique dm_db_index_operational_stats (index_lock_promotion_count) ou l'interrogation régulière des informations de verrouillage du système. Les informations pertinentes à recueillir de la surveillance de l'escalade sont celles qui consistent à savoir si le traitement mérite une escalade. Sinon, les procédures enregistrées pertinentes peuvent préciser une cause à l'origine des problèmes de performances. L'évaluation devrait se concentrer sur les tables renfermant de grandes quantités de données ou qui font l'objet d'une grande utilisation simultanée.
Après avoir rassemblé des données sur les verrouillages, les blocages et les escalades, vous pouvez ensuite analyser les données pour déterminer le bloc cumulatif et la durée du verrouillage (nombre d'incidences multipliées par la durée des incidences) par objet. En général, ceci peut initier un cycle itératif de réglage de performances durant lequel les modifications sont déployées, contrôlées, analysées et réparées. Parfois, il suffit d'une simple modification telle que l'ajout d'un index pour améliorer considérablement les performances et modifier la zone du système qui constitue le goulot d’étranglement des performances le plus difficile.
Vous trouverez plus d'information sur la réduction des blocages dans SQL Server dans l'encadré « Plus d'informations ». Si vous veillez à limiter la taille des transactions durant les phases de conception, codage et stabilisation, vous éliminerez une bonne partie des problèmes de blocages. En outre, l'utilisation de matériel approprié peut réduire considérablement la probabilité d'escalades indésirables. Quoi qu'il en soit, l'évaluation continue des blocages sur le système peut identifier rapidement les problèmes de performances à leur source.

Cherié Warren est responsable de développement senior pour Microsoft IT. Elle est actuellement responsable de l'une des plus grandes bases de données transactionnelles de Microsoft. En outre, Cherié donne fréquemment des conseils sur les causes et problèmes de performances liés au blocage. Elle se spécialise dans les bases de données SQL Server au niveau des entreprises depuis 10 ans.


 Microsoft&#160;Office: Int&#233;gration de bases de donn&#233;es Access avec SharePoint
Microsoft Office Peter Serzo

Intégration de bases de données Access avec SharePoint
Vue d'ensemble:
  • Avantages de l'intégration Access et SharePoint
  • Migration de données Access vers SharePoint
  • Extension des fonctionnalités Access avec SharePoint

Lorsque je parle aux utilisateurs finaux de Microsoft Office SharePoint Server (MOSS), je leur demande toujours de me montrer les outils qu'ils utilisent et comment ils les utilisent. Et bien sûr, il y a toujours
dans l'entreprise quelqu'un qui utilise Microsoft® Office AccessTM pour répondre aux besoins fondamentaux de l'entreprise. Access demeure un outil viable et un atout important chez beaucoup d'entreprises.
MOSS 2007 propose un moyen d'exploiter des applications créées sur Access et de les intégrer à SharePoint® afin de créer une solution nouvelle et de portée plus globale. Le principal objectif de cet article est de vous montrer comment et où MOSS s'intègre à Access et comment l'utilisateur final peut configurer ces deux produits pour créer une solution.
La technologie sous-jacente que MOSS apporte à Access inclut un flux de travail, un référentiel commun (SQL Server®) et une interface basée sur le Web (le navigateur). Les fonctionnalités de SharePoint incluent la gestion de documents, les mémoires de travail et la capacité à dresser des listes personnalisées et utiliser des flux de travail intégrés et composants WebPart prêts à l'emploi qui couvrent tout, depuis l'annonce des événements à la création d'une liste de contacts ou d'une liste de problèmes, en passant par la gestion de formulaires créés par les utilisateurs. En outre, sa simplicité d'utilisation et ses technologies Office familières aideront l'utilisateur final à travailler avec confiance. Comme vous le verrez, MOSS ne représente pas une menace pour les solutions actuellement en place. MOSS vous permet plutôt d'être plus rentable puisque vous n'avez plus à réécrire des applications, ce qui aide les utilisateurs finaux à se concentrer sur la résolution des problèmes métier et non pas techniques de l'entreprise.
Ce n'est pas uniquement l'utilisateur final qui en profite. Les services et administrateurs informatiques ont souvent des difficultés à aider leurs utilisateurs finaux à maintenir toutes les bases de données personnalisées qui bourgeonnent partout dans l'entreprise. Beaucoup ne savent même pas qu'Access est utilisé pour répondre à des besoins critiques de l'entreprise avant d'être confrontés à des problèmes tels que les limites de stockage, l'accès multiutilisateurs, la sécurité, la réparation de bases de données endommagées, l'utilisation d'Internet, les versions Access non compatibles et le déploiement de modifications sur plusieurs bureaux. SharePoint a une réponse pour chacun de ces problèmes.
Malgré ses limites, Access est un outil puissant et convivial, surtout pour ceux qui ne sont pas habitués à écrire du code. Vous disposez, à un seul endroit, de tables relationnelles configurables, de requêtes simples (et complexes), d'un créateur de formulaires frontal de type glisser-déplacer, de rapports basés sur les données et de la possibilité de configurer plusieurs utilisateurs. La création de solutions basées sur Access et SharePoint peut être très utile à la fois pour les organisations souhaitant regrouper les ressources et les compétences et pour les personnes qui veulent profiter des applications et compétences qui ont été développées sur plusieurs années.

Mise en route
Access 2007 propose plusieurs points d'intégration à MOSS 2007. Comme le montre la figure 1, ces points incluent : l'importation de données d'une liste SharePoint, la publication de données sur un site SharePoint, la création d'une liste SharePoint, l'utilisation de données SharePoint comme source externe, la migration d'une base de données Access vers un site SharePoint nouveau ou existant et l'accès hors ligne aux données SharePoint.
Figure 1 Access 2007 offre des points d'entrée qui facilitent l'intégration à SharePoint
Figure 1 Access 2007 offre des points d'entrée qui facilitent l'intégration à SharePoint
Il est conseillé de commencer par la création d'une liste SharePoint dans une table Access. Une liste SharePoint ressemble beaucoup à une table créée dans Access. Elle est enregistrée dans la base de données de contenu SQL Server, contient certains attributs de champ et prend en charge les recherches.
Les restrictions à retenir lorsque vous créez une liste SharePoint sont : Microsoft recommande une limite de 2 000 éléments par affichage pour obtenir des performances optimales. SharePoint n'impose pas l'intégrité référentielle. Les objets OLE ne sont pas exportés dans SharePoint. La validation de données est limitée.
Pour créer une liste SharePoint dans une table Access, sélectionnez tout d'abord l'onglet Données externes puis cliquez sur le bouton de Liste SharePoint activé sous le groupe Exporter. À présent, vous devez spécifier le site SharePoint dans lequel cette liste sera active en remplissant la boîte de dialogue Exporter - Site SharePoint illustré à la figure 2 ou en cliquant avec le bouton droit sur votre table et en choisissant Exporter les données vers la liste SharePoint. Notez que si la table est un enfant dans une relation, toutes les tables parent seront également exportées.
Figure 2 Les données Access seront exportées dans le site SharePoint que vous spécifiez
Figure 2 Les données Access seront exportées dans le site SharePoint que vous spécifiez
Une fois le processus d'exportation terminé, vous avez la possibilité d'enregistrer les étapes d'exportation afin que vous n'ayez pas à les reprendre. À ce point, vous pouvez vous rendre au site SharePoint et voir les données qui ont été téléchargées. Cette simple opération est utile lorsqu'il s'agit de transférer des données dans SharePoint et de les mettre à la disposition des utilisateurs. Les avantages qu'elle offre sont le renforcement de la sécurité car les données sont désormais enregistrées dans une base de données SQL Server et un accès plus facile car les informations sont disponibles via le navigateur.
Toutefois, une autre opération, celle qui consiste à lier des listes dans SharePoint en tant que tables dans Access, s'avère plus efficace pour intégrer Access à SharePoint. Pour effectuer cette opération, cliquez sur l'onglet Données externes dans Access et choisissez Liste SharePoint sous le groupe Importer. Vous affichez ainsi la boîte de dialogue illustrée à la figure 3.
Figure 3 Liaison d'Access à SharePoint
Figure 3 Liaison d'Access à SharePoint
Choisissez le site qui renferme la liste SharePoint qui sera utilisée comme source de données liée puis sélectionnez la liste que vous voulez lier. Une fois cette opération terminée, la liste sera affichée sous forme de table liée dans Access, et dans le coin inférieur droit de l'application, vous verrez un indicateur « Listes SharePoint en ligne ». Il existe, à présent, une synchronisation bidirectionnelle entre Access et SharePoint qui prend en charge les opérations d'ajout, de modification et de suppression de SharePoint ou d'Access. Comme vous le verrez, il est possible d'écrire du code par rapport à la table pour fournir des fonctionnalités supplémentaires.
Lorsque vous créez des liens aux listes SharePoint dans Access, vous verrez qu'une autre table, la liste d'informations utilisateurs Windows® SharePoint Services (WSS), est également importée et liée par défaut. En outre, une table des problèmes appelée « Problèmes lors du déplacement vers le site SharePoint » est créée. Vous pouvez y passer en revue tous les conflits de données.
Pour plus d'informations sur la migration de données et sur le traitement des types de données durant la conversion, voir « Conversion de types de données Access et SharePoint » (office.microsoft.com/en-us/access/HP010477131033.aspx) et la section appelée Restrictions de la migration dans « Déplacer les tables d'une base de données Access à un site SharePoint et le lier entre elles » (office.microsoft.com/en-us/access/HA101314681033.aspx).
Il existe une troisième façon d'intégrer des tables et des listes via SharePoint. Choisissez une liste et, sous l'onglet Actions, cliquez sur le « Ouvrir avec Access ». Une boîte de dialogue vous demande le nom de la base de données (nouvelle ou existante). Après avoir entré le nom de la base de données, choisissez la simple liaison aux données sur le site SharePoint ou l'exportation des données directement dans Access (voir figure 4).
Figure 4 Rendre les données SharePoint accessibles via Access
Figure 4 Rendre les données SharePoint accessibles via Access

Transfert d'une base de données vers SharePoint
Jusqu'ici, nous avons vu l'importation d'une liste SharePoint sous forme de table liée et l'exportation de tables vers SharePoint sous forme de listes, mais qu'en est-il si vous avez besoin d'accéder à la base de données toute entière ? Beaucoup d'organisations possèdent des applications stratégiques qui s'exécutent dans Access et qui doivent être disponibles à distance afin que les utilisateurs puissent exécuter des rapports et des requêtes et entrer des données. Dans de telles situations, il n'est pas toujours possible, financièrement ou du point de vue des compétences disponibles, de réécrire l'application. SharePoint et Access résolvent ce problème grâce à l'option « Déplacer vers le site SharePoint » se trouvant sous l'onglet Accéder aux listes SharePoint. Cette option est identique à l'option servant à passer à SQL Server en utilisant l'Assistant de migration qui est apparu pour la première fois dans Access 97.
Le transfert d'une base de données Access toute entière vers SharePoint offre les avantages suivants : toutes les tables sont converties en listes SharePoint, une sauvegarde de la base de données Access est effectuée, les listes deviennent automatiquement des tables liées dans Access, vous pouvez déplacer la base de données toute entière et non pas uniquement les tables et la base de données fonctionne pratiquement de la même manière qu'avant le transfert.
Lorsque vous cliquez sur le bouton Déplacer vers le site SharePoint, la boîte de dialogue de la figure 5 s'affiche. Après avoir spécifié le site, vous devez décider si vous voulez enregistrer la base de données. Si vous choisissez de le faire, la base de données toute entière sera enregistrée dans une bibliothèque de documents sélectionnée. Cela signifie que la base de données entière (y compris les formulaires, les rapports, les requêtes et les macros) est enregistrée dans SharePoint et est ainsi disponible sur le serveur. Lorsqu'un utilisateur veut accéder à la base de données, il se rend tout simplement à la bibliothèque dans laquelle elle se trouve et clique dessus pour la déployer automatiquement vers son bureau.
Figure 5 Spécifiez le site SharePoint sur lequel vous voulez déplacer votre base de données
Figure 5 Spécifiez le site SharePoint sur lequel vous voulez déplacer votre base de données
Lorsque vous choisissez de déplacer la base de données toute entière, un message vous demandant si vous souhaitez publier les changements s'affiche sous le ruban. Cette option vous permet de synchroniser les modifications locales apportées à la conception et aux données avec la copie du serveur. Si vous ne sélectionnez pas cette option, seules les tables seront transformées en listes et reliées à Access. Dans ce cas, la base de données toute entière n'est pas disponible à la communauté d'utilisateurs et n'est pas sauvegardée en tant qu'objet dans SharePoint.
Après avoir sélectionné une option, la base de données et les informations qui lui sont associées seront disponibles par le biais du site SharePoint vous avez choisi. Là aussi, une table des problèmes transférés au site SharePoint est créée. C'est là que tous les conflits provoqués par la migration sont décrits. Vous pouvez examiner n'importe quel problème qu'Access a rencontré en téléchargeant la table sur le site SharePoint.

Affichages, formulaires et rapports
Une fois la base de données déplacée, vous voudrez tester ses fonctionnalités. Assurez-vous que vous voyez l'indicateur « Listes SharePoint en ligne » avant de commencer. Notez que les requêtes Access deviennent des affichages SharePoint. Une vue SharePoint est très similaire à une requête Access.
Lorsque vous déplacez la base de données toute entière, les requêtes existantes sont copiées dans SharePoint en tant qu'affichages. Les utilisateurs d'Access savent qu'en écrivant des requêtes, ils peuvent voir un sous-ensemble des données. En apprenant à faire la même chose dans un affichage SharePoint, vous comprenez comment les données sont organisées dans une liste SharePoint.
L'un des affichages les plus utiles que vous puissiez créer est un affichage Access. Pour ce faire, allez à la liste sous laquelle vous souhaitez créer la vue et choisissez Affichages puis Créer un affichage Vous verrez alors l'option d'accès à l'affichage qui vous permet de créer des formulaires et des rapports basés sur une liste. Lorsque vous cliquez sur cette option et choisissez la base de données Access, une boîte de dialogue identique à celle de la figure 6 s'affiche. Comme vous le voyez, vous définissez à présent le format (type de formulaire, PivotChart, PivotTable ou rapport), et une fois le processus terminé, il y aura un formulaire ou un rapport lié dans la base de données Access.
Figure 6 Création d'un affichage Access
Figure 6 Création d'un affichage Access

Accès hors ligne
En réalité, l'extension d'une application d'importance stratégique se traduit par un retour sur investissement. Une manière d'étendre la portée d'une application Access/SharePoint intégrée est de comprendre que vous n'avez pas à être connecté à SharePoint pour l'utiliser. C'est dans cette optique qu'Access 2007 a introduit la possibilité de travailler hors ligne. Les informations sont mises en cache dans la copie locale de la base de données jusqu'à ce qu'elles puissent être jointes au serveur. Pour mettre une base de données hors ligne, cliquez sur le bouton Travailler hors connexion, sur Données externes|Listes SharePoint, sur le ruban.
Lorsque vous êtes prêt à vous reconnecter à SharePoint, vous pouvez choisir de travailler en ligne ou de synchroniser. Ces options permettent toutes deux de télécharger les données et de présenter les conflits à examiner. Avec l'option Synchroniser, cependant, les données sont téléchargées mais l'application reste hors ligne.
Un autre élément à retenir dans le groupe Listes SharePoint est la fonction Ignorer les modifications qui comporte deux options. La première ignore toutes les modifications mais ne met pas à jour les données SharePoint dans Access. La deuxième ignore toutes les modifications et met à jour les données SharePoint (les listes liées).

Modèles Access
Access 2007 comporte plusieurs modèles préfabriqués qui aident les utilisateurs à créer des solutions d'entreprise rapidement, comme vous pouvez le voir en cliquant sur le bouton Listes SharePoint sous l'onglet Créer, dans le groupe Tables (voir figure 7). En choisissant l'un de ces modèles, vous définissez automatiquement le schéma d'une table liée à SharePoint. Actuellement, seuls Contacts, Tâches, Problèmes et Événements sont pris en charge. Cela signifie que si vous exportez une table qui contient l'un de ces types d'informations, les données se transformeront en type de contenu WSS correspondant.
Figure 7 Choix du type de liste
Figure 7 Choix du type de liste
Vous pouvez également créer des modèles personnalisés qui peuvent être utilisés pour les listes SharePoint ou créer des modèles de site SharePoint avec des bases de données Access 2007 à liaison automatique. Pour ce faire, vous devez avoir les extensions Access 2007 Developer Extensions et définir le WSSTemplateID de la table. Cette propriété suit les tables dotées d'un équivalent de modèle de liste SharePoint.

Access et les métadonnées
Les entreprises habituées depuis longtemps aux applications Access ne seront pas toujours disposées à les déplacer vers SharePoint. Dans ce cas, il est parfois pratique d'écrire du code dans Access pour mettre à jour SharePoint. Avec le code, vous pouvez coller SharePoint et Access ensemble.
En guise d'exemple, nous citerons le cas de la base de données de Northwind Trader qui stocke les informations sur les produits, les fournisseurs et les commandes de clients. À chaque produit est généralement associée une feuille de produit livrée par le fournisseur sous forme de fichier .pdf. La base de données Access effectue le suivi de toutes les informations contenues sur la feuille de produit, notamment l'emplacement géographique, le numéro de produit, l'historique des révisions et le code de service de l'entreprise. Ces informations doivent être mises à la disposition des fournisseurs via l'extranet de SharePoint.
Un site SharePoint est créé et tous les documents sont transférés vers une bibliothèque de documents liée, mais les champs de métadonnées sont vides (voir figure 8) parce que les données sont suivies dans Access (et la personne qui effectue cette opération est bien habituée à Access et n'est pas disposée à changer).
Figure 8 Document Northwind affiché dans SharePoint, avec les métadonnées qui manquent
Figure 8 Document Northwind affiché dans SharePoint, avec les métadonnées qui manquent
Fort heureusement, comme le montre la figure 9, vous pouvez ajouter du code Visual Basic® for Applications (VBA) pour mettre à jour les métadonnées via l'application Access. L'application n'a pas à être réécrite. L'employé peut continuer à utiliser un outil avec lequel il se sent à l'aise tout en se consacrant au Web et les fournisseurs peuvent accéder à l'extranet en fonction de leurs autorisations (ils ne voient que ce qu'ils sont autorisés à voir). Pas de problèmes de simultanéité ou de taille de bases de données.
Figure 9 Mise à jour de métadonnées avec le code
Figure 9 Mise à jour de métadonnées avec le code

Sécurité intégrée
L'un des plus grands avantages que confère le transfert des applications Access à SharePoint est la possibilité d'utiliser le modèle de sécurité de SharePoint auquel est intégrée une authentification Active Directory®. Cela signifie que vous n'avez plus à implémenter la sécurité dans les applications Access en créant des schémas et tables puis en ajoutant des utilisateurs. Avec les listes SharePoint, vous pouvez utiliser des restrictions de sécurité par lesquelles les utilisateurs voient seulement ce qu'ils sont autorisés à voir. Cette option est intégrée dès le départ à SharePoint. En outre, s'il existe des composants de la base de données que vous ne voulez pas mettre dans SharePoint, vous n'avez pas à les déplacer.
SharePoint propose un modèle de sécurité granuleux et basé sur les rôles. Lorsque vous déterminez comment et où déplacer une base de données, vous devriez concevoir le site et la sécurité avant la migration. Il sera alors plus facile de définir et tester des autorisations. En outre, il y aura moins de problèmes de migration et la base de données Access fonctionnera plus efficacement.

Intégrité référentielle
Je ne terminerai pas sans au moins mentionner le sujet de l'intégrité référentielle. Le fait est que SharePoint n'applique pas l'intégrité référentielle comme le fait Access. Beaucoup d'installations sont normalisées à un certain niveau. Ceci doit être pris en compte pour que ces bases de données Access d'importance stratégique fonctionnent. Fort heureusement, il y a quelques solutions de contournement qui peuvent être considérées comme des améliorations du système existant.
Auparavant, je vous avais expliqué que lorsque vous transférez une base de données à SharePoint et que vous y déplacez des tables enfant, vous serez également obligé de déplacer les tables parent. De plus, les champs de recherche sont utilisés lorsque SharePoint reconnaît que le choix d'un champ est basé sur une autre table. Par exemple, supposons qu'un client ait été choisi et qu'une commande ait été placée dans la base de données de Northwind Traders. Si ces tables étaient transférées vers SharePoint, le champ du client serait une recherche dans la liste Commande.
Et qu'en est-il des mises à jour/suppressions en cascade et d'autres opérations plus compliquées ? C'est là que SharePoint et ses flux de travail devraient être considérés comme solution potentielle. Revenons à la base de données de Northwind Traders et supposons qu'un client appelle et annule une commande existante, ce qui déclenche alors plusieurs actions : l'inventaire doit être suspendu, les fournisseurs doivent être avertis, l'employé attaché à la commande doit rester en contact avec le client, l'expédition doit être annulée et les comptes doivent être mis à jour. Tout cela représente beaucoup de choses à déplacer et à coordonner.
Avec SharePoint Designer, il est possible de créer un flux de travail dans SharePoint qui effectue toutes les tâches mentionnées ci-dessus dès que l'état de la commande est modifié. Il existe 22 flux de travail prêts à l'emploi qui peuvent être utilisés ensemble pour effectuer des centaines d'opérations. SharePoint Designer est l'outil qu'il vous faut pour personnaliser votre site et créer des flux de travail.
En outre, l'utilisation de SharePoint Designer pour créer des flux de travail nécessite des compétences qui sont familières à tous ceux qui savent déjà « programmer » dans Access. Cela signifie que les utilisateurs qui créent des applications Access peuvent utiliser et améliorer ces compétences et créer des flux de travail sans trop d'efforts. Aucune écriture de code n'est nécessaire lorsque vous utilisez SharePoint Designer pour les flux de travail dont le déploiement est, d'ailleurs, très simple.

Peter Serzo est ingénieur sénior chez CDW Berbee. Il conçoit des solutions SharePoint pour des entreprises du monde entier.


 Le mot du r&#233;dacteur en chef: Aux amis, anciens comme nouveaux
Le mot du rédacteur en chef
Aux amis, anciens comme nouveaux

Nous devons commencer ce mois sur une note douce-amère. L'heure est malheureusement venue pour nous de dire au revoir à Joseph Davy, qui conclut dans le numéro de ce mois-ci de TechNet Magazine sa rubrique « Le petit câbleur ». Nous avons été extrêmement chanceux d'avoir un expert du calibre de Joseph pour nous informer sur une myriade de points de l'utilisation des réseaux avec Windows. Joseph a hélas récemment accepté la responsabilité d'un nouveau rôle au sein de Microsoft, et sa rubrique mensuelle est une tâche qu'il doit laisser derrière lui. Nous tenons tous, à TechNet Magazine, à le remercier pour ses formidables contributions au fil des ans et lui souhaiter la plus grande réussite dans ses nouvelles responsabilités.
Aussi tristes que nous soyons de voir partir Le petit câbleur, le spectacle continue. Une nouvelle rubrique intitulée « Au cœur de Sharepoint » fera donc ses débuts dans notre prochain numéro. Au cours de l'année écoulée, nous avons reçu une quantité incroyable de demandes d'informations supplémentaires et d'aide sur SharePoint. Comme SharePoint est une technologie passionnante à la croissance rapide, nous pensons qu'aucun autre sujet ne mérite autant une rubrique mensuelle. Pav Cherny l'inaugurera, en commençant par le début et un aperçu architecturel de l'infrastructure SharePoint. Au cours des mois à venir, nous aborderons la sécurité, la disponibilité, les performances, le dépannage et bien d'autres aspects encore. Si vous souhaitez voir aborder des points particuliers de SharePoint, n'hésitez pas à nous le faire savoir ! Envoyez un message électronique à tnmag@microsoft.com.
Nous souhaitons également étendre nos remerciements à deux de nos rédacteurs senior, Terrence Dorsey et Nancy Michell. Terry et Nancy nous ont accompagnés depuis le tout début, en partageant avec nous un talent et une expérience considérables qui ont contribué à faire de TechNet Magazine la publication qu'elle est aujourd'hui. À partir de ce numéro, Terry et Nancy se consacreront entièrement à notre publication sœur, MSDN Magazine. Deux de nos autres éditeurs senior extrêmement talentueux, Matthew Graven et Sharon Terdeman, feront en contrepartie leurs adieux à leurs tâches au sein de MSDN Magazine pour se consacrer entièrement à TechNet Magazine. Heureusement, Terry et Nancy ne seront pas loin, et nous avons toujours l'intention de compter sur leur perspicacité et leur expertise au cours de l'évolution de TechNet Magazine.
Ce réaménagement effectué, je vous invite à apprécier le numéro de ce mois-ci. Principalement consacré au lancement proche de SQL Server 2008, il abordera une variété de nouvelles fonctionnalités qui vous aideront à stocker, protéger, gérer et tirer parti de vos données, qui, vu leur quantité et leur étendue toujours accrues, constituent sans aucun doute vos actifs métier les plus stratégiques. —Joshua Hoffman


 Lettres: Les lecteurs ont la parole
Lettres
Les lecteurs ont la parole

Hôtes forts et faibles
L'article du Petit câbleur du mois de septembre 2007 (technetmagazine.com/issues/2007/09/CableGuy), « Modèles d'hôte fort et faible, » affirmait qu'il était possible d'activer et désactiver l'utilisation de l'hôte faible, mais il n'indiquait pas comment le faire. S'agit-il simplement de l'activation ou de la désactivation du pare-feu ou de la définition d'un registre de paramètre ? Y a-t-il un paramètre de registre associé à cette opération ?
En outre, la configuration d'accès locale nécessite deux éléments d'information : l'adresse IP et le masque IP. Pourquoi Microsoft considère-t-il qu'une configuration qui ne contient pas le paramètre de passerelle facultatif n'est pas valide ?
—Milt B.
Vous pouvez configurer un comportement d'hôte fort ou faible dans Windows Vista® et Windows Server® 2008 avec les commandes indiquées dans la figure (publiées pour la première fois dans le numéro de septembre 2007). Il n'y a aucune entrée de registre correspondante. Vous ne pouvez pas configurer de comportement d'hôte fort ou faible dans Windows® XP et Windows Server 2003. IPv4 est un hôte faible uniquement. IPv6 est un hôte fort uniquement.
Quant à votre deuxième question, d'après nous, la configuration d'IPv4 ou IPv6 sur une interface ne nécessite pas la configuration d'une passerelle ou d'un routeur par défaut, que ce soit par l'intermédiaire de l'interface utilisateur ou de la ligne de commande.


 Bo&#238;te &#224; outils: Nouveaux produits pour les professionnels de l’informatique
Boîte à outils
Nouveaux produits pour les professionnels de l’informatique
Greg Steen

Gérez plusieurs moniteurs
UltraMon
realtimesoft.com
Avec la baisse des prix des dalles LCD, il semble que la plupart des administrateurs système possèdent au moins deux, sinon plus, moniteurs connectés à leur poste de travail pour les aider à garder un œil sur les différents tableaux de bord administratifs. (Si ce n'est pas votre cas, je vous le recommande vivement car cela facilite beaucoup la vie !) Mais avec l'ajout d'un ou deux autres moniteurs, vous commencez également à utiliser votre souris plus souvent, ce qui peut vraiment vous ralentir. Un bon utilitaire de gestion d'affichage, simple d'utilisation avec des raccourcis clavier, peut être d'une grande aide. UltraMon de Realtime Soft, un utilitaire qui offre la prise en charge de Windows® 98 jusqu'à Windows Vista®, notamment les éditions 32 bits et 64 bits, compte parmi les outils qui méritent notre attention.
Lorsque vous démarrerez UltraMon pour la première fois, vous remarquerez probablement les deux petites icônes dans le coin de chacune des fenêtres de votre application. La première icône permet d'étendre rapidement la fenêtre d'application sur plusieurs moniteurs et la deuxième icône transporte l'application sur le moniteur opposé. Vous remarquerez également que la barre des tâches est étendue sur chacun de vos moniteurs et contient les applications actives pour ce moniteur particulier. Cela signifie que vous ne devez pas à revenir à votre moniteur principal pour étendre une application et vous savez tout de suite où cette application s'affiche lorsqu'elle est agrandie et réduite.
Sur chacun de vos raccourcis d'application, un nouvel onglet UltraMon vous permet de définir sur quel moniteur cette application doit démarrer et à quelle position, donc vous pouvez, par exemple, toujours afficher Microsoft® Outlook® sur votre fenêtre gauche et Internet Explorer® sur la droite. En tant qu'informaticien professionnel, vous êtes susceptible de vous connecter à distance à votre poste de travail à partir d'emplacements différents tels qu'un portable ou votre ordinateur personnel à domicile. Sachez que chacune de ces connexions distantes nécessite probablement une légère modification du Bureau et de la résolution de votre écran.
Heureusement, UltraMon prend également en charge les profils d'affichage, qui vous permettent de modifier rapidement les affichages personnalisés sur vos moniteurs. Cette fonctionnalité est extrêmement utile si vous partagez votre machine avec d'autres personnes qui veulent leur propre affichage personnalisé ou si vous souhaitez modifier votre affichage en fonction de vos activités.
Si vous exécutez Windows 2000 ou Windows XP, vous pouvez également activer une fonctionnalité de « mise en miroir » qui est parfaite pour les présentations, car elle permet à votre moniteur principal de s'exécuter à une résolution plus élevée que votre moniteur de présentation mais reflète toujours les activités d'application sur les deux écrans. Si vous n'avez pas encore mis à niveau vers Windows Vista, l'application peut également afficher votre écran sur plusieurs moniteurs (ce que fait Windows Vista par défaut).
Les fonctionnalités d'affichage, telles que le raccourci vers l'écran Paramètres d'affichage, la possibilité de définir et de modifier rapidement le moniteur principal sur votre système et celle de basculer vers un profil d'affichage différent, sont quelques-unes des activités courantes accessibles via l'icône de barre d'état système d'UltraMon. De là, vous pouvez également lancer la fenêtre UltraMon Options, qui vous permet de personnaliser votre « Smart Taskbar », de définir des raccourcis clavier pour déplacer et modifier les fenêtres et amener votre souris à un point de focalisation spécifié, entre autres choses.

Prix : À partir de 39,95 $ pour une licence unique.
La fenêtre d'options d'UltraMon vous permet de définir des raccourcis clavier et de gérer votre Smart Taskbar
La fenêtre d'options d'UltraMon vous permet de définir des raccourcis clavier et de gérer votre Smart Taskbar

Critique
Microsoft SQL Server 2005 Analysis Services
informit.com
Posséder de nombreuses données sur votre clientèle est une chose, mais comprendre et manipuler ces données pour en retirer des statistiques utiles et détaillées sur ces clients en est une autre. Pour obtenir ces vues et projections calculées, vous avez besoin d'une solution d'analyse décisionnelle dynamique et puissante. Une partie de la réponse de Microsoft dans le domaine de l'analyse décisionnelle et du traitement analytique en ligne (OLAP) repose sur SQL Server® 2005 Analysis Services. Le livre Microsoft SQL Server 2005 Analysis Services vous guidera à tous les niveaux de l'utilisation de cette solution.
Si vous envisagez un nouveau déploiement d'exploration de données, si vous effectuez une mise à niveau d'Analysis Services 2000 vers Analysis Services 2005 ou si vous êtes un administrateur de base de données intéressé par ce que ces outils peuvent apporter à votre organisation ou à vous-même, ce livre de Py Bateman, Alexander Berger, Irina Gorbach et Edward Melomed est pour vous. Au lieu de s'attarder dans les limbes des approches théoriques de l'analyse décisionnelle, cet ouvrage offre une vision approfondie et détaillée de l'utilisation, du développement, du déploiement et de la gestion d'Analysis Services dans le monde réel. De nombreux exemples qu'il fournit s'appuient sur Food Mart 2005, un exemple de base de données fourni avec le logiciel, pour que vous puissiez commencer rapidement à expérimenter dans votre propre environnement de test.
La section d'introduction du livre vous présente les nouveautés de la version 2005, notamment l'architecture client-serveur avec la communication XMLA (XML for Analysis) des services Web, le modèle UDM (Unified Dimensional Model) et les améliorations de l'évolutivité dans la nouvelle version. Vous bénéficierez également d'une présentation de l'exemple de base de données Food Mart et des principes fondamentaux des bases de données multidimensionnelles. Ensuite, vous explorerez la création de modèles de données en apprenant le langage de définition de données (LDD) XML, les attributs et les hiérarchies de dimension ainsi que les cubes et l'analyse multidimensionnelle. Vous obtiendrez également une introduction à l'espace de travail de conception et de développement de l'analyse décisionnelle professionnelle d'Analysis Services 2005 avec Business Intelligence Development Studio.
Une fois que vous aurez examiné ces concepts, vous passerez à la manipulation de données via les expressions multidimensionnelles (MDX). Outre découvrir comment interroger les données avec MDX, vous apprendrez également à utiliser les fonctions MDX ainsi que les propriétés de membre et de cellule, à traiter les ensembles vides et les valeurs null, les sous-sélections et les sous-cubes. Vous apprendrez à créer et utiliser les calculs MDX basés sur les cubes et à étendre vos requêtes avec des procédures stockées. L'ouvrage étudie ensuite les indicateurs de performances clés (KPI), les extractions et les tableaux de bord, qui peuvent tous afficher des détails sur les divers aspects de la croissance, des métriques et des cibles des entreprises.
La partie suivante du livre vous expliquera le processus d'extraction, de transformation et de chargement (ETL) de vos données, en vous montrant non seulement comment amener des données dans votre système mais également comment optimiser votre conception d'agrégation et utiliser la mise en cache dynamique pour augmenter les performances. Ici, aussi, vous travaillerez avec le modèle de données physique de vos cubes et dimensions, et vous verrez comment le traitement de chacun fonctionne avec 2005 Analysis Services. De plus, vous apprendrez à faire évoluer votre déploiement pour faire face aux besoins de votre entreprise, en abordant l'équilibrage de la charge réseau, les batteries OLAP, les groupes de mesures et de dimension liés et le traitement des partitions distantes.
Le livre examine ensuite tous les détails de l'exécution des requêtes pour vous apporter une meilleure compréhension des opérations sous-jacentes afin de vous aider à optimiser les performances de votre application. Il explore l'accès à vos données dans une perspective client et les nombreuses options disponibles pour ce faire, comme XMLA, ADOMD.net et AMO (Analysis Management Objects). Vous devez découvrir le « codeur interne » de cette section pour voir comment utiliser Visual Studio et les IDE d'analyse décisionnelle afin de créer vos propres applications de magasins de données personnalisées.
La dernière section étudie la gestion de votre installation Analysis Services, notamment l'utilisation de l'outil de suivi, la boîte noire et SQL Server Profiler pour surveiller les performances et l'intégrité du système. En outre, plusieurs options vous sont présentées pour la sauvegarde et la restauration de votre déploiement avec des sections sur l'utilisation d'une commande DDL pour sauvegarder votre base de données, l'automatisation via l'Agent SQL Server ou SQL Server Integration Services (SSIS) et les techniques pour récupérer des données perdues ou endommagées. Globalement, ce guide de SQL Server 2005 Analysis Services est un ouvrage à large spectre exhaustif.

Prix : $59.99.

Diagnostic des problèmes de base de données
ApexSQL Audit
apexsql.com/sql_tools_audit.asp
Vous savez probablement que la première étape du dépannage d'un problème ou de la détection d'une faille potentielle consiste à rassembler les informations pertinentes concernant l'événement qui a entraîné le problème. Si vous êtes impliqué dans le support utilisateur, vous avez probablement entendu de nombreuses plaintes du genre « le système a perdu les données ». ApexSQL Audit d'ApexSQL, qui prend totalement en charge SQL Server des versions 7.0 à 2005, est un outil qui peut vous aider à identifier rapidement les problèmes liés aux bases de données SQL Server.
Comme j'imagine que vous l'avez déduit de son nom, cette application détecte l'activité dans les bases de données que vous spécifiez et vous permet de créer des rapports personnalisés sur le suivi d'audit en vue de les analyser. Les entrées d'audit sont ajoutées via des déclencheurs SQL et stockées dans un schéma généré automatiquement. Vous pouvez choisir de stocker les informations d'audit dans la même base de données que les données que vous affichez ou dans leur propre base de données pour les isoler.
L'installation (et la suppression) du schéma d'audit (ou architecture, comme on l'appelle) est une opération simple via l'interface utilisateur graphique. La configuration d'un plan d'audit pour une base de données est relativement simple : vous choisissez la base de données, sélectionnez les tables et les champs à surveiller puis cliquez sur le bouton pour lancer les déclencheurs.
L'application vous permet de modifier les modèles de déclencheur pour votre projet et je trouve vraiment intéressant que l'éditeur de modèle fournisse des fonctionnalités de type IntelliSense® pour le modèle d'objet d'audit, ce qui facilite la personnalisation de l'heure d'activation du déclencheur et des informations qui seront stockées. Une autre fonctionnalité intéressante vous permet de référencer facilement les tables de recherche pour que les informations d'audit soient compréhensibles, au lieu d'être simplement une série d'ID opaques. Vous pouvez également mapper les noms des champs affichés pour auditer ces noms si vous voulez mapper des colonnes.
Une fois que vous êtes prêt, l'interface utilisateur peut vous donner une vue rapide des déclencheurs d'audit actuels appliqués, et il suffit d'un clic pour activer et désactiver des déclencheurs spécifiques en cas de besoin. Vous pouvez également examiner de quelle couverture d'audit vous disposez avec la vue pratique de l'interface sous forme de table.
Comme vous le savez, les informations d'audit ont tendance à être complexes et un plan de gestion des informations doit être mis en place pour archiver et élaguer les bases de données d'audit. ApexSQL Audit vous offre un outil de gestion des données qui vous permet de supprimer n'importe quelle information d'un clic, de spécifier une série de critères puis de supprimer ou de planifier une suppression basée sur des critères.
Les tâches planifiées sont automatiquement créées sous forme de packages de services DTS (Data Transformation Services) et programmées par l'agent SQL. Bien sûr, posséder toutes les informations d'audit est une chose, mais pouvoir les utiliser en est une autre. Heureusement, ApexSQL Audit possède un composant de rapport puissant qui vous permet de générer des vues filtrées personnalisées des données d'audit atomiques et des vues agrégées de ces données d'audit. Une fois que vous avez généré le rapport, vous pouvez l'imprimer facilement ou exporter le résultat vers HTML, Microsoft Excel ou un fichier texte.

Prix : À partir de 599 $.
Les tables de recherche d'ApexSQL Audit fournissent de nombreuses informations d'audit
Les tables de recherche d'ApexSQL Audit fournissent de nombreuses informations d'audit

Automatisation des rappels d'expiration du mot de passe
Password Reminder PRO v1.4
sysoptools.com/password-reminder-pro.html
Avez-vous remarqué un afflux d'appels au support technique lorsque votre stratégie d'expiration du mot de passe touche un groupe de votre organisation ? Si c'est le cas, je vous recommande de jeter un œil sur Password Reminder PRO de SysOp Tools. Cet outil simple s'intègre à Active Directory® et avertit vos utilisateurs que leurs comptes ou les mots de passe expirent bientôt.
Vous pouvez définir trois rappels différents, chacun avec un modèle de message électronique textuel ou HTML formaté distinct. Vous pouvez également configurer une durée de vie maximale du mot de passe pour le même nombre de jours que votre configuration Active Directory et l'heure à laquelle les rappels doivent être envoyés pour ne pas entrer en conflit avec les heures de pointe. Le mode de test vous permet de prévisualiser les effets sans affecter vos utilisateurs finaux pour vous assurer de tout configurer correctement.
L'utilitaire possède également une console de rapport, qui affiche une grille de données des différentes classes d'utilisateurs : les comptes qui expirent, les utilisateurs inactifs, les nouveaux comptes, les comptes désactivés, etc. À partir de cette console de rapport, vous pouvez exporter toute les informations vers un fichier XLS pour les consulter plus tard. Pour une vérification supplémentaire des messages électroniques envoyés, Password Reminder PRO envoie un rapport quotidien indiquant quels rappels ont été envoyés à quels utilisateurs.

Prix : À partir de 249 $ pour une licence de 100 utilisateurs.
Password Reminder PRO affiche un aperçu des configurations avant le déploiement
Password Reminder PRO affiche un aperçu des configurations avant le déploiement

Dépannage à distance simplifié
UltraVnc SC
uvnc.com/pchelpware/sc
La façon la plus simple de résoudre un problème ou de guider un utilisateur tout au long d'un processus est généralement d'être physiquement installé à l'ordinateur. Mais c'est souvent impossible de nos jours, en raison de la dispersion géographique des entreprises. Remote Desktop Connection et Remote Assistance, les outils intégrés de Windows peuvent vous aider à vous connecter à certains ordinateurs de votre environnement. Mais pour couvrir toutes les bases, vous souhaiterez peut-être jeter un œil sur l'outil gratuit UltraVNC SC des créateurs du projet principal UltraVNC.
Comme son grand frère, UltraVNC SC vous permet d'afficher et de contrôler une machine distante. Cependant, cette version est un minuscule serveur UltraVNC de166 Ko que vous configurez et envoyez à votre utilisateur final. Il ne nécessite aucune entrée de registre, ne s'exécute pas en tant que service et n'a pas besoin de programme d'installation, donc il n'y a aucune installation ou configuration pour l'utilisateur final. Il suffit que l'utilisateur double-clique sur l'exécutable pour que le serveur mini-VNC s'exécute et vous pouvez vous connecter à la machine à dépanner et à administrer, selon les besoins.
Bien que le serveur standard UltraVNC prenne en charge les transferts de fichiers et de répertoires, UltraVNC SC ne prend actuellement en charge que le transfert de fichiers. En termes de sécurité, la communication est chiffrée jusqu'au niveau de votre API Crypto de Microsoft (40 ou 128 bits). Le mini-serveur ne permet pas de connexions entrantes, il n'est instancié que par l'utilisateur final et ne peut se connecter qu'à la machine spécifiée dans votre configuration avant d'être envoyé à votre utilisateur final.
Pour créer la visionneuse personnalisée, créez quelques fichiers de configuration de texte et des graphiques, puis exécutez un fichier de commandes à partir de l'installation d'un autre module complémentaire du projet appelé PCHelpware pour générer l'exécutable. La documentation n'est pas parfaite, mais elle vous indique comment appliquer la procédure relativement simple. Enfin, l'application est automatiquement désinstallée lorsque la connexion est fermée après utilisation, donc elle ne laisse aucune trace ou faille de sécurité.

Prix : Gratuit.

Greg Steen est un professionnel de l’informatique, dynamique et enthousiaste. Il est constamment à la recherche d’outils innovants destinés à faciliter les opérations, l'assurance qualité et le développement pour les professionnels de l’informatique.


 Forum aux questions sur SQL: Expansion des bases de donn&#233;es, utilisation d'IFilters et connexion &#224; distance
Forum aux questions sur SQL
Expansion des bases de données, utilisation d'IFilters et connexion à distance
Édité par Matthew Graven

Conseil : Effacez le cache
Vous êtes vous jamais demandé pourquoi une procédure stockée peut fonctionner correctement dans l'environnement de test mais fonctionne mal lorsqu'elle est déployée sur le serveur SQL de production ? Il peut s'agir d'un problème lié au cache. Avant de déployer des procédures stockées sur votre environnement de production, testez les procédures dans l'environnement de test après avoir effacé les plans de requête mis en mémoire cache pour savoir comment votre procédure stockée s'exécutera dans un environnement de cache « à froid ». Voici quelques points pratiques à garder à l'esprit.
Pour effacer le cache de procédure sur SQL Server :
DBCC FREEPROCCACHE
Go
Effectuez une requête pour répertorier tous les plans mis en mémoire cache :
Select * from sys.dm_exec_cached_plans
Go

Q J'ai une base de données qui a un trafic important pendant la journée et je ne veux pas utiliser la croissance automatique car cela peut potentiellement entraîner des délais d'expiration si SQL Server® décide d'effectuer cette opération pendant les heures de pointe. J'aimerais implémenter une tâche périodique pour étendre le fichier de base de données d'un pourcentage spécifique de l'espace utilisé. Comment faire ?
R La croissance de fichier est une opération E/S consommant beaucoup d'espace disque et si SQL Server doit attendre qu'un fichier de données ou un fichier journal se développe, vous pourriez certainement constater que cela nuit aux performances et aux temps de réponse. L'incrément de croissance par défaut est 1 Mo pour les fichiers de données et 10 % pour les fichiers journaux, qui peuvent être des incréments de croissance insuffisants pour les systèmes très actifs. En outre, l'utilisation de la croissance automatique peut entraîner la fragmentation du disque parce que les fichiers de données ou les fichiers journaux ne sont pas contigus sur le disque ; cela signifie que les temps de réponse peuvent être plus longs que nécessaires dans la mesure où les données sont physiquement dispersées sur le disque.
La clé des bonnes performances est d'allouer de façon proactive un espace de fichier suffisant pour les fichiers de données et les fichiers journaux. Cela nécessite souvent une analyse de tendance et une prévision de croissance mais cela se traduit généralement par de meilleures performances parce que les fichiers seront contigus sur le disque et évitent le coût d'E/S requis par la croissance automatique pendant les heures de pointe. La croissance automatique doit généralement rester activée puisqu'un fichier de données ou un fichier journal complets empêcheront totalement l'accès à la base de données. Mais gardez à l'esprit que la croissance automatique doit être considérée comme un filet de sécurité au lieu d'une fonctionnalité de gestion des bases de données.
La planification régulière d'expansion des fichiers de base de données doit être évitée puisque celle-ci peut également entraîner la présence de fichiers non contigus sur le disque et des performances réduites. Une surveillance proactive peut être effectuée en exécutant régulièrement un script pour déterminer le pourcentage d'espace libre pour chaque base de données (exécutée par une tâche de l'Agent SQL) puis en prenant une mesure (telle que l'envoi d'une alerte par courrier électronique via le la messagerie de base de données). Le code de la figure offre un exemple de script qui montre comment rassembler le pourcentage d'espace libre pour la base de données actuelle.
Une fois qu'une alerte a été générée, vous pouvez écrire le script de la croissance de fichier unique avec la commande ALTER DATABASE et vous pouvez utiliser une tâche de l'Agent SQL pour planifier cette action afin qu'elle ait lieu en dehors des heures de pointe. Essayez d'étendre le fichier à une taille qui sera suffisante dans l'avenir prévisible pour éviter les futures petites expansions incrémentielles des fichiers. Il est également important de s'assurer que la réduction automatique n'est pas activée dans la base de données car cela peut réduire inutilement la base de données ou accroître le nombre de cycles.
—Justin Langford
Déterminer l'espace disponible dans une base de données
-- Script to gather size, free space and
-- calculate % free space for current
-- USER database
DECLARE @size DEC(15,2)
DECLARE @free DEC(15,2)
DECLARE @result DEC(15,2)

SELECT @size = SUM(size)*1.0/128
FROM sys.database_files

SELECT @free =
(SUM(unallocated_extent_page_count)*1.0/128)
FROM sys.dm_db_file_space_usage

PRINT 'DB Size ' + CONVERT(VARCHAR(15), @size)
PRINT 'Free Space ' +
CONVERT(VARCHAR(15), @free)

SELECT @result = (@free/@size)*100

PRINT '% Free Space ' +
CONVERT(VARCHAR(15), @result)

Q Mon entreprise stocke différents formats de fichiers dans notre base de données à l'aide des colonnes varbinary et image. J'ai entendu dire que SQL Server a intégré une fonctionnalité qui me permet de réaliser une recherche sur ces différents formats de fichier. Comment puis-je configurer SQL Server pour effectuer cette opération ?
R Cette fonctionnalité est intégrée dans le service d'indexation de texte intégral. Le service fournit la flexibilité nécessaire pour utiliser les interfaces IFilter, permettant ainsi de développer et de charger des filtres qui peuvent extraire des informations utiles à partir de données propriétaires. Ces IFilters sont également utilisées pour d'autres produits, tels que Microsoft® Office SharePoint® Server, pour recueillir des informations sur les fichiers analysés.
Un IFilter est fourni par le créateur du format de fichier ou par les fournisseurs tiers. SQL Server contient déjà des IFilters qui sont chargés lorsque FulltextService (FTS) est installé (ceux-ci incluent des filtres pour les fichiers HTML et DOC). Cependant, d'autres IFilters peuvent être ajoutés en fonction des besoins. Par exemple, les filtres pour Adobe PDF peuvent être téléchargés sur le site Web d'Adobe, et un nouveau pack de filtres pour les extensions Office System 2007 a été publié à la fin de 2007. Notez que vous devez savoir de quelle version d'IFilter vous avez besoin. Par exemple, un IFilter conçu pour les systèmes 32 bits ne fonctionnera pas avec les installations 64 bits de SQL Server.
Une fois que vous avez exécuté le package d'installation sur le client, l'IFilter sera généralement enregistré dans l'écosystème du système d'exploitation. Lorsque les bits sont enregistrés dans le système d'exploitation, vous devez exécuter quelques opérations pour que FTS soit capable de charger les filtres. Après avoir démarré votre outil d'exécution de requête, lancez les commandes suivantes :
  • sp_fulltext_service 'load_os_resources',1 (Cette instruction permettra à FTS de charger les bits enregistrés pour le traitement, notamment les composants tels que les séparateurs de mots et les analyseurs morphologiques).
  • sp_fulltext_service 'verify_signature',0. (Ceci contournera SQL Server pour vérifier si les filtres utilisés sont signés, étant donné que beaucoup de fournisseurs ne signent pas leurs filtres conformément à la norme).
  • Redémarrez l'instance de SQL Server et l'instance de FTS.
  • Créez votre index de texte intégral sur les colonnes ayant la colonne binaire comme contenu devant être analysé par l'IFilter et la colonne d'extension (c'est-à-dire la colonne avec le type d'extension, tel que DOCX) pour que SQL Server choisisse le filtre vers lequel rediriger le contenu.
Vous trouverez plus d'informations à l'adresse go.microsoft.com/?linkid=7912971.
—Jens Suessmeyer

Q Je ne parviens pas à me connecter à un serveur SQL distant. Dois-je configurer le pare-feu sur ma machine client ou serveur ?
Une connexion distante à SQL Server 2005 peut échouer pour de nombreuses raisons, mais la configuration de pare-feu est un des problèmes les plus courants. Le blog SQL Protocols (blogs.msdn.com/sql_protocols) est une ressource très utile qui regorge d'informations sur l'initiation d'une connexion SQL.
L'installation par défaut de SQL Server 2005 ne permet pas les connexions distantes. À partir de la machine exécutant SQL, dans le menu Démarrer, sélectionnez Microsoft SQL Server 2005 | Outils de configuration | Outil Configuration de la surface d'exposition SQL Server. Cliquez sur Configuration de la surface d'exposition pour les services et les connexions, sélectionnez Connexions distantes puis la case d'option « Utilisation à la fois de TCP/IP et de canaux nommés ». Vous devez ensuite redémarrer SQL pour que la modification entre en vigueur.
Par défaut, SQL Server utilise le port 1433. Pour vérifier si le port est ouvert, utilisez la commande telnet suivante, en remplaçant <ipaddress> par la véritable adresse IP de la machine exécutant SQL Server :
telnet <ipaddress> 1433
Si vous obtenez une réponse d'échec de connexion, ouvrez le Pare-feu Windows®, cliquez sur l'onglet Exceptions, sélectionnez Ajouter un port et ajoutez le port TCP 1433. Telnet doit réussir maintenant. (Notez que Telnet n'est pas installé par défaut sur Windows Vista®.)
—Rick Anderson
Merci aux experts SQL Server suivants d'avoir contribué à cet article :
Justin Langford qui travaille pour Coeo Ltd., est un intégrateur système et un partenaire Microsoft Certified Partner basé en Angleterre. Jens Suessmeyer est un consultant de base de données chez Microsoft en Allemagne. Rick Anderson travaille dans l'équipe Developer User Education chez Microsoft. Saleem Hakani est ingénieur de base de données senior et responsable de SQL Server Community chez Microsoft.


 Coup de projecteur sur les utilitaires: Outil d'analyse de capacit&#233; Web
Coup de projecteur sur les utilitaires
Outil d'analyse de capacité Web
Greg Steen

Les journaux Web et l'analyse de trafic peuvent vous donner une idée du type de trafic que vous pouvez prévoir avec le temps, mais comment pouvez-vous effectivement déterminer les capacités de traitement de votre infrastructure ? Pour le savoir, il vous faut un outil capable de pousser votre infrastructure et son application jusqu'au bout. Cet outil est l'outil gratuit WCAT (Web Capacity Analysis Tool), utilitaire de génération de charge léger qui lit les requêtes HTTP scriptées sur un serveur Web (ou une batterie de serveurs à charge équilibrée) tout en rassemblant des statistiques de performances pour une analyse ultérieure. La dernière version (6.3.1 au moment où nous rédigeons cet article) est disponible pour les systèmes Windows x86 et x64 (x86 : iis.net/downloads/1466/ItemPermaLink.ashx; x64 : iis.net/downloads/1467/ItemPermaLink.ashx) et prend en charge les réseaux IPv6. En outre, WCAT est multithreads et prend en charge plusieurs clients de test de charge contrôlés depuis une seule source, ce qui vous permet de simuler des milliers d'utilisateurs simultanés.
Cet utilitaire vous permet de transformer vos vieux ordinateurs en clients test et chacun de ces clients peut créer plusieurs clients virtuels (le nombre maximal dépendant des cartes réseau et autre matériel de l'ordinateur client). Vous pouvez choisir des requêtes HTTP 1.0 ou HTTP 1.1, avec ou sans SSL. Et, si votre scénario de test l'exige, vous pouvez utiliser une authentification de base ou NTLM scriptée pour avoir accès aux zones spéciales de votre site. (Si votre site utilise une authentification par cookie, formulaire ou session, vous pouvez créer la bonne requête GET ou POST pour authentifier votre utilisateur de test). WCAT gère également n'importe quel cookie que votre site peut définir, ce qui permet de conserver les informations sur les profils et les sessions.
WCAT peut vous aider à tester les limites de votre infrastructure de site Web
WCAT peut vous aider à tester les limites de votre infrastructure de site Web
WCAT est accompagné d'un remarquable guide de l'utilisateur qui m'a aidé à créer rapidement une application de console Microsoft® .NET Framework et à produire un script client test basé sur les données du trafic des utilisateurs de l'historique d'audit du trafic des sites, ce qui m'a permis de simuler le trafic réel sur une nouvelle base de code avant le déploiement. Et, si votre personnel compte un programmeur C, vous pouvez lui demander de créer des fonctions personnalisées et des gestionnaires de réponse que vos fichiers de scénario peuvent appeler pour adapter les fonctionnalités de l'outil à votre environnement.
Pour utiliser WCAT, vous devez configurer deux fichiers, un fichier de contrôleur qui contient les paramètres de test généraux tels que le nombre de clients, le nombre de clients virtuels par client, les compteurs de performances à surveiller et le serveur Web sur lequel vous testez et un fichier de scénario qui contient le scénario de test, les paramètres de requête par défaut et toute référence à des fonctions et bibliothèques personnalisées.
L'application enregistre les résultats de test sur un fichier XML auquel vous pouvez appliquer la feuille de style XSL incluse pour obtenir une tabulation organisée des résultats lorsqu'ils sont affichés dans Internet Explorer®. Le rapport contient des informations récapitulatives telles que le nombre de transactions exécutées, les changements de contexte qui se sont produits, le pourcentage d'utilisation des UC (de toutes les UC) et le nombre total d'erreurs rencontrées. Vous obtenez également une section affichant les résultats des compteurs de performances que vous aviez configurés dans le fichier de paramètres (voir un exemple sur les captures d'écran), une analyse des temps de réponse, un rapport des statistiques par transaction, une section contenant des détails sur chaque client et des informations concernant la manière dont votre installation de test a été configurée. De plus, vous verrez la configuration matérielle du serveur Web distant que vous testez ainsi qu'une liste de toutes les mises à jour qui ont été installées. Il s'agit là d'un moyen très utile de déterminer et vérifier si un correctif peut avoir un effet sur les performances de votre site.
En résumé, si vous gérez une infrastructure de site Web, l'utilitaire WCAT vous aidera à comprendre le comportement de votre plate-forme lorsqu'elle est fortement sollicitée avant la prochaine grande publication de code.

Greg Steen est un professionnel de l’informatique, dynamique et enthousiaste. Il est constamment à la recherche d’outils innovants destinés à faciliter les opérations, l'assurance qualité et le développement pour les professionnels de l’informatique.


 Le petit c&#226;bleur: D&#233;pannage de la contrainte de mise en conformit&#233; NAP
Le petit câbleur
Dépannage de la contrainte de mise en conformité NAP
Joseph Davies

La nouvelle plate-forme de protection d'accès réseau (NAP) intégrée à Windows Vista, Windows Server 2008 et Windows XP SP3 contribue à protéger les réseaux intranet privés en garantissant la conformité avec les exigences d’intégrité du système. Les composants clés de la protection d'accès réseau sont les clients NAP, les points de contrainte de mise en conformité NAP et les serveurs de stratégie de contrôle d'intégrité NAP.
Un client NAP est un ordinateur qui peut fournir des informations d'état d'intégrité pour l'évaluation de l'intégrité d'un système. Un point de contrainte de mise en conformité NAP est un ordinateur ou un périphérique d'accès réseau qui utilise NAP ou peut être utilisé avec NAP pour exiger l'évaluation de l'état d'intégrité d'un client NAP et fournir un accès réseau ou une communication restreints. Un serveur de stratégie de contrôle d'intégrité NAP est un ordinateur qui exécute Windows Server® 2008 et le service NPS (Network Policy System) qui enregistre les stratégies d'exigence d'intégrité et exécute les évaluations d'intégrité des clients NAP. Le serveur de stratégie de contrôle d'intégrité NAP et les points de contrainte de mise en conformité NAP échangent des informations d'intégrité de système et des instructions d'accès limité avec le service RADIUS (Remote Authentication Dial-in User Service) et les messages proxy.
Dans cet article, je décris les composants d'une stratégie d'exigence d'intégrité, comment le service NPS traite les demandes d'évaluation NAP entrantes et comment résoudre les problèmes de contrainte de mise en conformité NAP les plus courants.

Stratégies d'exigence d'intégrité
Fonctionnement de l'évaluation d'intégrité NAP
Le service NPS sur le serveur de stratégie de contrôle d'intégrité NAP utilise la procédure suivante pour exécuter une évaluation d'intégrité :
  1. Le service NPS compare le message de demande entrant à son jeu de stratégies de demande de connexion configuré. Pour NAP, le message de demande doit correspondre à une stratégie de demande de connexion qui spécifie que le service NPS exécute l'authentification et l'autorisation localement.
    2. La stratégie de demande de connexion peut également imposer des exigences de connexion. Par exemple, pour la contrainte de mise en conformité 802.1X et VPN, la stratégie de demande de connexion nécessite l'utilisation d'une méthode d'identification basée sur un protocole EAP protégé (PEAP). Si le client qui se connecte n'utilise pas PEAP, la demande de connexion est rejetée.
  2. Le service NPS évalue les informations d'intégrité du message de demande, qui consistent en une déclaration d'intégrité de système (SSoH) contenant les informations d'état d'intégrité. Le service NPS transmet les informations d'état d'intégrité à ses validateurs d’intégrité du système installés, qui renvoient les informations d'évaluation d'intégrité au service NPS.
  3. Le service NPS compare le message de demande et les informations d'évaluation d'intégrité des validateurs d’intégrité du système au jeu de stratégies réseau approprié. Les informations d'évaluation d'intégrité sont comparées à la condition de stratégie de contrôle d'intégrité des stratégies réseau NAP. La condition de stratégie de contrôle d'intégrité spécifie les conditions de conformité ou de non-conformité d'intégrité. Le service NPS applique la première stratégie de réseau correspondante au message de demande.
  4. En fonction de la stratégie réseau NAP correspondante et de ses paramètres NAP associés, le service NPS crée une déclaration de réponse d'intégrité de système (SSoHR). Cette réponse inclut les informations d'évaluation d'intégrité des validateurs d’intégrité du système et indique si le client NAP possède un accès illimité ou restreint et s'il doit tenter automatiquement de mettre son état d'intégrité à jour.
  5. Le service NPS envoie un message de réponse RADIUS contenant la SSoHR au point de contrainte de mise en conformité NAP. Si un accès restreint a été accordé au client, le message de réponse peut également contenir des instructions qui spécifient dans quelle mesure l'accès du client NAP est restreint.
  6. Le point de contrainte de mise en conformité NAP envoie la SSoHR au client NAP.

Une stratégie d'exigence d'intégrité est une combinaison d'une stratégie de demande de connexion, d'une ou plusieurs stratégies réseau, d'une ou plusieurs stratégies de contrôle d'intégrité supplémentaires et des paramètres NAP pour une méthode de contrainte de mise en conformité NAP. Pour créer une stratégie d'exigence d'intégrité, utilisez l'Assistant Configurer la protection d’accès réseau (NAP) dans le composant logiciel enfichable Serveur de stratégie réseau (NPS). (Pour plus d'informations sur le processus d'évaluation, voir l'encadré « Fonctionnement de l'évaluation d'intégrité NAP »)
Stratégies de demande de connexion Il s'agit de jeux de règles hiérarchisés qui permettent au service NPS de déterminer si une demande de connexion entrante doit être traitée localement ou transférée à un autre serveur RADIUS. Un serveur de stratégie de contrôle d'intégrité NAP traite les demandes de connexion localement.
Les demandes RADIUS entrantes émanant des points de contrainte de mise en conformité NAP Windows® peuvent contenir une balise source qui spécifie le type de point de contrainte de mise en conformité NAP, tel qu'un serveur DHCP (Dynamic Host Configuration Protocol) ou un serveur de réseau privé virtuel (VPN).
Si le message de demande entrant contient une balise source, le service NPS sur le serveur de stratégie de contrôle d'intégrité NAP tente de faire correspondre la demande uniquement aux stratégies de demande de connexion avec une source correspondante (toutes les autres stratégies de demande de connexion sont ignorées). Si le message de demande entrant ne contient pas de balise source, le service NPS tente de faire correspondre la demande aux stratégies de demande de connexion avec une source non spécifiée (toutes les autres stratégies de demande de connexion spécifiant des sources sont ignorées).
Par exemple, les demandes entrantes émanant d'un serveur DHCP compatible NAP spécifient une balise source DHCP. Le service NPS tente de faire correspondre les demandes du serveur DHCP aux stratégies de demande de connexion avec la source DHCP. Les demandes entrantes émanant de commutateurs compatibles 802.1X et de points d'accès sans fil ne spécifient pas de balise source. Le service NPS tente de faire correspondre ces demandes aux stratégies de demande de connexion sans source spécifiée.
La stratégie de demande de connexion utilisée pour l'évaluation du traitement local ou distant est la première stratégie de demande de connexion correspondante de la liste hiérarchisée pour le sous-ensemble des stratégies qui s'appliquent à la demande entrante. Si la demande ne correspond à aucune stratégie de demande de connexion, elle est rejetée.
Stratégies réseau Il s'agit de jeux de règles hiérarchisés qui spécifient les circonstances dans lesquelles les tentatives de connexion correspondant aux messages de demande entrants sont soit autorisées, soit rejetées. Pour chaque règle, il existe une autorisation d'accès qui accorde ou refuse l'accès, un ensemble de conditions, un jeu de contraintes et des paramètres de stratégie réseau. Si une connexion est autorisée, les paramètres et les contraintes de stratégie réseau peuvent spécifier un jeu de restrictions de connexion. Pour NAP, les stratégies réseau peuvent spécifier une condition de stratégie de contrôle d'intégrité pour vérifier les exigences d'intégrité et les paramètres de comportement de contrainte de mise en conformité.
Tout comme les stratégies de demande de connexion, les stratégies réseau utilisent une balise source pour déterminer quelles stratégies réseau tenter de faire correspondre à la demande entrante. Si le message de demande entrant contient une balise source, le service NPS tente de faire correspondre la demande uniquement aux stratégies réseau avec une source correspondante (toutes les autres stratégies réseau sont ignorées). Si le message de demande entrant ne contient pas de balise source, le service NPS tente de faire correspondre la demande aux stratégies réseau sans source spécifiée (toutes les autres stratégies réseau spécifiant des sources sont ignorées).
La stratégie réseau utilisée pour l'autorisation ou l'évaluation d'intégrité est la première stratégie réseau correspondante de la liste hiérarchisée du sous-ensemble des stratégies qui s'appliquent à la tentative de connexion. Si la demande ne correspond à aucune stratégie réseau, elle est rejetée.
Stratégies de contrôle d'intégrité Elles vous permettront de spécifier les exigences d'intégrité en termes de validateurs d’intégrité du système installés et utilisés dans l'évaluation d'intégrité, et si les clients NAP doivent réussir ou non certains ou tous les validateurs d’intégrité sélectionnés. Par exemple, une stratégie de contrôle d'intégrité de clients NAP conformes peut spécifier que le client doit réussir toutes les vérifications d'intégrité. Une stratégie de contrôle d'intégrité de clients NAP non conformes peut spécifier que le client doit réussir au moins une ou toutes les vérifications d'intégrité.
Paramètres de protection d'accès réseau Il s'agit de la configuration des validateurs d’intégrité du système installés sur le serveur de stratégie de contrôle d'intégrité NAP pour les exigences d'intégrité et les conditions d'erreur, et des groupes de serveurs de mise à jour, qui spécifient les ensembles de serveurs qui sont accessibles aux clients NAP non conformes avec accès réseau limité pour les méthodes de contrainte de mise en conformité DHCP et VPN.

Déterminer l'étendue des problèmes de contrainte de mise en conformité NAP
Une approche logique est utile au dépannage de tout problème. Parmi les questions courantes à se poser pendant le dépannage, citons : Qu'est-ce qui fonctionne ? Qu'est-ce qui ne fonctionne pas ? Quelle est la relation entre les éléments qui fonctionnent et ceux qui ne fonctionnent pas ? Les éléments qui ne fonctionnent pas ont-ils fonctionné auparavant ? Si oui, qu'est-ce qui a changé depuis la dernière fois qu'ils ont fonctionné ?
Évidemment, ces questions sont plus ciblées lorsque les problèmes concerne la de contrainte de mise en conformité NAP. La connexion ou la connectivité fonctionnait-elle avant que la méthode de contrainte de mise en conformité NAP ne soit déployée ? Par exemple, l'isolation de domaine ou de serveur IPSec (Internet Protocol Security) fonctionnait-elle avant le déploiement de la contrainte de mise en conformité IPSec ? L'authentification 802.1X fonctionnait-elle avant le déploiement de la contrainte de mise en conformité 802.1X ? L'accès distant VPN fonctionnait-il avant le déploiement de la contrainte de mise en conformité VPN ? Le serveur DHCP fonctionnait-il avant le déploiement de la contrainte de mise en conformité DHCP ?
Par ailleurs, une méthode spécifique de contrainte de mise en conformité NAP fonctionnait-elle auparavant ? Si oui, qu'est-ce qui a changé sur le client NAP, le point de contrainte de mise en conformité NAP ou le serveur de stratégie de contrôle d'intégrité NAP ? Les réponses à ces questions peuvent indiquer où commencer le dépannage, vous permettant probablement d'isoler le problème de composant, de couche ou de configuration à l'origine du problème.
Pour le dépannage général des problèmes de contrainte de mise en conformité NAP, vous devez déterminer l'étendue du problème. La première étape consiste à déterminer si le problème est effectivement un problème de contrainte de mise en conformité NAP. Pour la contrainte de mise en conformité IPSec, déterminez si le client NAP possède le jeu de stratégies IPSec correct pour la négociation d'homologue et la protection des données IPSec. Pour la contrainte de mise en conformité DHCP, déterminez si le client NAP peut échanger des messages DHCP avec un serveur DHCP. Pour la contrainte de mise en conformité 802.1X et VPN, déterminez si le client NAP peut s'authentifier. Par exemple, si vos clients VPN ne peuvent pas exécuter l'authentification pour la connexion VPN, vérifiez les paramètres d'authentification et les informations d'identification des clients VPN.
Si vous avez identifié le problème comme étant un problème de contrainte de mise en conformité NAP, déterminez ensuite son étendue. Tous les clients NAP de toutes les méthodes de contrainte de mise en conformité NAP sont-ils concernés ? Tous les clients NAP d'une méthode de contrainte de mise en conformité spécifique sont-ils concernés ? Tous les clients NAP d'une méthode de contrainte de mise en conformité spécifique et d'un point de contrainte de mise en conformité NAP sont-ils concernés ? Tous les clients NAP sont-ils membres d'un groupe spécifique affecté ? Le problème concerne-t-il seulement un client NAP spécifique ?
Par exemple, si tous vos clients NAP rencontrent des problèmes pour tous les types de méthodes de contrainte de mise en conformité NAP, il peut exister des problèmes de configuration sur vos serveurs de stratégie de contrôle d'intégrité NAP. Si tous vos clients NAP rencontrent des problèmes avec une méthode de contrainte de mise en conformité NAP spécifique, les problèmes de configuration sont peut-être liés aux paramètres de Stratégie de groupe pour les clients NAP ou aux stratégies d'exigence d'intégrité pour la méthode de contrainte de mise en conformité NAP spécifique à vos serveurs de stratégie de contrôle d'intégrité NAP. Si seuls certains clients NAP spécifiques rencontrent des problèmes de contrainte de mise en conformité NAP, ces clients NAP peuvent présenter des problèmes de configuration pour la contrainte de mise en conformité NAP.

Problèmes de contrainte de mise en conformité NAP courants
Ressources de la protection NAP
  • Présentation de la protection d'accès réseau
  • Architecture de la plate-forme de protection d'accès réseau
  • Stratégies de protection d'accès réseau dans Windows Server 2008
  • Protection d'accès réseau NPS

Accès illimité Lorsqu'un client NAP possède un accès illimité (il n'est pas restreint), ceci peut être dû au fait que le client NAP a été évalué comme étant conforme par le serveur de stratégie de contrôle d'intégrité NAP. C'est précisément ce que vous voulez. Cependant, l'accès illimité aurait également pu être accordé si le client NAP n'avait pas reçu de SSoHR, ce qui survient généralement lorsqu'une évaluation d'intégrité n'est pas exécutée pour le client NAP. S'il n'y a pas d'évaluation d'intégrité NAP, aucune SSoHR n'est renvoyée au client NAP et le client NAP obtient un accès illimité.
Par exemple, un client NAP configuré pour la contrainte de mise en conformité DHCP enverra sa SSoHR à son serveur DHCP. Si le serveur DHCP exécutant Windows Server 2008 n'est pas configuré pour NAP, il n'enverra pas les messages de demande d'évaluation d'intégrité à un serveur de stratégie de contrôle d'intégrité NAP. De plus, un serveur DHCP exécutant Windows Server 2008 configuré pour NAP et ne pouvant pas joindre un serveur de stratégie de contrôle d'intégrité NAP attribue, par défaut, une configuration d'adresse pour l'accès illimité.
L'accès illimité peut également être obtenu lorsque le serveur de stratégie de contrôle d'intégrité NAP n'exécute pas d'évaluation d'intégrité car la demande entrante a fait correspondre une stratégie réseau qui ne nécessite pas d'évaluation d'intégrité NAP. Pour plus d'informations sur la façon de déterminer la stratégie réseau qui a fait correspondre une demande de client NAP, consultez la section « Dépannage de la contrainte de mise en conformité NAP étape par étape » de cet article.
Accès restreint Un client NAP qui possède un accès restreint a été évalué comme étant non conforme par le serveur de stratégie de contrôle d'intégrité NAP. Si le client NAP possède un accès restreint mais devrait posséder un accès illimité, vérifiez l'état d'intégrité du client NAP par rapport aux paramètres de stratégie de contrôle d'intégrité qui correspondent à la stratégie réseau qui a correspondu à la demande du client NAP.
Aucune mise à jour automatique Lorsqu'ils sont correctement configurés, les clients NAP peuvent automatiquement mettre à jour leur état d'intégrité. Si les clients NAP ne peuvent pas effectuer de mise à jour automatique, vérifiez que la case à cocher Activer la mise à jour automatique des ordinateurs clients est sélectionnée pour les paramètres de contrainte de mise en conformité NAP de la stratégie réseau qui a correspondu à la demande du client NAP.
Un autre problème pouvant affecter la mise à jour automatique survient lorsque le client NAP restreint ne peut pas joindre les serveurs de mise à jour pour télécharger les mises à jour. Pour la contrainte de mise en conformité IPSec, vérifiez que la stratégie IPSec correcte est appliquée aux serveurs de mise à jour. Pour la contrainte de mise en conformité 802.1X, vérifiez les paramètres de la stratégie réseau correspondante qui affecte la liste de contrôle d'accès (ACL) ou l'identificateur du réseau local virtuel et vérifiez la configuration de l'ACL ou du réseau local virtuel pour vos commutateurs ou points d'accès sans fil. Pour la contrainte de mise en conformité VPN ou DHCP, vérifiez les paramètres dans la stratégie réseau correspondante pour le groupe de serveurs de mise à jour et assurez-vous que tous les serveurs de mise à jour sont configurés en tant que membres du groupe. Pour la contrainte de mise en conformité DHCP, vérifiez que les options d'étendue DHCP pour les clients NAP sont correctement configurées, notamment la valeur de l'option Passerelle par défaut pour la classe d'utilisateurs NAP.
Évaluation non compatible avec NAP Pour toute méthode de contrainte de mise en conformité NAP, vérifiez que le client de contrainte de mise en conformité correspondant est activé sur le client NAP. Pour la contrainte de mise en conformité 802.1X et VPN, vérifiez que la vérification d'intégrité système du client NAP pour la méthode d'authentification PEAP est activée sur la stratégie de demande de connexion et sur le client NAP (les cases à cocher Activer les tests de quarantaine de la boîte de dialogue Propriétés EAP protégées sont sélectionnées).
Client NAP non restreint mais dans l'impossibilité de contacter l'intranet Pour la contrainte de mise en conformité IPSec, vérifiez que la stratégie IPSec pour les clients NAP conformes et la stratégie IPSec des ordinateurs de l'intranet possèdent un jeu de paramètres de négociation et de protection communs. Pour la contrainte de mise en conformité 802.1X, assurez-vous que la stratégie réseau pour les clients NAP conformes spécifie la liste de contrôle d'accès ou l'identificateur de réseau local virtuel pour l'intranet, et non le réseau restreint. Vérifiez la configuration de la liste de contrôle d'accès ou l'identificateur de réseau local virtuel pour l'intranet sur vos commutateurs ou points d'accès sans fil. Pour la contrainte de mise en conformité VPN, vérifiez qu'aucun filtre de paquets IP configuré sur la stratégie réseau pour les clients NAP conformes ne limite le trafic des clients VPN.

Dépannage de la contrainte de mise en conformité NAP étape par étape
Pour résoudre progressivement un problème de contrainte NAP pour un client NAP spécifique, vous pouvez commencer par la configuration du client NAP, vérifier le journal des événements du client NAP et accéder ensuite au serveur de stratégie de contrôle d'intégrité NAP pour déterminer comment le service NPS a traité la demande du client NAP.
Étape 1 : Vérifier la configuration du client NAP La configuration du client NAP se compose de paramètres spécifiques à la contrainte de mise en conformité NAP, de paramètres liés aux clients de contrainte de mise en conformité et de paramètres liés aux services Windows. Pour afficher l'état du client NAP et les informations de configuration, utilisez les commandes netsh nap client show state et netsh nap client show configuration.
Notez que si les paramètres du client NAP sont fournis par la stratégie de groupe, tous vos paramètres de client NAP sont spécifiés par la stratégie de groupe et tous vos paramètres de client NAP locaux sont ignorés. Dans ce cas, utilisez la commande netsh nap client show grouppolicy pour afficher la configuration du client NAP basée sur la stratégie de groupe et apporter des modifications via la stratégie de groupe.
Pour la contrainte de mise en conformité IPSec sur un ordinateur exécutant Windows Vista®, utilisez la commande net start pour vérifier que les services Agent de protection d’accès réseau, Modules de génération de clés IKE et AuthIP et Agent de stratégie IPsec sont démarrés. Utilisez la commande netsh nap client show configuration pour vérifier que le client de contrainte Partie de confiance IPSec est activé. Si nécessaire, utilisez le composant logiciel enfichable Configuration du client NAP pour activer la contrainte de mise en conformité de client Partie de confiance IPSec ou utilisez la commande netsh nap client set enforcement 79619 enabled. Les commandes Netsh nap client set enforcement doivent être exécutées à partir d'une invite de commande avec privilèges élevés.
Pour la contrainte 802.1X sur un ordinateur exécutant Windows Vista, utilisez la commande net start pour vérifier que les services Protocole EAP, Agent de protection d’accès réseau, Configuration automatique de réseau câblé (pour la contrainte 802.1X sur les connexions câblées) et Service de configuration automatique WLAN (pour la contrainte 802.1X sur les connexions sans fil) sont démarrés.
Utilisez à nouveau la commande netsh nap client show configuration pour vérifier que le client de contrainte de quarantaine EAP est activé. Si nécessaire, utilisez le composant logiciel enfichable Configuration du client NAP pour activer le Client de contrainte de quarantaine EAP ou utilisez la commande netsh nap client set enforcement 79623 enabled. Vérifiez que la case à cocher Activer les tests de quarantaine est sélectionnée pour les propriétés de la méthode d'authentification PEAP (Protected EAP) pour la connexion avec ou sans fil.
Pour la contrainte VPN sur un ordinateur exécutant Windows Vista, utilisez la commande net start pour vérifier que les services Protocole EAP, Agent de protection d’accès réseau et Gestionnaire de connexions d'accès distant sont démarrés.
Utilisez la commande netsh nap client show configuration pour vérifier que le Client de contrainte de quarantaine d'accès à distance est activé. Si nécessaire, utilisez le composant logiciel enfichable Configuration du client NAP pour activer le Client de contrainte de quarantaine d'accès à distance ou utilisez la commande netsh nap client set enforcement 79618 enabled. Vérifiez que la case à cocher Activer les tests de quarantaine est sélectionnée pour les propriétés de la méthode d'authentification PEAP (Protected EAP) pour la connexion VPN.
Pour la contrainte DHCP sur un ordinateur exécutant Windows Vista, utilisez la commande net start pour vérifier que les services Agent de protection d’accès réseau et Client DHCP sont démarrés. Si nécessaire, utilisez le composant logiciel enfichable Services ou l'outil Sc.exe pour démarrer ces services et les configurer pour un démarrage automatique.
Utilisez la commande netsh nap client show configuration pour vérifier que le Client de contrainte de quarantaine DHCP est activé. Si nécessaire, utilisez le composant logiciel enfichable Configuration du client NAP pour activer le Client de contrainte de quarantaine DHCP ou utilisez la commande netsh nap client set enforcement 79617 enabled.
Étape 2 : Vérifier le journal des événements du client NAP Utilisez le composant logiciel enfichable Observateur d'événements pour vérifier les événements du journal des événements créés par le service Agent de protection d’accès réseau. Sur les ordinateurs exécutant Windows Vista, utilisez le composant logiciel enfichable Observateur d'événements pour afficher les événements dans Journaux des applications et des services\Microsoft\Windows\Protection d’accès réseau\Opérationnel. Sur les ordinateurs exécutant Windows XP avec SP3, utilisez le composant logiciel enfichable Observateur d'événements pour afficher les événements du journal des événements système.
D'après les événements du client NAP, obtenez l'identificateur de corrélation de l'évaluation d'intégrité du client NAP. Vous pouvez utiliser l'identificateur de corrélation ou le nom d'ordinateur du client NAP pour rechercher l'événement d'évaluation d'intégrité correspondant sur le serveur de stratégie de contrôle d'intégrité NAP. La figure 1 présente un exemple d'événement pour un client NAP non conforme avec l'identificateur de corrélation.
Figure 1 Exemple d'événement d'un client NAP Windows Vista
Figure 1 Exemple d'événement d'un client NAP Windows Vista
Étape 3 : Vérifier le journal des événements NPS Sur le serveur de stratégie de contrôle d'intégrité NAP, utilisez le composant logiciel enfichable Observateur d'événements pour afficher les événements de Journaux Windows\Journal sécurité qui sont créés par le service NPS. Pour afficher les événements NPS, dans l'Observateur d'événements, ouvrez Affichages personnalisés, puis Rôles du serveur et cliquez ensuite sur Services de stratégie et d’accès réseau. Pour afficher une rubrique d'aide en ligne associée à l'événement, cliquez sur le lien « Aide en ligne du Journal d'événements » sur l'onglet Général de l'événement.
Les événements typiques d'évaluation d'intégrité NAP ont l'identificateur d'événement 6278 (pour l'accès illimité) ou 6276 (pour l'accès restreint). Recherchez l'événement de serveur de stratégie de contrôle d'intégrité NAP correspondant en fonction du nom d'ordinateur du client NAP (le champ Nom du compte dans la section Ordinateur client de la description d'événement) ou l'identificateur de corrélation (le champ Identificateur de session dans la section d'informations de quarantaine de la description d'événement).
Les événements du journal des événements NPS 6278 et 6276 contiennent des informations sur l'évaluation d'intégrité NAP, notamment le nom de la stratégie de demande de connexion correspondante (le champ de nom de stratégie de proxy dans la section des détails d'authentification de la description de l'événement) et la stratégie réseau correspondante (le champ de nom de stratégie réseau dans la section des détails d'authentification de la description de l'événement). La figure 2 est un exemple de l'onglet Détails d'un identificateur d'événement 6276, avec le nom de stratégie de préfixe, le nom de stratégie réseau et l'identificateur de corrélation (nommé QuarantineSessionID). Il s'agit de l'événement de stratégie de contrôle d'intégrité NAP correspondant à l'événement de client NAP Windows Vista de la figure 1.
Figure 2 Exemple d'événement d'un serveur de stratégie de contrôle d'intégrité NAP
Figure 2 Exemple d'événement d'un serveur de stratégie de contrôle d'intégrité NAP
S'il n'y a pas d'événement correspondant à l'événement de client NAP, vérifiez que le service NPS est démarré et que le point de contrainte de mise en conformité NAP est convenablement configuré pour NAP et pour utiliser le serveur de stratégie de contrôle d'intégrité NAP en tant que serveur RADIUS. Vérifiez que les messages RADIUS peuvent être envoyés entre le point de contrainte NAP et le serveur de stratégie de contrôle d'intégrité NAP.
En suivant ces trois étapes, vous devriez être sur la bonne voie pour déterminer pourquoi votre contrainte de mise en conformité NAP ne fonctionne pas comme prévu. Pour plus d'informations sur NAP, consultez l'encadré « Ressources de la protection NAP ».

Joseph Davies est rédacteur technique chez Microsoft. Il enseigne et rédige des articles sur les réseaux Windows depuis 1992. Il a écrit cinq livres pour Microsoft Press et est l'auteur de la chronique en ligne mensuelle Le petit câbleur de TechNet.


 Windows&#160;PowerShell: Signez ici, s'il vous pla&#238;t
Windows PowerShell
Signez ici, s'il vous plaît
Don Jones

Dans l'article Windows PowerShell de janvier 2008, j'ai insisté sur l'importance de la signature de vos scripts Windows PowerShell. J'ai également décrit certains scénarios dans lesquels une stratégie d'exécution différente de AllSigned pourrait créer des failles de sécurité significatives dans votre environnement.
Je n'ai par contre pas décrit avec beaucoup de détails comment signer vos scripts. Vous pouvez consulter cette chronique à l'adresse technetmagazine.com/issues/2008/01/PowerShell. Devinez ce que je vais aborder ce mois-ci ?

Plus qu'une simple signature
Le mot signature est le terme technique correct pour ce dont je vais parler, bien qu'il ne constitue pas en soi une bonne description de ce qui se produit ici. Signer un script ne signifie pas que vous l'approuvez ou l'autorisez, comme cela serait le cas avec un contrat ou un bordereau de carte de crédit. Dans le monde de la sécurité numérique, la signature est le processus d'apposition de votre identité à un élément et de vérification que l'état de cet élément n'a en aucun cas été modifié. Tout ceci est basé sur la cryptographie, et la cryptographie (tout du moins dans ce cas précis) commence par une paire de clés de chiffrement.
Ces clés sont appelées clés asymétriques car elles sont différentes l'une de l'autre. Ce couple est composé d'une clé privée, à laquelle vous seul pouvez accéder, et d'une clé publique, à laquelle tout le monde peut accéder. Je simplifie quelque peu ceci mais, fondamentalement, tout ce qui a été chiffré avec la clé privée peut uniquement être déchiffré avec la clé publique correspondante.
Voici comment cela fonctionne. Ici encore, j'utilise une simplification pour poursuivre cette discussion. Je possède un script Windows PowerShell® que je souhaite signer et un certificat contenant la clé privée que je souhaite utiliser pour signer le script. Windows Powershell possède une applet de commande, dont je parlerai dans un instant, pouvant utiliser le script et le certificat pour effectuer la signature. Lors de cette opération, Windows PowerShell prend le script et le chiffre à l'aide de ma clé privée. La copie chiffrée apparaît sous forme de texte brouillé ajouté au bas du script en tant que série de commentaires (voir la figure 1). Mon identité est également codée, mais non chiffrée, dans ces commentaires. Cette identité peut même être lue sans recourir à la cryptographie.
Figure 1 Bloc de signature enregistré au bas de votre script
Figure 1 Bloc de signature enregistré au bas de votre script
Plus tard, lorsque Windows PowerShell examine la signature, il décode mon identité et l'utilise pour obtenir ma clé publique. Comme seule ma clé publique peut déchiffrer le reste de la signature, Windows PowerShell sait que s'il est capable de déchiffrer la signature, c'est que c'est moi qui l'ai signée. Si quelqu'un d'autre l'avait signée, ma clé publique ne pourrait pas déchiffrer la signature. Une fois la signature déchiffrée, Windows PowerShell compare le script à la copie qui avait été chiffrée dans la signature. Si elles correspondent, la signature est alors considérée comme intacte. Si les deux scripts diffèrent, la signature est rompue et considérée comme non valide.
Voici comment une signature protège un script en texte brut contre les modifications sans que cela soit visible. N'oubliez pas que bien que le script puisse lui-même être facilement modifié, la signature ne peut pas être modifiée pour correspondre au script modifié sans utiliser ma clé privée, et je suis seul propriétaire de ma clé privée.
Il s'agit définitivement d'une simplification du processus technique sous-jacent. En réalité, les signatures peuvent et doivent contenir davantage d'informations, notamment une copie de ma clé publique, des informations sur l'autorité de certification (CA) qui a émis les clés, etc. Mais ma description illustre certainement les parties importantes du processus et souligne le fait qu'une signature protège en fait votre script des modifications non autorisées.
La protection absolue de votre clé privée est un facteur essentiel de la sécurité de votre clé privée. Il est souhaitable qu'elle ne tombe pas entre les mains de personnes non autorisées. Lorsque vous installez votre clé dans Windows, vous devez immédiatement la protéger par mot de passe afin qu'aucun processus malveillant ne puisse utiliser votre clé à votre insu. Les cartes à puce fournissent une sécurité encore plus grande puisqu'elles contiennent votre clé privée. Avec une carte à puce, votre clé privée ne quitte jamais la carte. Au lieu de cela, les données que vous voulez chiffrer sont transmises à la carte par son matériel de lecture et les circuits de la carte exécutent le chiffrement et renvoient le résultat.

Obtenir un certificat
Applet de commande du mois Export-CSV
Les participants aux forums de PowerShellCommunity.org demandent souvent si Windows PowerShell peut exporter vers Microsoft Excel®. Bien sûr ! L'applet de commande Export-CSV suffit, puisque Excel peut ouvrir, modifier et enregistrer les fichiers CSV en mode natif. Par exemple, si vous voulez exporter une liste de services, exécutez simplement Get-Service | Export-CSV MyServices.csv. En fait, vous pouvez ajouter Export-CSV à la fin de tout pipeline pour que tous les objets de ce pipeline figurent dans le fichier CSV que vous spécifiez. Par défaut, Export-CSV ajoute une ligne d'en-tête au sommet du fichier, qu'il utilise pour spécifier le type d'objet exporté. Cette ligne est mise en commentaire et n'empêchera donc pas Excel d'ouvrir le fichier. Si vous ne voulez pas que ce type d'information soit exporté, vous pouvez ajouter le paramètre -notype à Export-CSV. De plus, vous pouvez ajouter le paramètre -force pour forcer le remplacement d'un fichier CSV existant du même nom sans avertissement (un avertissement est par défaut affiché), ou encore ajouter le paramètre -noClobber pour empêcher le remplacement d'un fichier existant.

Pour signer des scripts, vous aurez besoin d'un type de certificat spécifique, à savoir un certificat de signature de code Authenticode Class III, et il existe trois manières de l'obtenir. La première consiste à utiliser l'infrastructure de clé publique interne (PKI) de votre entreprise, si elle existe. Une PKI bien implémentée aura son autorité de certification racine approuvée par tous les ordinateurs de votre entreprise. Ceci est nécessaire pour que les certificats émis par l'autorité de certification soient utilisables dans l'entreprise.
Windows Server® est livré avec son propre logiciel de serveur de certificat depuis Windows® 2000 et vous pouvez utiliser ce logiciel pour créer votre propre PKI. Une implémentation complète de PKI nécessite beaucoup de planification, mais si vous avez seulement besoin d'une PKI dans le seul but d'émettre des certificats de signature de code, votre travail ne sera pas compliqué. Vous pouvez simplement utiliser la Stratégie de groupe pour pousser le certificat racine de votre autorité de certification vers vos ordinateurs pour qu'ils lui fassent confiance.
La deuxième possibilité consiste à utiliser une autorité de certification commerciale. L'un des avantages de l'utilisation d'une autorité de certification commerciale est que si vous sélectionnez l'une des principales autorités de certification, les ordinateurs de votre entreprise sont probablement déjà configurés pour faire confiance aux certificats de cette autorité de certification. (Notez que Windows XP fait confiance à un grand nombre d'autorités de certification par défaut, alors que Windows Vista® fait confiance à un nombre beaucoup plus réduit par défaut.) Verisign (verisign.com) est l'une autorités de certification commerciales très prisée. Il existe d'autres autorités intéressantes, notamment CyberTrust (cybertrust.com) et Thawte (thawte.com).
La troisième possibilité pour l'obtention d'un certificat de signature de code consiste à créer votre propre certificat auto-signé à l'aide d'un outil tel que Makecert.exe. Celui-ci est livré avec le SDK de la plate-forme Windows, il est installé avec certaines éditions de Microsoft® Office et vous pourrez le trouver à de nombreux autres emplacements. L'avantage d'un certificat auto-signé est qu'il est gratuit et ne nécessite aucune infrastructure. L'inconvénient, cependant, est qu'il n'est véritablement utilisable que sur votre ordinateur. Mais si vous avez seulement besoin de permettre l'exécution de script sur votre ordinateur, pour vos tests ou pour effectuer une expérimentation générale de la signature de code, Makecert.exe constitue une excellente solution. Vous trouverez la documentation de cet outil à l'adresse go.microsoft.com/fwlink/?LinkId=108538. Soyez conscient que de nombreuses versions de cet outil se sont succédé au fil des années, et qu'il est donc possible que votre ordinateur utilise une version antérieure ne fonctionnant pas exactement de la manière décrite par la documentation.
Une fois que vous disposez de Makecert.exe, vous pouvez créer un certificat auto-signé en exécutant une commande similaire à celle-ci depuis la ligne de commande de Windows PowerShell (et que je n'apprenne surtout pas que l'un d'entre vous a utilisé cmd.exe en lisant cette rubrique) :
makecert -n "CN=MyRoot" -a sha1 –eku
1.3.6.1.5.5.7.3.3 -r -sv root.pvk root.cer
–ss Root -sr localMachine
Exécutez ceci :
makecert -pe -n "CN=MyCertificate" -ss MY
–a sh1 -eku 1.3.6.1.5.5.7.3.3 -iv root.pvk
–c root.cer
Makecert.exe vous demandera un mot de passe pour protéger la clé et créera le certificat. Vous pouvez vérifier l'installation en exécutant ce code dans Windows PowerShell :
gci cert:\CurrentUser\My -codesigning
Ceci affichera une liste de tous les éléments du lecteur CERT: (il s'agit de votre magasin de certificats Windows) qui correspondent à des certificats de signature de code. À propos, tout ceci est également décrit dans Windows PowerShell. Pour trouver cette documentation, exécutez simplement help About_Signing et lisez les quelques écrans affichés.

Signature d'un script
Maintenant que vous disposez d'un certificat et d'un script (pour vos tests, vous pouvez simplement en créer un rapidement, si nécessaire), vous êtes prêt à signer le script. C'est étonnamment facile avec Windows PowerShell ; entrez simplement :
$cert = @(gci cert:\currentuser\my
-codesigning)[0]
Set-AuthenticodeSignature myscript.ps1 $cert
La première partie récupère le premier certificat de signature de code installé (si plusieurs certificats sont installés et que vous voulez utiliser un certificat différent du premier, modifiez le « 0 » pour utiliser le numéro approprié). La deuxième partie signe le fichier (vous devrez bien entendu modifier le nom de fichier pour qu'il corresponde au vôtre). C'est aussi simple que ça ! Pour être totalement honnête, cependant, je trouve que le nom de l'applet Set-AuthenticodeSignature est un peu trop long et c'est pourquoi j'ai créé l'alias Sign. Maintenant, je peux exécuter simplement :
Sign myscript.ps1 $cert
Ouvrez maintenant ce script et vous verrez le bloc de signature inséré au bas. Essayez d'exécuter le script avec votre stratégie d'exécution définie sur AllSigned (Set-ExecutionPolicy AllSigned) et il devrait fonctionner sans problème. Vous allez maintenant modifier le script et l'enregistrer, mais veillez à ne pas le signer à nouveau. Windows Powershell devrait maintenant simplement refuser d'exécuter la version modifiée car la signature a été rompue.

Des efforts récompensés
Ceci en vaut-il vraiment la peine ? Est-il vraiment nécessaire d'avoir à payer 500 dollars ou plus pour un certificat ou de devoir implémenter un élément d'infrastructure complètement nouveau pour pouvoir écrire quelques lignes de script pour des tâches administratives ? Sachez que je suis également administrateur et que je comprends vos inquiétudes. La réponse la plus simple est que chaque effort nécessaire pour arriver à ceci en vaut la peine.
La sécurité implique en fait presque toujours un certain degré de tracas. Un logiciel antivirus peut être une plaie, mais vous ne pouvez pas vous en passer. Un pare-feu est sans aucun doute pénible mais, comme vous le savez, il n'est pas sûr de travailler sans pare-feu. Le contrôle de compte utilisateur (UAC) de Windows Vista peut également être agaçant, mais il assure la sécurité de votre ordinateur. Et n'est-ce pas cette sécurité améliorée que nous essayons tous d'obtenir ?
Windows Powershell est un outil puissant et, comme tout autre outil, il est toujours possible qu'il soit détourné en faille de sécurité par un utilisateur malveillant. C'est pourquoi il est important que vous preniez des mesures pour faire face à ces utilisateurs malveillants.
La signature de code est la meilleure mesure que vous puissiez prendre et ne nécessite pas un investissement conséquent. Par exemple, j'utilise un éditeur de scripts graphique qui signe automatiquement mes scripts chaque fois que j'appuie sur Enregistrer, et la signature de code est quasiment transparente pour moi.
Vous pouvez rendre ceci transparent, même sans un éditeur extravagant. Par exemple, vous pouvez créer un profil Windows PowerShell pour vous (créez le fichier Microsoft.PowerShell_profile.ps1 dans un dossier nommé WindowsPowerShell, situé dans votre dossier de documents), et lui ajouter cette fonction :
function sign ($filename) {
  $cert = @(gci cert:\currentuser\my
-codesigning)[0]
Set-AuthenticodeSignature $filename $cert
}
Vous pouvez maintenant signer votre script en entrant simplement :
Sign c:\scripts\myscript.ps1
Bien entendu, ce script de profil devrait être le premier que vous signez ! L'objectif est de prendre quelques mesures pour rendre la signature de script aussi pratique que possible, pour qu'elle ne constitue pas un problème.
Le déploiement d'un PKI à serveur unique dans le seul but d'émettre un certificat de signature de code ne représente pas beaucoup de travail. (Gardez toutefois à l'esprit que vous avez vraiment besoin de préparer et planifier votre PKI, y compris de protéger l'autorité de certification racine et de fournir une récupération après incident, surtout si elle sera utilisée pour quoi que ce soit d'autre). Makecert.exe est toujours disponible si vous êtes seul à avoir besoin d'exécuter des scripts dans votre environnement. Notez que la rubrique d'aide About_Signing de Windows PowerShell inclut également des informations sur la sécurisation du certificat produit par Makecert.exe.

Don Jones est l'auteur de Windows PowerShell : TFM and VBScript, WMI, and ADSI Unleashed. Vous pouvez le contacter par l’intermédiaire du site Web PowerShellCommunity.org.


 H&#233;, vous le scripteur&#160;!: Le retour du script de base de donn&#233;es
Hé, vous le scripteur !
Le retour du script de base de données
Les scripteurs Microsoft
Télécharger le code de cet article: HeyScriptingGuy2008_04.exe (151KB)

Vous savez, si nous autres scripteurs avons une faiblesse (j'ai bien dit « si »), c'est celle-ci : nous nous inquiétons beaucoup trop des conséquences possibles des actions que nous commettons, ou ne commettons pas. Au lieu d'agir dans notre propre intérêt, nous nous retenons souvent pour plutôt faire ce que nous pensons être dans le meilleur intérêt de tous les autres. Nous le faisons en outre sans tenir compte de ce que ces actions pourraient signifier pour nous.
Prenez les articles sur les scripts de base de données, par exemple. Pour être parfaitement honnêtes, les articles sur les scripts de base de données sont difficiles à rédiger pour nous autres scripteurs. Ce n'est pas parce que les scripts de base de données mêmes sont difficiles à créer ; en fait, ils sont au contraire plutôt faciles à écrire. Le problème est plutôt que nous n'avons pas souvent l'occasion de travailler avec des bases de données. Pour cette raison, chaque fois que nous écrivons des articles sur les bases de données, nous devons nous arrêter un instant pour réfléchir à ce que nous faisons. Comme vous l'avez probablement deviné depuis longtemps, réfléchir n'est définitivement pas une condition requise pour devenir un scripteur.
À vrai dire, si l'un de nous y avait réfléchi dès le départ, les scripteurs n'existeraient probablement même pas.
Donc, si les articles portant sur l'écriture de scripts de base de données sont pour nous si difficiles à écrire, pourquoi continuons-nous à les écrire ? La réponse est simple : nous nous préoccupons de ce qui pourrait arriver au reste du monde si nous cessions d'écrire ces articles. Lorsque Sir Arthur Conan Doyle décida de tuer Sherlock Holmes (en le faisant tomber d'une falaise dans le récit « Le dernier problème »), il pensait simplement se débarrasser d'un personnage à propos duquel il ne voulait plus écrire. Au lieu de cela, une clameur énorme se fit entendre dans le monde entier. Selon certaines rumeurs, des londoniens allèrent jusqu'à placer des rubans de deuil sur leurs chapeaux et leurs manches en apprenant la nouvelle. « Le dernier final » fut publié dans The Strand Magazine en 1893. En réponse, 20 000 personnes annulèrent leur abonnement.
Aïe !
Les scripteurs craignent que l'élimination de leurs articles sur l'écriture de scripts de base de données ait un effet similaire dans le monde entier. Nous ne voulons pas être la cause de tant de chagrin et de désespoir, et nous ne voulons certainement pas que 20 000 d'entre vous annulent leur abonnement à TechNet Magazine. Par conséquent, nous souhaitons annoncer ici que les scripteurs continueront à écrire des articles sur les scripts de base de données. Quand ? Pourquoi pas maintenant ?

Ajout d'enregistrements à une base de données
Ce mois-ci, nous avons pensé vous montrer quelques petits tours habiles pour travailler avec les bases de données. Et oui, ceux-ci sont différents des astuces que nous vous avons montrées dans notre article de septembre 2007 (technetmagazine.com/issues/2007/09/HeyScriptingGuy). Même les scripteurs ne s'abaisseraient pas à publier deux fois le même article.
Enfin, sauf si nous pensions pouvoir le faire en toute impunité.
Commençons par vous montrer une manière simple d'ajouter un enregistrement à une base de données. Supposons que nous disposons d'une base de données nommée C:\Scripts\Inventory.mdb et que cette base de données inclut une table nommée Computers. La table Computers comprend les champs suivants :
  • ComputerName
  • SerialNumber
  • UserName
  • Department
Maintenant, comment ajouter un nouvel ordinateur à cette base de données ? Examinez le code de la figure 1.
Figure 1 Ajouter un enregistrement à la table Computers (Close Figure 1)
Const adOpenStatic = 3
Const adLockOptimistic = 3

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConnection.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source = C:\Scripts\Inventory.mdb"

objRecordSet.Open "INSERT INTO Computers (ComputerName, SerialNumber, UserName, Department)" &  _
    "VALUES ('atl-ws-07', '11234', 'Ken Myer', 'Finance')", _
        objConnection, adOpenStatic, adLockOptimistic
Nous ne parlerons pas en détail des premières lignes de ce script. Si vous avez besoin de ce type d'informations générales, vous pouvez consulter les ressources mise à votre disposition dans le Centre de scripts à l'adresse microsoft.com/techNet/scriptcenter. Qu'il suffise de dire que nous utilisons les constantes adOpenStatic et adLockOptimistic pour contrôler le type de curseur et de verrouillage d'enregistrement pour notre jeu d'enregistrements. (Oui, ça semble impressionnant, mais c'est vraiment très simple) Après avoir créé les instances des objets ADODB.Connection et ADODB.Recordset, nous utilisons cette commande pour ouvrir notre base de données :
objConnection.Open _
"Provider = Microsoft.Jet.OLEDB.4.0; " & _
"Data Source = C:\Scripts\Inventory.mdb"
À propos, cette commande ouvre une base de données Microsoft® Access® 2003. Pour ouvrir une base de données Access 2007, utilisez plutôt cette commande :
objConnection.Open _
"Provider = Microsoft.ACE.OLEDB.12.0; " & _
"Data Source = C:\Scripts\Inventory.accdb"
Bien que nous commencions à nous éloigner un peu du sujet principal, vous pourriez utiliser une commande similaire à ceci pour ouvrir une base de données SQL Server® :
objConnection.Open _
"Provider=SQLOLEDB;" & _
"Data Source=atl-sql-01;" & _
"Trusted_Connection=Yes;" & _ "InitialCatalog=Inventory;" & _
"User ID=fabrikam\kenmyer;Password=34DE6t4G!;"
Jusqu'ici, tout ce que nous vous avons montré est du code passe-partout. Comme vous le verrez bientôt, à peu près tous vos scripts de base de données commenceront avec ces mêmes lignes de code. La partie que nous voulons souligner est en fait cette ligne :
objRecordSet.Open _
  "INSERT INTO Computers " & _
  "(ComputerName, SerialNumber, " & _
  "UserName, Department) " & _
    "VALUES ('atl-ws-07', 'A14B1234', " & _
      "'Ken Myer', 'Finance')", _
        objConnection, adOpenStatic, _
        adLockOptimistic
Nous utilisons ici une requête INSERT INTO pour insérer un nouvel enregistrement dans la table Computers. Remarquez qu'après le nom de la table, nous incluons les noms de tous les champs pour lesquels nous avons des valeurs, en séparant ces noms de champs par des virgules et en les plaçant entre parenthèses.
Vous vous demandez peut-être : qu'est-ce qu'ils veulent dire par « tous les champs pour lesquels nous avons des valeurs » ? Bonne question. Hé bien supposons que ce nouvel ordinateur n'a pas encore été affecté à un service. En partant du postulat que la base de données nous autorise à mettre une valeur Null dans le champ Department (service), nous pouvons simplement ne pas inclure Department dans la liste et ne pas lui affecter de valeur. En d'autres termes, nous pourrions écrire une requête telle que celle-ci :
objRecordSet.Open _
  "INSERT INTO Computers " & _
  "(ComputerName, SerialNumber, " & _
  "UserName) " & _
    "VALUES ('atl-ws-07', 'A14B1234', " & _
      "'Ken Myer')", _
        objConnection, adOpenStatic, _
        adLockOptimistic
Puisque nous parlons d'affectation de valeurs, voici ce qui vient après les noms de champs : le mot clé VALUES suivi par les valeurs que nous voulons affecter à chaque champ (qui sont également entre parenthèses). Gardez à l'esprit que lorsque nous indiquons les noms de champs, ils peuvent être dans n'importe quel ordre. Par exemple, nous mettons ComputerName en premier, bien qu'il puisse très bien ne pas être le premier champ de la base de données. Cela convient tout à fait pour les noms de champs, mais pas tellement pour les valeurs. Les valeurs doivent être indiquées dans l'ordre exact des champs. Si notre premier champ est ComputerName, notre première valeur doit être le nom de l'ordinateur. Si ce n'est pas le cas, nous rencontrerons des problèmes. (Par exemple, nous finirons par affecter le nom d'utilisateur ou le numéro de série au champ ComputerName)
Comme vous pouvez le voir, l'affectation de valeur n'est pas très compliquée. Il suffit juste de s'assurer que les valeurs sont formatées correctement pour le type de données : les valeurs de dates et de chaînes doivent être placées entre des apostrophes, les valeurs numériques et booléennes ne doivent pas être placées entre apostrophes.
Au fait, si une valeur possède sa propre apostrophe (comme le nom O'Brien), vous devez y remédier en doublant l'apostrophe :
'O''Brien'
C'est fou, mais c'est comme ça.

Suppression d'enregistrements d'une base de données
Vous ne trouvez pas ça sympa ? nous pouvons ajouter un enregistrement à une base de données en exécutant simplement une seule requête SQL. Est-il possible de faire mieux ? Pas à notre connaissance.
Sauf peut-être la possibilité de supprimer des enregistrements multiples d'une base de données à l'aide d'une seule requête.
Supposons que votre entreprise décide d'éliminer son service Ressources humaines. (Non, pas de plaisanterie ; nous avons déjà assez d'ennuis avec le service RH de Microsoft) Comment pouvez-vous supprimer tous les ordinateurs des ressources humaines de votre base de données Inventory ? La figure 2 présente une façon d'y parvenir.
Figure 2 Supprimer plusieurs enregistrements (Close Figure 2)
Const adOpenStatic = 3
Const adLockOptimistic = 3

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConnection.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source = C:\Scripts\Inventory.mdb"

objRecordSet.Open "DELETE * FROM Computers Where Department='Human Resources'", _
    objConnection, adOpenStatic, adLockOptimistic
Comme vous pouvez le voir, ce script particulier démarre exactement de la même façon que notre script pour l'ajout d'un nouvel enregistrement : en définissant certaines constantes, en créant quelques objets et en se connectant ensuite à la base de données Inventory.mdb. Après avoir utilisé une simple requête DELETE pour supprimer tous les enregistrements (*) de la table Computers, ou tout du moins tous les enregistrements dans lesquels le champ Department est égal à Human Resources :
objRecordSet.Open _
  "DELETE * FROM Computers " & _
   "Where Department='Human Resources'", _
    objConnection, adOpenStatic, _
    adLockOptimistic
C'est aussi facile à faire que tomber d'une falaise.
Euh... désolé Sherlock.

Mise à jour d'enregistrements dans une base de données
Tout le monde est probablement d'accord pour dire qu'il serait vraiment amusant de supprimer toute trace du service des ressources humaines. (Remarque pour le service des ressources humaines de Microsoft : nous voulons dire que ce serait amusant pour d'autres personnes, et leur propre service RH. Pas pour nous. Ca ne nous amuserait pas du tout). Quoi qu'il en soit, la suppression de tous les ordinateurs des RH de la base de données Inventory ne serait pas la meilleure chose à faire. Pourquoi cela ? Eh bien, à moins que les employés des RH ne disparaissent avec tout leur matériel (ce qui leur ressemblerait bien, mais nous avons dit que nous ne ferions pas de plaisanterie), ces ordinateurs appartiennent toujours à votre entreprise, ce qui signifie que ces ordinateurs doivent toujours être répertoriés dans la base de données. En gardant ceci à l'esprit, allons-y. Au lieu de supprimer ces enregistrements de la base de données, mettons simplement à jour chaque enregistrement. Nous modifierons juste le nom de service de chacun de ces ordinateurs des ressources humaines pour le remplacer par None (Aucun). En d'autres termes, nous exécuterons le script présenté à la figure 3.
Figure 3 Mettre à jour des enregistrements (Close Figure 3)
Const adOpenStatic = 3
Const adLockOptimistic = 3

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConnection.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source = C:\Scripts\Inventory.mdb"

objRecordSet.Open "UPDATE Computers Set Department = 'None' " & _
    "Where Department = 'Human Resources'", _
    objConnection, adOpenStatic, adLockOptimistic
Ici encore, la seule différence dans ce script est la requête SQL. Dans ce cas-ci, nous utilisons une requête UPDATE pour mettre à jour des enregistrements de la table Computers. Outre le mot clé UPDATE, nous devons ajouter deux paramètres qui indiquent à la requête comment mettre à jour les enregistrements et les enregistrements à mettre à jour :
  • Set Department = 'None'. Ceci spécifie simplement la nouvelle valeur pour le champ Department. Vous pouvez en fait définir plus d'une valeur de champ à la fois en utilisant une syntaxe telle que celle-ci : Set Department = 'None', UserName = 'None'. Comme vous pouvez le voir, ceci définira les champs Department et UserName sur None.
  • Where Department = 'Human Resources'. Ceci est une clause Where standard, qui indique les enregistrements qui doivent être mis à jour. Dans ce cas, il s'agit de tous les enregistrements dont le champ Department est égal à Human Resources. Nous ajoutons ceci pour une raison simple : nous ne voulons pas modifier tous les enregistrements de la base de données, seulement les enregistrements (les ordinateurs) qui appartenaient auparavant au service Human Resources.
Voici quelque chose de sympa que vous pouvez faire avec les requêtes Update. Imaginons que votre entreprise ait décidé de donner à tout le monde une augmentation de 10 % net. (Nous autres scripteurs avons manifestement au moins un point commun avec Sir Arthur Conan Doyle : nos écrits comme les siens décrivent des mondes imaginaires). Voici un script qui ouvre une table nommée Employees et modifie le champ Salary pour chaque employé. Sur quoi définit-il le champ Salary ? La requête définit ce champ sur le salaire actuel de l'employé multiplié par 1,1. En d'autres termes, il donne une augmentation de 10 % à chaque employé. (Si seulement c'était aussi facile que ça) ! Voici la requête :
objRecordSet.Open _
  "Update Employees " & _
  "Set Salary = (Salary * 1.1)", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Qu'est-ce que ça a de sympa ? Comme vous pouvez le voir, vous pouvez faire des calculs dans vos requêtes Update. Avez-vous décidé de rallonger le contrat de tous vos employés temporaires de 60 jours ? Dans ce cas, une requête similaire à la suivante peut s'avérer pratique :
objRecordSet.Open _
  "Update TempEmployees " & _
  "Set ContractExpirationDate = " & _
  "(ContractExpirationDate + 60)", _
    objConnection, adOpenStatic, _
    adLockOptimistic

Méthodes pratiques pour extraire les données
Puisque nous parlons de requêtes qui pourraient s'avérer utiles, bouclons notre histoire en examinant les méthodes pratiques d'extraction de données d'une base de données. Par exemple, voici un script simple et pourtant très utile. Supposons que notre base de données Inventory comprenne un champ Price, un champ qui, en toute logique, représente le prix d'un ordinateur. Voulez-vous connaître les cinq ordinateurs les plus chers de votre entreprise ? L'exemple de script de la figure 4 vous l'indiquera.
Figure 4 Trier le jeu d'enregistrements (Close Figure 4)
Const adOpenStatic = 3
Const adLockOptimistic = 3

Set objConnection = CreateObject("ADODB.Connection")
Set objRecordSet = CreateObject("ADODB.Recordset")

objConnection.Open _
    "Provider = Microsoft.Jet.OLEDB.4.0; " & _
        "Data Source = C:\Scripts\Test.mdb"

objRecordSet.Open "SELECT Top 5 * FROM Computers Order By Price", _
     objConnection, adOpenStatic, adLockOptimistic

objRecordSet.MoveFirst

Do Until objRecordset.EOF
    Wscript.Echo objRecordset.Fields.Item("ComputerName")
    objRecordset.MoveNext
Loop

objRecordSet.Close
objConnection.Close
Comme vous pouvez le voir, dans cette requête SQL, nous avons fait deux choses : nous avons trié le jeu d'enregistrements par prix (Order By Price) et nous avons demandé uniquement les cinq ordinateurs de tête (c'est-à-dire les cinq plus chers). C'est ce que fait la partie SELECT Top 5. Si nous avions voulu une liste des 10 ordinateurs les plus chers, nous aurions utilisé cette requête :
objRecordSet.Open _
  "SELECT Top 10 * FROM Computers " & _
  "Order By Price", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Remarque. Nous avons également ajouté du code pour parcourir le jeu d'enregistrements et afficher le nom de chaque ordinateur. Nous n'avions pas besoin de ce code dans nos scripts précédents parce que ces scripts ne renvoyaient et n'affichaient pas de données.
Nous pouvons également obtenir les 10 % de tête en utilisant cette requête :
objRecordSet.Open _
  "SELECT Top 10 PERCENT * " & _
  "FROM Computers Order By Price", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Et si nous voulions maintenant les ordinateurs les plus économiques ? Aucun problème ; nous pouvons simplement utiliser la même approche, mais trier le jeu d'enregistrements selon un ordre décroissant (c'est-à-dire du prix le plus bas vers le prix le plus élevé). En d'autres termes, nous utilisons cette requête, avec DESC indiquant que le jeu d'enregistrements doit être trié dans l'ordre décroissant :
objRecordSet.Open _
  "SELECT Top 5 * FROM Computers " & _
  "Order By Price DESC", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Vous voyez ? Nous vous avions dit qu'ils étaient utiles.
En voici deux de plus que vous pourriez trouver intéressants. Supposons que votre base de données possède un champ nommé Budgeted pour le suivi de la quantité d'argent prévue à l'origine pour l'ordinateur. Vous voulez comparer le coût actuel au montant prévu par le budget ? Cette requête renvoie une liste des ordinateurs qui ont coûté davantage que le montant prévu :
objRecordSet.Open _
  "SELECT * FROM Computers " & _
  "Where (Budgeted < Price)", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Entretemps, cette requête calcule le prix moyen de tous les ordinateurs (SELECT AVG(Price) FROM Computers) et renvoie une liste de tous les ordinateurs qui ont coûté moins que le prix moyen :
objRecordSet.Open _
  "SELECT * FROM Computers " & _
  "WHERE Price < " & _
  "(SELECT AVG(Price) FROM Computers)", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Eh oui, vous avez raison, nous avons utilisé une requête de sélection dans notre clause Where. Comment cela fonctionne-t-il ? Tout cela est une autre histoire, pour un autre jour. Mais, comme vous pouvez le voir, elle ouvre la porte à l'extraction de toutes sortes d'informations pratiques avec vos requêtes SQL.

La morale de l'histoire
Comme nous l'avons fait remarquer au début de l'article de ce mois, nous n'étions pas sûrs de vouloir écrire un autre article sur les scripts de base de données. Nous sommes cependant contents de l'avoir fait malgré tout, en partie parce que nous pensons que vous trouverez certaines de ces requêtes utiles, mais également pour la raison suivante : si nous n'avions pas écrit cet article maintenant, nous aurions fini par devoir l'écrire un jour ou l'autre. Après tout, même Sir Arthur Conan Doyle fut forcé de ressusciter Sherlock Holmes. Il fit les premiers pas dans cette direction en écrivant un nouveau récit de Sherlock Holmes qui se passait avant sa mort. Après cela, cependant, il céda simplement à la pression de ses lecteurs, en concoctant une fable plus ou moins douteuse expliquant que Sherlock Holmes avait dû simuler sa propre mort. En fin de compte, tout le monde était content et tout était pour le mieux.
Ce qui est assez intéressant, c'est que, lorsque ce dernier récit de Sherlock Holmes parut, 30 000 nouveaux lecteurs s'abonnèrent à The Strand Magazine. Les éditeurs reconnaissants de Sir Arthur Conan Doyle en Grande-Bretagne et aux États-Unis répondirent en faisant de lui l'écrivain le mieux payé au monde.
Tiens... Sir Arthur Conan Doyle a redonné vie à un personnage très apprécié et est devenu l'écrivain le mieux payé du monde ; les scripteurs quant à eux ont redonné vie à un sujet très apprécié, et ceci sans avoir à simuler la mort de qui que ce soit. Vous pensez que les bonnes gens de TechNet Magazine l'ont remarqué ?

Les scripts embrouillés du Dr. Scripto
Le défi mensuel qui teste non seulement vos compétences à résoudre les énigmes, mais également vos compétences à écrire des scripts.

Avril 2008 : Choisissez une Lettre
Dans cette énigme du mois, vous devez insérer les lettres A à O dans les espaces bleus pour révéler le nom d'une fonction VBScript. Chaque lettre (A à O) doit être utilisée seulement une fois, et les lettres n'apparaissent pas dans l'ordre alphabétique. La lettre insérée peut être au début ou à la fin du nom de la fonction, ou n'importe où au milieu du nom de la fonction. Par exemple, dans la ligne suivante, vous devriez insérer la lettre D pour compléter le nom de fonction IsDate :
Maintenant, essayez. Insérez les lettres A à O pour révéler les noms de fonctions VBScript de cette grille :

Les scripts embrouillés du Dr. Scripto
Réponse : Choisissez une lettre, avril 2008

Les scripteurs Microsoft travaillent pour (enfin, sont employés par) Microsoft. Lorsqu’ils ne sont pas en train de jouer au base-ball, d’entraîner une équipe ou de regarder un match (ou de se livrer à de multiples autres activités), ils dirigent le Script Center TechNet. Vous pouvez le vérifier vous-même sur www.scriptingguys.com.


 Vigilance s&#233;curit&#233;: O&#249; se trouvent mes informations d’identification personnelle&#160;?
Vigilance sécurité
Où se trouvent mes informations d’identification personnelle ?
Frank Simorjay

Nous sommes tous conscients de l'importance des informations d’identification personnelle et de la nécessité de les protéger. Avant de pouvoir protéger ces informations toutefois, vous devez bien en comprendre la teneur. Il est facile de dire que tout ce que contient votre ordinateur est à protéger, mais que voulez-vous dire exactement par là ?
Pour répondre à cette question, j'ai commencé par examiner le problème de plus près, à isoler les types de données qui peuvent être sensibles et à essayer de trouver où les données peuvent être enregistrées sur votre ordinateur. Commençons par dire que le degré de sensibilité des informations dépend souvent de notre jugement personnel. Par exemple, certaines personnes se sentent menacées si leur nom est affiché dans les résultats d'une recherche. Bien sûr, à moins que vous n'habitiez sous un rocher, il y a de fortes chances que quelqu'un ait publié votre nom sur Internet. Pour en avoir le cœur net, utilisez votre moteur de recherche préféré pour trouver votre nom en ligne. N'oubliez pas que plus votre nom est commun, plus il sera difficile de trouver des éléments faisant réellement référence à vous, ce que vous pourriez considérer comme une bonne chose !
Si vous cherchez votre nom sur Internet, essayez également les sites de réseaux sociaux populaires tels que LinkedIn, Facebook et YouTube. Internet a une remarquable capacité à stocker et disperser des informations privées qui demandaient auparavant beaucoup d'efforts à trouver.
Il est plus difficile, à présent, de savoir exactement quelles informations vous devez protéger. Pour vous aider, j'ai pensé qu'il serait intéressant de voir si votre ordinateur renferme des informations potentiellement confidentielles dont vous n'êtes pas au courant et que vous pourriez vouloir protéger. Naturellement, toute information personnelle qui peut être utilisée pour voler votre identité est sensible, mais on peut en fait diviser ces informations en deux catégories : les informations qui sont facilement disponibles et les informations privées et généralement considérées comme critiques.
Les informations qui sont facilement disponibles ne sont pas généralement considérées comme des informations d’identification personnelle. Elles incluent votre nom et souvent aussi votre numéro de téléphone, votre adresse, votre adresse de messagerie, votre sexe, et, dans beaucoup de cas votre lieu de travail et certaines informations concernant vos études. Ces éléments sont souvent disponibles sur Internet et dans les annuaires téléphoniques. La divulgation de ces informations, qui consiste par exemple à permettre accidentellement à un spammeur de s'emparer de votre adresse de messagerie, peut être embêtante mais ne peut à elle seule mener à l'usurpation de votre identité.
Les informations sensibles sont des données privées qui sont un lien vers votre identité. Les données que vous ne devriez pas révéler publiquement incluent votre numéro de sécurité sociale (ou autre identifiant unique du même genre), les numéros de comptes bancaires, les numéros de cartes de crédit (particulièrement lorsqu'ils sont accompagnés de la date d'expiration et du numéro d'identification), le numéro de votre permis de conduire et vos empreintes digitales (ou autre information biométrique). Si une personne mal intentionnée s'emparait de ces informations, elle pourrait vous causer de sérieux ennuis. Il est important de savoir où et comment ces informations sont stockées sur Internet et sur votre PC. Dans cette optique, jetons un coup d'œil sur quelques méthodes simples qui permettent de trouver toute information personnelle enregistrée sur le disque dur de votre système.

Recherche d'informations d’identification personnelle sur votre ordinateur
Les informations d’identification personnelle se trouvent un peu partout. En fait, si vous fouilliez dans vos ordures, vous y trouveriez probablement des informations personnelles à caractère confidentiel. La protection de ces informations nécessite des efforts et de l'attention de votre part. En premier lieu, je vous conseille d'acheter une déchiqueteuse et de détruire tout document papier renfermant des informations personnelles.
Mais qu'en est-il des informations d'identification personnelle qui se cachent sur votre PC ? Il est parfois aussi difficile de trouver ces données que de les stocker en toute sécurité. Windows Vista® et plusieurs autres outils de recherche de bureau peuvent vous aider à trouver ces informations sur votre système. Toutefois, vous devez savoir quelles informations vous recherchez.
Pour illustrer ce problème, j'utiliserai des outils simples qui me permettront de vous de donner quelques exemples pratiques. J'utilise des scripts Windows PowerShell®. Windows PowerShell offre, entre autres, d'excellentes capacités de correspondance de chaînes. Dans le cadre de notre exercice, je me concentrerai sur la capacité de ce programme à établir des correspondances d'expressions régulières. Windows PowerShell (disponible à l'adresse microsoft.com/powershell) est un outil puissant qui est rapidement devenu une norme pour les tâches administratives.
En outre, j'utiliserai findstr.exe pour proposer un moyen de gérer les faux positifs, c'est-à-dire la capacité à négliger les fichiers qui peuvent contenir des chaînes apparemment intéressantes (en raison du caractère aléatoire des chaînes de données dans les fichiers binaires) mais qui ne sont en fait d'aucun intérêt ici. En d'autres termes, les fichiers autres que les fichiers texte peuvent être ignorés pour cet exercice.
J'ai choisi deux bons types d'informations d'identification personnelles : les numéros de sécurité sociale et les informations liées aux cartes de crédit. Ces données devraient être faciles à trouver si elles sont enregistrées sur votre disque dur en texte clair. La structure et le modèle des deux types d'informations sont suffisamment uniques pour permettre à un simple script de les localiser. Cependant, ces données sont également si sensibles que je serais tenté de vous demander pourquoi vous les stockez sur votre PC. Si vous choisissez cette option, vous devriez veiller à ce que ces données soient protégées. J'examinerai bientôt les façons de protéger vos informations personnelles. Je devrais toutefois admettre que la présente discussion est limitée : il existe d'autres types d'informations d'identification personnelle importantes que je n'ai pas inclus tels que les noms d'utilisateurs et les mots de passe.

Recherche d'un numéro de sécurité sociale
Voici une chaîne simple qui cherchera, dans les fichiers, n'importe quelle information qui correspond à un numéro de sécurité sociale standard comportant la structure X-XX-XX-XX-XXX-XXX-XX. À l'aide de Windows PowerShell, il vous suffit d'entrer les lignes suivantes :
Get-ChildItem  -rec -exclude *.exe,*.dll |
select-string " [0-9]{3}[-| ][0-9]{2}[-| ]
[0-9]{4}"
Ou bien, à l'aide de findstr.exe, assurez-vous que les fichiers binaires ne sont pas lus pour la recherche en utilisant ceci :
Get-ChildItem  -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
" [0-9]{3}[-| ][0-9]{2}[-| ][0-9]{4}"
Dans cet exemple, Get-ChildItem –rec effectue une recherche récursive des fichiers par répertoire qui commence par le répertoire dans lequel la commande a été exécutée. Findstr.exe cherche des chaînes dans les fichiers et Select-string est la fonction de recherche de chaînes de Windows PowerShell. (Findstr.exe propose une fonction similaire que je n'aborderai pas dans cet article). En outre, notez que l'espace de début dans l'expression régulière est intentionnel. Ceci aide à réduire les faux positifs en éliminant les informations inutiles, notamment les chaînes de registre telles que HKLM\SOFTWARE\tool\XXX-XX-XXXX.
Dans mon exemple, le modèle de recherche a renvoyé un exemple de fichier test que j'ai mis dans un sous-répertoire. lI a également trouvé des exemples dans un fichier XML indiquant des modèles de fichiers pour les numéros de carte de crédit et de sécurité sociale (voir figure 1).
Figure 1 Résultats renvoyés par la recherche d'un modèle de numéros
Figure 1 Résultats renvoyés par la recherche d'un modèle de numéros
J'utilise la capacité exclude dans le premier exemple pour ignorer tous les fichiers .exe et .dll. Vous pouvez découvrir d'autres types de fichiers qui provoquent également des faux positifs. Dans ce cas, vous pouvez utiliser exclude pour ajuster le processus de recherche.
Si vous recherchez seulement un numéro de sécurité sociale spécifique, vous pouvez procéder comme suit (en remplaçant "1 23 45 67 891 011 12" par votre numéro de sécurité sociale) :
Get-ChildItem  -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
"123 45 6789","123-45-6789"
Les résultats de cette recherche sont illustrés à la figure 2.
Figure 2 Recherche d'un numéro spécifique
Figure 2 Recherche d'un numéro spécifique

Recherche d'informations sur les cartes de crédit
Les informations sur les cartes de crédit sont un peu plus compliquées car les formats varient. Je voudrais, en plus, limiter les faux positifs (c'est-à-dire les résultats qui ne ressemblent à des numéros de cartes de crédit que par hasard). Néanmoins, la recherche relèvera probablement des séquences aléatoires qui sont simplement identiques aux numéros de cartes de crédit.
J'utilise des informations que j'ai trouvées dans l'essai « Anatomy of Credit Card Numbers » (Anatomie de numéros de cartes de crédit) de Michael Gilleland comme référence lorsque j'ai construit ces chaînes (voir merriampark.com/anatomycc.htm). Par exemple, ma chaîne de recherche spécifie que le premier numéro doit être un 4, 5 ou 6 puisque c'est ainsi qu'est défini le principal identificateur de la carte de crédit.
Ici, j'ai construit des chaînes simples qui rechercheront les termes Découvrir, MasterCard, et cartes Visa. Dans Windows PowerShell, ma chaîne de recherche ressemble à ceci :
Get-CchildItem  -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
 "[456][0-9]{15}","[456][0-9]{3}[-| ][0-9]{4}
[-| ][0-9]{4}[-| ][0-9]{4}"
Dans l'exemple affiché à la figure 3, j'ai utilisé la fonction exclude pour éliminer les fichiers .rtf, .rbl et .h. En outre, l'exemple de code recherche les chaînes de cartes de crédit qui ne comportent ni espace ni tiret. Malheureusement, cette méthode risque de renvoyer énormément de résultats. Vous pouvez donc utiliser cette autre commande pour la même fonction, mais elle ne tiendra pas compte des numéros de cartes sans espace ni tiret :
Figure 3 Utilisation d'exclude pour éliminer les résultats inutiles
Figure 3 Utilisation d'exclude pour éliminer les résultats inutiles
Get-ChildItem  -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
"[456][0-9]{3}[-| ][0-9]{4}[-| ][0-9]{4}
[-| ][0-9]{4}"
Puisque les cartes American Express sont considérablement différentes, j'ai créé une chaîne de recherche modifiée pour repérer le modèle de la carte. Dans Windows PowerShell, la chaîne de recherche ressemble à ceci :
Get-ChildItem -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
"3[47][0-9]{13}","3[47][0-9]{2}[-| ][0-9]{6}
[-| ][0-9]{5}"
La surcharge de données peut également concerner ces résultats. Cette commande alternative a la même fonction mais elle ne tiendra pas compte des numéros sans espace ou tiret :
Get-childitem -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
"3[47][0-9]{2}[-| ][0-9]{6}[-| ][0-9]{5}"
En rédigeant cet article, j'ai exécuté ces recherches sur mon propre système et j'ai été surpris de trouver mon numéro de sécurité sociale stocké à des endroits dans lesquels il n'aurait pas dû l'être. Il s'est avéré que les informations concernant mon numéro de sécurité sociale se trouvaient dans une note que j'avais écrite il y a quelque temps et que j'avais complètement oubliée. Je devrais donc faire attention à ce que j'écris !
Si vous voulez effectivement stocker de telles informations mais d'une manière sécurisée, essayez un outil tel que Password Safe (disponible à passwordsafe.sourceforge.net). Ou bien, chiffrez votre disque dur avec un outil tel que l'outil de chiffrement de lecteur BitLockerTM. Enfin, la boîte à outils de chiffrement pour ordinateurs portables (Data Encryption Toolkit for Mobile PC) propose des conseils éprouvés sur la protection des données sur un ordinateur portable. Ces solutions compliqueront au moins les choses à quelqu'un qui essaie d'obtenir des informations personnelles de votre PC.

Conclusion
Il est relativement facile de trouver des informations d'identification personnelle. Ce qui n'est pas évident, c'est de savoir qu'elles existent. N'oubliez pas qu'un logiciel ou un utilisateur malveillant qui arrive à accéder à votre système peut tout aussi bien utiliser des techniques de découverte similaires pour y trouver des informations. Faites bien attention où vous entrez des informations personnelles et si vous souhaitez les stocker, chiffrez-les.
J'aimerais remercier Matt Hainje pour m'avoir aidé à résoudre mes problèmes de scripts Windows PowerShell.

Frank Simorjay est responsable de programme technique pour l'équipe SA-SC (Solution Accelerators - Security and Compliance). Il crée des solutions de sécurité pour les clients de Microsoft, participe à des événements tels que Secure World Exposition (dont il est fondateur), propose des cours sur la sécurité et a contribué à toute une variété de revues et ouvrages sur la sécurité. Il a récemment écrit le Starter Kit de désinstallation de logiciels malveillants.


 Histoires de Bureau: D&#233;ploiement de Windows&#160;XP avec Windows&#160;AIK
Histoires de Bureau
Déploiement de Windows XP avec Windows AIK
Wes Miller

Il est étonnant (et impressionnant) de constater à quel point les clients peuvent être différents. Dans un monde parfait, tous les clients seraient toujours dans la même phase de déploiement de la même version de Windows. Cela faciliterait assurément les tests. Mais ce n'est bien entendu pas le cas. Tandis que certains d'entre vous sont déjà en plein
déploiement de Windows Vista® (ou ont peut-être déjà terminé) ou se préparent joyeusement à déployer un premier Contrôleur de domaine en lecture seule (RODC) Windows Server® 2008 en production, vous êtes tout aussi nombreux à me rappeler régulièrement (merci encore) que vous êtes également en cours de déploiement planifié de longue date de Windows® XP et/ou Windows Server 2003 R2.
J'ai reçu l'autre jour un message électronique d'un lecteur me demandant : « Qu'en est-il du Kit d’installation automatisée Windows AIK avec Windows XP ? Comment puis-je utiliser WAIK pour le déploiement de Windows XP » ? Je vais essayer de répondre à cette question.

Un regard différent sur WAIK
Il y a tout juste un an, j'ai écrit un article parlant de WAIK, l'ensemble d'outils puissants qui a été conçu pour vous aider à déployer Windows Vista (technetmagazine.com/issues/2007/01/DesktopFiles). Windows AIK prendra désormais également en charge le déploiement de Windows Server 2008, et ces deux systèmes d'exploitation ont une nouvelle infrastructure d'installation, les outils du WAIK étant principalement conçus pour en tirer parti. Pour le meilleur ou pour le pire, les versions de Windows antérieures à Windows Vista qui utilisent l'installation sans assistance ou Sysprep nécessitent que vous utilisiez des outils conçus spécifiquement pour eux. Mais je souhaite examiner une nouvelle fois WAIK pour mettre en évidence les outils que vous pouvez utiliser pour faciliter le déploiement de Windows XP.
Windows PE 2.0 Pour partir sur un terrain d'entente, examinons mon article de février 2008 (technetmagazine.com/issues/2008/02/DesktopFiles) sur le double amorçage avec Windows PE 2.0 et Windows XP. En gros, si Windows PE 2.0 fonctionne pour vous dans ce scénario, il fonctionnera également ici. La question que vous devez vous poser est, « Vais-je déployer Windows XP sur des systèmes dotés de moins de 512 Mo de RAM ou qui ne prennent pas en charge ACPI (Advanced Configuration and Power Interface) avec Windows Vista » ? Si la réponse à l'une des deux parties de cette question est oui, vous devrez utiliser Windows PE 1.6, et que vous y avez accès dans le cadre du programme Software Assurance. Seuls Windows PE 2.0 et 2.1 sont aujourd'hui disponibles gratuitement. Les versions 1.6 et antérieures nécessitent toujours l'inscription au programme Software Assurance.
ImageX/WIM ImageX et Windows Imaging Format (WIM) ont tous deux été conçus dès le départ pour fonctionner avec toutes les versions de Windows à partir de Windows 2000, sur les volumes NTFS comme FAT et donc, oui, vous pouvez absolument les utiliser pour déployer Windows XP (ou Windows Server 2003).
Services de déploiement Windows Les Services de déploiement Windows (WDS), qui remplacent les services d'installation à distance de Windows (RIS) étaient distribués à l'origine en tant que version hors bande (OOB) de WAIK 1.0 et ont été mis à jour et intégrés à Windows Server 2003 SP2. Ils sont maintenant livrés avec des composants supplémentaires dans Windows Server 2008, mais peuvent toujours être appliqués au déploiement de Windows XP.
Si vous disposez d'un serveur RIS, ou d'un serveur WDS exécuté en mode hérité, ceci ne s'appliquera pas beaucoup à vous. Mais si vous avez commencé la transition vers WDS en mode mixte ou natif, alors oui, considérez WDS comme un élément potentiel de votre scénario de déploiement de Windows XP.
Gestionnaire d'images système Windows (WSIM) WSIM s'applique réellement uniquement au déploiement de Windows Vista et de Windows Server 2008. Si vous déployez Windows Server 2003 ou une version précédente, WSIM ne vous sera pas d'une grande aide.

Outils de déploiement de Windows XP
Windows XP (comme toutes les versions de Windows, de Windows NT® 4.0 à Windows Server 2003) peut être déployé via un fichier unattend.txt ou une « image ». Dans le cadre de cet article, je ne vais pas m'attarder sur l'installation sans assistance, car elle est véritablement devenue obsolète. Si vous voulez tirer parti de WAIK, en particulier d'ImageX, vous effectuerez un déploiement à base d'image. Ainsi, au lieu d'un fichier unattend.txt, vous aurez besoin de Sysprep.inf, le format de fichier de réponse pour Sysprep.
Lorsque j'utilise ici le terme « image », je parle d'une méthode prélèvement d'image de système d'exploitation. Par le passé, vous avez vraisemblablement utilisé Ghost, PQDI ou d'autres outils de création d'image. Avant ImageX, Microsoft ne fournissait pas de méthode permettant de prélever le système d'exploitation et les applications préparées avec Sysprep et de les copier sur un ou plusieurs ordinateurs de destination.
Gardez deux points importants à l'esprit lorsque vous créez une image de Windows :
  • Vous ne pouvez pas modifier la couche d'abstraction matérielle (HAL), sauf en passant de systèmes monoprocesseur à des systèmes multiprocesseurs. Comme je l'ai mentionné dans les articles que j'ai publiés, vous ne pouvez pas modifier une image en toute sécurité si vous passez d'une architecture ACPI à une architecture non-ACPI.
  • Vous pouvez modifier les contrôleurs de stockage de masse. De nombreuses personnes pensent que c'est impossible mais ce n'est pas exact. Toutefois, pour y parvenir, vous devez utiliser Sysprep pour installer tous mes contrôleurs de stockage de masse potentiels dont les ordinateurs cibles peuvent avoir besoin. Après le déploiement, vous utiliserez Sysprep pour supprimer tout sauf le pilote qui s'est « collée » sur le système cible. J'y reviendrai dans un court instant.
Avec ces deux considérations à l'esprit, vous devriez être en mesure de préparer une image sur un système et de constater son fonctionnement approprié sur tout système cible utilisant une couche d'abstraction matérielle compatible ou identique.

Outils standard
Lorsque vous travaillez avec Windows XP dans un scénario de déploiement à base d'image, il est souhaitable de conserver trois éléments à portée de main.
Ref.chm La référence du fichier texte d'installation sans assistance. N'oubliez pas que pour toute version de Windows antérieure à Windows Vista, il est recommandé de configurer les composants facultatifs avant la création de l'image. Cependant, si vous devez installer des composants facultatifs après l'installation, vous pouvez le faire en exécutant sysocmgr.exe comme décrit à l'article support.microsoft.com/ kb/222444. Si vous déployez Windows XP Tablet PC Edition, suivez les étapes décrites à l'article go.microsoft.com/fwlink/?LinkId=108589 pour créer une image unique installant les composants de Tablet PC sur les systèmes applicables.
Sysprep Méthode prise en charge par Microsoft pour la création de systèmes à base de duplication de disque. Je continue de rencontrer occasionnellement des recommandations ventant des modificateurs d'identificateur de sécurité (SID) de fournisseurs tiers. Comme toujours, je recommande d'uniquement utiliser Sysprep car les autres outils ont tendance à manquer des emplacements de SID de Windows essentiels (surtout ceux qui ne sont pas publics).
Setup Manager La façon la plus rapide et la plus simple de créer un fichier Sysprep inf. Comme toujours, assurez-vous que vous possédez la version correcte à portée de main. Elle doit généralement être identique à la version de Windows que vous déployez (Windows XP SP2 pour les outils de déploiement de Windows XP SP2, par exemple).
Vous trouverez ces trois éléments sur le CD de Windows XP. Des versions mises à jour sont disponibles à l'adresse go.microsoft.com/fwlink/?LinkId=107541.
Il est également souhaitable de disposer de tap.exe. Cet utilitaire est inclus avec les outils Windows XP Embedded (go.microsoft.com/fwlink/?LinkId=108590), même dans la version d'évaluation gratuite. Sous Windows PE, tap.exe renverra des informations sur tous les périphériques Plug-and-play (PnP) qu'il a trouvés. Il vous indiquera en particulier la couche d'abstraction matérielle choisie par Windows PE pour le périphérique (voir la figure 1). Ceci est important principalement car la logique que Windows PE utilise pour sélectionner la couche d'abstraction matérielle est identique à la logique utilisée par une installation complète de Windows pour déterminer la couche d'abstraction matérielle à mettre en place. Par conséquent, tap.exe sous Windows PE est une méthode pratique pour déterminer la couche d'abstraction matérielle que Windows recommanderait pour un système spécifique.
Figure 1 L'utilitaire tap.exe peut vous indiquer la couche d'abstraction matérielle choisie par Windows PE pour un système spécifique
Figure 1 L'utilitaire tap.exe peut vous indiquer la couche d'abstraction matérielle choisie par Windows PE pour un système spécifique

Création de l'image
Vous pouvez parcourir les étapes suivantes pour démarrer avec votre propre image de Windows XP à déployer avec ImageX (oui, vous pourriez utiliser un autre outil d'imagerie, mais vous verrez bientôt pourquoi ImageX est l'outil idéal pour ce flux de travail particulier).
La première étape consiste à rassembler tous les outils et composants nécessaires, notamment Sysprep, Setup Manager, ImageX et Windows PE (version 2.0 ou 1.6, en fonction de vos besoins et de ce à quoi vous avez accès. N'oubliez pas que si vous utilisez la version 2.0 avec ImageX, vous devrez utiliser bootsect.exe avec le commutateur /nt52 lors de la création de votre partition pour vous assurer que votre code d'amorçage est compatible avec Windows XP).
Bien entendu, vous aurez également besoin d'un ordinateur équipé de Windows XP (n'importe quelle UGS), ainsi que des dernières mises à jour pour Windows et de tout autre logiciel installé. Dans l'idéal, ce système ne doit jamais avoir été joint au domaine auparavant : ceci réduit la probabilité de problèmes de domaine/réseau par la suite. Le système doit uniquement contenir des applications compatibles avec la création d'image et ne doit aucun élément stockant le nom de l'ordinateur, le SID, le domaine ou des informations spécifiques à l'utilisateur que Sysprep manquera ou sera incapable de remplacer au moment du changement de SID. En outre, il doit utiliser la couche d'abstraction matérielle que vous pensez déployer le plus fréquemment. Sur le matériel récent, il s'agira généralement de la couche d'abstraction ACPI multiprocesseurs (MP), en raison de la prédominance d'ACPI et de multicore (et précédemment d'hyperthreading, qui utilisait également une couche d'abstraction MP).
Configurez maintenant votre système Windows XP comme vous souhaitez qu'il apparaisse à vos utilisateurs finaux. Installez toutes les applications dont vous voulez que la majorité des utilisateurs disposent (et toute autre application ne pouvant pas être installée en mode sans assistance). Installez ou supprimez des composants facultatifs de Windows de sorte que le système soit configuré comme vous le souhaitez pour vos utilisateurs finaux. Configurez ensuite le Bureau. Ouvrez une session en tant qu'Administrateur et apportez toute les modifications nécessaires au profil, notamment l'arrière-plan du Bureau, l'économiseur d'écran, le menu Démarrer, etc. Par défaut (depuis Windows XP SP2), Sysprep copie pour vous les paramètres du compte Administrateur vers le compte Utilisateur par défaut.
Ensuite, exécutez Setup Manager (voir la figure 2), en spécifiant que vous voulez créer un nouveau fichier unattend de Sysprep et automatiser complètement l'installation. Notez qu'au cours de votre utilisation de Setup Manager, vous devrez entrer une clé de produit. Si vous ne disposez pas de celle-ci ou souhaitez l'ajouter ultérieurement par script (et que vous ne possédez pas de clé de licence en volume), vous pouvez spécifier la clé fournie dans le fichier unattend.txt par défaut sur le CD de Windows XP ou Windows Server 2003 (qui permettra de terminer l'installation mais pas de l'activer).
Figure 2 Utilisation de Setup Manager pour créer un fichier de réponse Sysprep
Figure 2 Utilisation de Setup Manager pour créer un fichier de réponse Sysprep
Vous devrez également fournir un nom d'ordinateur. Vous pouvez souhaiter automatiser ceci ultérieurement avec SQL ou tout autre mécanisme mais, pour le moment, entrez simplement une valeur et utilisez un script pour remplacer le nom de l'ordinateur avant d'exécuter Sysprep, une fois qu'une image WIM a été déployée sur celui-ci.
Souvenez-vous que si vous fournissez un mot de passe pour le compte Administrateur, il sera uniquement appliqué si le compte Administrateur de l'image n'en possède pas. Notez que la section de jonction de domaine ne vous permet pas de chiffrer les informations d'identification de jonction de domaine. Vous devez utiliser un compte avec le niveau de privilège le plus faible possible pour configurer le compte de l'ordinateur. Enfin, je vous suggère d'utiliser l'option Chaîne de version dans Setup Manager pour le suivi de la « version » de l'image que vous venez de créer.
Prenez maintenant le fichier Sysprep.inf, placez-le dans le répertoire C:\Sysprep avec Sysprep exe et setupcl.exe, et ajoutez ceci au fichier inf :
[Sysprep]
BuildMassStorageSection = Yes

[SysprepMassStorage]
Exécutez ensuite Sysprep –bmsd. Ceci modifiera votre fichier Sysprep.inf et ajoutera tous les identificateurs de stockage de masse dont votre installation de Windows a connaissance, comme illustré à la figure 3. Si vous voulez ajouter d'autres périphériques, vous pouvez le faire, mais vous pouvez également les ajouter à votre installation de Windows et réexécuter Sysprep –bmsd.
Figure 3 Ajout d'identificateurs de stockage de masse à Sysprep inf
Figure 3 Ajout d'identificateurs de stockage de masse à Sysprep inf
Ensuite, copiez votre fichier sysprep.inf vers un partage, puis exécutez sysprep.exe –factory et arrêtez votre système. Redémarrez sur Windows PE et connectez-vous à un partage UNC (recommandé) en utilisant ceci :
NET USE Y: \\myserver\myshare
/USER:DOMAIN\USER password
Capturez maintenant l'image en utilisant la commande suivante :
ImageX /capture C: Y:\NewImage.wim
"Factory Mode capture from 4/1/2008"
Arrêtez ensuite le système.
Vous disposez maintenant d'une image qui est prête à être mise à jour avec le mode factory. Je n'entraînerai pas ici dans les détails, mais, en gros, le mode factory est le mode le plus sûr pour la conservation de vos images jusqu'à ce qu'elles soient prêtes à être copiées pour le déploiement. Pour plus d'informations, consultez la documentation Windows XP pour deploy.cab mentionnée précédemment.
Lorsque vous êtes prêt à préparer les images pour le déploiement, c'est-à-dire une fois vous êtes prêt à effectuer le déploiement, démarrez sous Windows PE et utilisez Diskpart pour créer la ou les partitions souhaitées. Formatez les partitions avec la commande format, et utilisez bootsect.exe selon vos besoins pour appliquer le code d'amorçage pré-Windows Vista (/nt52). Connectez-vous maintenant à un partage UNC (ou à un cd sur lequel se situent votre ou vos images) en utilisant la commande suivante :
NET USE Y: \\myserver\myshare
/USER:DOMAIN\USER password
Appliquez ensuite les images comme suit :
ImageX /apply Y:\NewImage.wim C: 1
Pour terminer, redémarrez en mode Factory de Windows et effectuez toutes les mises à jour nécessaires pour votre image (vous devrez ici utiliser un fichier winbom.ini ; consultez ref.chm dans deploy.cab pour obtenir de l'aide). Winbom.ini doit toujours contenir les lignes suivantes, qui lui indiquent de resceller l'image pour qu'elle soit prête à exécuter la mini-installation au redémarrage suivant :
[FACTORY]
ResealMode = Mini
Lorsque vous avez terminé, arrêtez l'ordinateur. Répétez les étapes précédentes que vous avez utilisées pour capturer votre image, mais modifiez maintenant la commande de capture en :
ImageX /append C: Y:\NewImage.wim "Resealed
and ready for deployment – captured 4/4/2008"
En utilisant /append, vous économiserez un espace considérable. Vous venez de combiner votre mode Factory et vos images rescellées ensemble, et pouvez facilement basculer entre elles. Vous pouvez également utiliser /delete pour abandonner les éventuelles images que vous décidez de ne pas utiliser en cours de route. Mais souvenez-vous que ceci n'économisera pas d'espace. Seule la référence à l'image de volume spécifiée sera abandonnée. Vous devrez exporter toutes les images de volume que vous voulez garder si vous voulez vider l'espace inutilisé.
Vous pouvez maintenant voir comment WAIK, bien que conçu et pris en charge principalement pour Windows Vista et Windows Server 2008, peut vous aider, que vous déployiez les dernières versions de Windows ou des versions antérieures. Bien que vous deviez utiliser une combinaison d'outils de Windows XP et des outils du WAIK (principalement ImageX et probablement Windows PE 2.0), Microsoft fournit maintenant tout ce dont vous avez besoin pour démarrer le déploiement de toute version de Windows.

Wes Miller est responsable de produit technique pour CoreTrace (www.CoreTrace.com) à Austin au Texas. Il a auparavant travaillé chez Winternals Software et comme responsable de programme pour Microsoft. Vous pouvez contacter Wes à l’adresse suivante : technet@getwired.com.


 Sur le terrain: Une &#171;&#160;MARveilleuse&#160;&#187; initiative
Sur le terrain
Une « MARveilleuse » initiative
Neil Fawcett

Imaginez que vous ayez entassé 5 000 PC reconditionnés dans votre sous-sol et que plusieurs clients attendent pour les acheter. Le matériel est solide, mais le système d'exploitation... c'est une autre histoire ! Est-ce une copie légale ? Est-ce que chaque PC possède un système d'exploitation ? Pouvez-vous le revendre ?
Le nouveau programme MAR (Microsoft Authorized Refurbisher) vous permet de régler tous ces problèmes. À première vue, la solution est simple : aider les entreprises à reprendre les vieux PC, installer un système d'exploitation légal et revendre les PC.
Toutefois, le programme MAR va plus loin. D'un point de vue pragmatique, il représente une opportunité commerciale à la fois pour Microsoft et les reconditionneurs de PC. D'un point de vue légal, il contribue à éviter le piratage de logiciels (accidentel et intentionnel). Du point de vue écologique, il contribue à éviter que les PC n'aillent remplir les décharges. Enfin, il permet aux entreprises de mieux comprendre la stratégie des licences de Microsoft, surtout lorsqu'il s'agit d'un PC qui passe d'un propriétaire à l'autre.
Ce programme profite non seulement à Microsoft mais aussi aux reconditionneurs de PC. Il offre également d'importants avantages aux clients : ils obtiennent un PC dont les données ont été supprimées d'une manière professionnelle et qui comporte une version authentique de Windows® XP Édition familiale ou Windows XP Professionnel. Ils ont accès aux téléchargements, aux mises à jour et à des fonctionnalités améliorées. Enfin, ils ont accès aux versions futures de Windows. Le tout sur un ordinateur qui aurait pu aisément terminer dans une décharge et contribué à la pollution de l'environnement !
MAR cible les entreprises proposant en moyenne 5 000 PC rénovés par mois. Ces entreprises doivent démontrer ces capacités avant de pouvoir participer à ce programme. MAR est un programme international ouvert aux reconditionneurs OEM ainsi qu'à d'autres reconditionneurs agréés et siégeant aux États-Unis ou au Canada. Trois des reconditionneurs qui participent au programme sont Redemtech, Techturn et Apto Solutions.
L'attribution de licences sur de nouveaux produits logiciels peut parfois dérouter les vendeurs et acheteurs, mais le marché des PC reconditionnés ajoute un degré de complexité à ce que vous pouvez faire ou ne pas faire avec une vieille copie de Windows. MAR élimine ce problème pour les reconditionneurs. Il offre une série d'outils d'installation, notamment le kit RPK (Refurbisher Preinstallation Kit ou kit de préinstallation du reconditionneur) qui facilite la préinstallation de Windows XP sur toute une gamme de PC reconditionnés. Chaque licence est fournie avec un certificat d'authenticité ou COA de Microsoft. Si un PC qui a été reconditionné possède toujours son COA et que l'entreprise dispose du support de récupération original ou de l'image de récupération basée sur disque dur, il n'a pas besoin d'une nouvelle licence Windows. Cependant, MAR est conçu pour rationaliser le processus si les reconditionneurs ne disposent pas du support ou de l'image de récupération.
La réutilisation des ordinateurs, à travers les dons, le reconditionnement ou la revente, est un moyen exceptionnel d'accéder à la technologie, particulièrement pour les communautés défavorisées. Elle peut également aider à réduire les problèmes écologiques auxquels fait face l'industrie de la haute technologie. En fait, le marché des PC d'occasion contribue déjà à jouer un rôle très important dans la propagation de la technologie dans plusieurs économies en voie de développement.
Le marché des PC reconditionnés ne cesse de croître et l'on espère que des millions d'ordinateurs arriveront à échapper aux décharges avec le concours des entreprises commerciales. MAR joue un rôle stratégique au sein de Microsoft tout en aidant les grandes entreprises à déployer une solution matérielle peu onéreuse et extrêmement avantageuse. Étant donné les problèmes écologiques qui affectent la planète, le recyclage des ordinateurs n'a jamais été aussi important. Les initiatives telles que le programme MAR aideront à redonner vie aux vieux PC, permettant aux communautés défavorisées d'accéder à la technologie tout en jouant un rôle important dans le combat contre la pollution. En aidant tout simplement à clarifier la stratégie des licences de logiciels, ce programme contribue à rendre un PC reconditionné beaucoup plus attrayant. Vous trouverez plus d'informations sur le programme MAR à l'adresse microsoft.com/oem/mar.

Neil Fawcett contribue à plusieurs publications dans le secteur de l'informatique depuis plus de 20 ans. Il a également participé à plusieurs événements et publié 13 livres sur des sujets liés à l'informatique. Auparavant, Neil a travaillé dans la Silicon Valley en tant que développeur de logiciels et ingénieur en matériel.


 La vie secr&#232;te de Windows: Fichiers partag&#233;s
La vie secrète de Windows
Fichiers partagés
Raymond Chen

Vous êtes-vous jamais demandé pourquoi, lorsque vous désinstallez un programme, Windows® vous demande s'il doit supprimer un fichier dont la suppression « risque d'empêcher d'autres applications de s'exécuter correctement » ? Tout d'abord, ce message (illustré par la capture d'écran) ne vient pas de Windows mais du programme de désinstallation. La bonne question à poser est donc : « Pourquoi le programme de désinstallation de l'application affiche-t-il cette boîte de dialogue » ? En d'autres termes, une question à laquelle un utilisateur ne peut pas répondre ! Comment en sommes-nous arrivés là ?
Pour gérer les comptes de référence des fichiers utilisés par plusieurs applications (par exemple les bibliothèques de service d'exécution MFC qui sont utilisées par plusieurs programmes qui n'ont aucun rapport entre eux), le programme d'installation crée une entrée sous la clé de registre SharedDLLs. Cette entrée montre le fichier et son compte de référence. Si une entrée pour le fichier existe déjà, le compte de référence est incrémenté. Si cette entrée n'existe pas encore, le compte de référence est défini sur un. Réciproquement, lorsque le programme est désinstallé, le compte de référence est décrémenté et lorsqu'il arrive à 0, le fichier est supprimé parce qu'il n'y a plus de programme qui l'utilise. Du moins, c'était la théorie.
Devrais-je le supprimer ou pas ?
Devrais-je le supprimer ou pas ?
L'un des problèmes liés à ce modèle est qu'il suppose que tout le monde suit les mêmes règles. Mais il est très difficile de résister à la tentation de tricher puisqu'une telle action n'a aucune conséquence sur le tricheur.
Par exemple, supposons qu'il existe un programme qui utilise les bibliothèques de service d'exécution MFC dont le programme d'installation copie tout simplement ces bibliothèques dans le répertoire du système sans mettre à jour le compte de référence. Dans ce cas, lorsque ce programme est désinstallé, il ne fait que supprimer les bibliothèques. Considérons maintenant ce qui se produit lorsque ce programme tente de coexister avec un programme qui suit les règles. En gros, voici ce qui se passe :
  1. Installation du bon programme : les bibliothèques sont installées et le compte de référence est défini sur 1.
  2. Installation du mauvais programme : les bibliothèques sont installées mais le compte de référence reste inchangé.
  3. Désinstallation du mauvais programme : les bibliothèques sont supprimées.
Le résultat est que le bon programme s'arrête de fonctionner puisque les bibliothèques n'existent plus.
Voici un autre scénario :
  1. Installation du bon programme : les bibliothèques sont installées et le compte de référence est défini sur 1.
  2. Installation du mauvais programme : les bibliothèques sont installées mais le compte de référence est inchangé.
  3. Désinstallation du bon programme : le compte de référence atteint zéro et les bibliothèques sont supprimées.
Le résultat de ce scénario est que le mauvais programme s'arrête de fonctionner.
Les personnes qui ont écrit le bon programme on dû penser : « Bon, nous ne pouvons pas empêcher le mauvais programme de nous affecter, mais au moins nous pouvons essayer de ne pas affecter le mauvais programme ». Ainsi, juste avant de supprimer un fichier, ils s'arrêtent et affichent un message d'avertissement, « Ben voilà, je suis sur le point de supprimer un fichier. C'est d'accord ? S'il existe quelque part un mauvais programme qui utilise toujours ce fichier, ce mauvais programme sera affecté. Si vous avez un mauvais programme, vous devriez cliquer sur Ne pas supprimer ». Ce ne sont pas là les termes exacts, mais vous savez à quoi je fais référence. Même le célèbre Jeffrey Richter a recommandé cette approche dans un article du Microsoft Systems Journal de 1996.
En suivant cette méthode, l'utilisateur se retrouve malheureusement face à une question à laquelle il n'a aucune chance de répondre correctement.
Bien sûr, tous ceux qui adorent les commandes de confirmation Windows qui leur donnent la possibilité d'annuler chaque action avant son exécution devraient applaudir cette boîte de dialogue. Les programmes de désinstallation vous donnent un contrôle fichier par fichier du processus de désinstallation. Faites donc attention à ce que vous demandez. Vous risquez fort de l'obtenir !

Raymond Chen, The Old New Thing, et son livre du même titre traitent de l’historique de Windows et de la programmation Win32. Il se demande si la fusion nucléaire deviendra réalité avant sa mort.