 TechNet Magazine April 2008

TechNet Magazine April 2008

SQL Server 2008: Neuerungen

Die neue Version von SQL Server bietet eine Vielzahl an neuen Features und Verbesserungen, die die Leistung steigern, die Sicherheit erhöhen und das Leben für Datenbankadministratoren leichter machen. Hier finden Sie eine Übersicht über die wichtigsten Änderungen sowie darüber, was Sie von SQL Server 2008 erwarten können.

Randy Dyess SQL Server 2008: Sicherheit

Sicherheit ist ein Bereich von SQL Server, der weiterhin im Brennpunkt von Optimierungsbemühungen steht. Lernen Sie einige der wichtigsten sicherheitsbezogenen Änderungen kennen, die Sie in SQL Server 2008 vorfinden werden – von Verbesserungen bei der Verschlüsselung und der Authentifizierung bis hin zur richtlinienbasierten Verwaltung und dem neuen Überwachungssystem, das Ihnen bei rechtlichen Anforderungen hilft.

Rick Byham SQL Server 2008: Neue Datentypen

SQL Server 2008 bietet sieben neue integrierte Datentypen, die Ihnen die Arbeit mit komplexeren Daten ermöglichen und die Verwaltung strukturierter, halbstrukturierter und sogar unstrukturierter Daten vereinfachen. Verschaffen Sie sich einen detaillierten Einblick in diese neuen Datentypen, und finden Sie heraus, wie Sie sie einsetzen können, um die Datenverwaltung in Ihrer Infrastruktur zu verbessern.

Kelly Wilson SQL Server 2008: Abfrageleistung in Data Warehouses

SQL Server 2008 bietet leistungsfähigere Funktionen für relationales Data Warehousing. In diesem Artikel werden einige wichtige leistungsrelevante Data Warehousing-Features betrachtet, und es wird gezeigt, wie Sie mit diesen neuen Technologien die Abfrageleistung optimieren können.

S. Agarwal, T. Grabs, and J. Hammer SQL Server: Minimieren der Blockierung in SQL Server

Obwohl das Sperren wichtig ist, um gleichzeitiges Lesen und Schreiben in einer Datenbank zu unterstützen, kann das Blockieren die Systemleistung beeinträchtigen. Erfahren Sie, wie Sie Ihre SQL Server-Datenbank optimieren können, um das Blockieren zu minimieren, und wie Sie das System überwachen können, um besser zu verstehen, wie sich das Sperren auf die Leistung auswirkt.

Cherié Warren Microsoft Office: Integrieren von Access-Datenbanken in SharePoint

Viele Unternehmen nutzen weiterhin Microsoft Access. Glücklicherweise können Sie mit Microsoft Office SharePoint Server 2007 die Legacy-Access-Daten integrieren. Erfahren Sie, wie Sie diese Tools verwenden können, um neue Lösungen für Ihre Organisation zu erstellen.

Peter Serzo Mitteilung der Redaktion: An alte und neue Freunde

Joshua Hoffman Briefe: Leser sagen ihre Meinung

Toolbox: Neue Produkte für IT-Experten

Greg Steen SQL – Fragen und Antworten: Vergrößern von Datenbanken, Verwenden von IFiltern und Herstellen von Remoteverbindungen

Erfahren Sie, wie Sie Datenbanken programmgesteuert vergrößern und IFilter verwenden können, und machen Sie sich mit Firewalleinstellungen vertraut, die Remoteverbindungen mit SQL-Servern unterstützen.

Edited by Matthew Graven Schwerpunkt Dienstprogramme: Web Capacity Analysis Tool

Weblogs und Datenverkehrsanalysen können Ihnen eine gute Vorstellung davon geben, welche Art von Datenverkehr Sie im Laufe der Zeit erwarten können. Doch wie können Sie herausfinden, was Ihre Infrastruktur bewältigen kann? Das kostenlose Web Capacity Analysis Tool kann Ihnen helfen herauszufinden, was Ihre Systeme bei hoher Belastung leisten werden.

Greg Steen The Cable Guy: Problembehandlung bei der NAP-Erzwingung

Die Problembehandlung für das Erzwingungsverhaltens in der NAP-Plattform kann schwierig sein. The Cable Guy erklärt, wie die Evaluierung von NAP-Integritätsrichtlinien funktioniert und wie Sie die häufigsten Probleme beheben können.

Joseph Davies Windows PowerShell: Hier signieren, bitte

Die AllSigned-Ausführungsrichtlinie bietet die sicherste Windows PowerShell-Umgebung. Wie signieren Sie Ihre Windows PowerShell-Skripts? Don Jones zeigt Ihnen, wie es geht.

Don Jones Hey, Scripting Guy!: Die Rückkehr des Datenbankskripts

Ein Überblick über das Signieren Ihrer Skripts für verbesserte Sicherheit.

The Microsoft Scripting Guys Sicherheit auf dem Prüfstand: Wo sind meine personenbezogenen Informationen?

Bevor Sie Ihre personenbezogenen Informationen wirksam schützen können, müssen Sie wissen, wo sie auf Ihrem PC gespeichert sind. Im Folgenden wird untersucht, wie Sie Skripts schreiben können, mit denen Sie die auf Ihrem Computer gespeicherten persönlichen Daten finden. Sie werden vielleicht überrascht sein, was diese Skripts alles aufdecken.

Frank Simorjay Die Desktopdateien: Bereitstellen von Windows XP mit dem WAIK

Das Windows Automated Installation Kit wurde hauptsächlich für Windows Vista und Windows Server 2008 entwickelt. Aber haben Sie gewusst, dass es Ihnen auch bei der Bereitstellung von Windows XP und Windows Server 2003 helfen kann? Hier finden Sie die erforderlichen Informationen für die ersten Schritte.

Wes Miller Berichte aus der Praxis: MAR – Eine großartige Initiative

Erfahren Sie, wie das neue MAR-Programm (Microsoft Authorized Refurbisher) Unternehmen helfen kann, verwirrende Softwarelizenzierungsprobleme beim Instandsetzen veralteter Computer zu behandeln.

Neil Fawcett Windows Confidential: Gemeinsam genutzte Dateien

„Möchten Sie diese gemeinsam genutzte Datei wirklich entfernen?“ Raymond Chen erklärt, weshalb ein Deinstallationsprogramm diese Frage stellen könnte, wenn Sie ein Programm entfernen.

Raymond Chen


 SQL&#160;Server&#160;2008: Neuerungen
SQL Server 2008 Randy Dyess

Neuerungen
Kurz zusammengefasst:
  • Leistungsfähigere Verwaltung
  • Verbesserte Leistung und Skalierbarkeit
  • Bessere Sicherheit und Verfügbarkeit
  • Änderungen für Entwickler

Microsoft hat wieder einmal eine neue SQL Server-Version veröffentlicht, die verspricht, das Leben von Datenbankadministratoren zu erleichtern. Die aktuelle Version ist SQL Server 2008. Diese bietet eine große Vielfalt an neuen
Features und Funktionen, die die Verwaltung um einiges vereinfachen werden.
Datenbankadministratoren, die jemals SQL Server® 2005 verwendet haben, werden viele der Features, die sie tagtäglich verwenden, auch hier wiederfinden. Sie werden jedoch bald feststellen, dass diese vertrauten Tools in SQL Server 2008 verbessert wurden. Die neue Funktionalität, die auf den vorhandenen Features basiert, trägt deutlich zu einer Verringerung der Anzahl der Problemumgehungen oder Anpassungen bei, die früher zum Verwenden verschiedener Features in komplexen Datenbankumgebungen erforderlich waren.
Die neuen Features in SQL Server 2008 betreffen zahlreiche Datenbankaufgabenbereiche, wodurch ihre Kategorisierung erschwert wird. Beim Einordnen von Features unter verschiedenen Themen fällt mir auf, dass einige Leser sich vermutlich fragen werden, warum ich Feature X in die Kategorie Y eingeordnet habe, wenn es doch eindeutig in die Kategorie Z gehört. Das hängt ganz von der Perspektive ab und davon, wie Ihr Unternehmen seine Geschäfte betreibt.
Mir ist klar, dass Datenbankverwalter oft viele verschiedene Aufgabenbereiche abdecken, doch ich werde versuchen, die neuen Features aufzuschlüsseln, damit sie in die folgenden allgemeinen Kategorien passen: Verwaltung, Skalierbarkeit, Leistung, Verfügbarkeit, Sicherheit, Entwicklung sowie Business Intelligence.

Neuerungen bei der Verwaltung
Für Datenbankadministratoren (wie mich) wird SQL Server 2008 durch seine zusätzliche Verwaltungsfunktionalität zu einem sehr interessanten neuen Produkt. Die neue Richtlinienverwaltung, die Funktion zur Abfrage mehrerer Server, die Konfigurationsserver und das Warehouse für Datensammlung und -verwaltung bieten leistungsfähige neue Möglichkeiten für Datenbankadministratoren, die häufig für das Verwalten großer und komplexer Datenbankumgebungen mit Hunderten oder Tausenden von Datenbanken auf Dutzenden oder gar Hunderten von Servern zuständig sind.
Das SQL Server 2008-Richtlinienverwaltungsfeature, das in CTPs (Community Technology Previews) eigentlich Declarative Management Framework genannt wurde, ermöglicht Ihnen das Erstellen und Ausführen von Konfigurationsrichtlinien für einen oder mehrere Datenbankserver. Mit diesen Richtlinien können Sie sicherstellen, dass für alle Zielserver und Zieldatenbanken Standardkonfigurationseinstellungen angewendet und verwaltet werden. Ein Beispiel für dieses Feature finden Sie in Abbildung 1.
Abbildung 1 Die Richtlinie für den Daten- und Protokolldateispeicherort
Abbildung 1 Die Richtlinie für den Daten- und Protokolldateispeicherort
Richtlinien werden aufgrund einer vordefinierten Reihe von Facets erstellt. Jedes Facet enthält eine Untergruppe von SQL Server 2008-Konfigurationseinstellungen und anderen Ereignissen, die Sie steuern können. Sie paaren diese Facets mit Bedingungen, um eine Richtlinie zu erstellen. Bedingungen sind die Werte, die für die Eigenschaften eines Facet, die Konfigurationseinstellungen oder andere in diesem Facet enthaltenen Ereignisse zulässig sind.
Bedingungen sind außerdem Werte, die für Richtlinienfilter verwendet werden. Angenommen, Sie wollen, dass die Richtlinie nur für eine bestimmte Datenbank ausgeführt werden soll. In diesem Fall können Sie eine Bedingung erstellen, die den Namen der Datenbank enthält, und sie dann der Richtlinie hinzufügen. Jetzt wird die Richtlinie nur auf diese eine Datenbank angewendet. „SQL Server 2008-Richtlinienverwaltung“ klingt vielleicht komplex, aber wenn Sie sie einmal ausprobiert haben, werden Sie erkennen, dass sie ziemlich einfach zu verwenden ist.
Die neuen Funktionen für Mehrserverinteraktion und Konfigurationsserver sind nützlich, wenn Sie Abfragen für mehrere Server gleichzeitig ausführen müssen. Sie können Server in Ihrem Management Studio registrieren und dann die Server zusammen in einer Gruppe platzieren. Wenn Sie eine Richtlinie oder Abfrage für alle Server in der Gruppierung ausführen müssen, klicken Sie einfach mit der rechten Maustaste auf die Gruppierung, und führen Sie die Aufgabe aus.
Hinzu kommt der Vorteil, dass Sie dieses Feature konfigurieren können, um ein ResultSet pro Server zurückzugeben oder alle ResultSets in einem einzigen großen ResultSet zu vereinigen. Sie können zudem angeben, ob die Server- und Datenbanknamen Teil der Ergebnisse sein sollen, damit Sie die individuellen Ergebnisse der einzelnen Server unterscheiden können. In der Lage zu sein, die registrierten Server auf dem Konfigurationsserver zu speichern, statt im Management Studio der einzelnen Benutzer, ist ein großer Vorteil.
Ein anderes interessantes neues Verwaltungsfeature ist der Datensammler. Datenbankadministratoren müssen oft Verwaltungsdaten von einer großen Anzahl von Servern erfassen, und viele Administratoren haben ihre eigenen benutzerdefinierten Lösungen dafür erstellt. Der Datensammler ist eine integrierte Methode, die das Sammeln der verwaltungsbezogenen Daten erleichtert. Er ermöglicht Ihnen, SQL Server-Agent und SQL Server Integration Services (SSIS) zu verwenden, um ein Framework zu erstellen, das Ihre Daten sammelt und speichert und gleichzeitig eine Problembehandlung, eine Überwachung und einen Sammlungsverlauf bietet.
Im Unterschied zu Drittanbietertools und benutzerdefinierten Aufgaben wird der Datensammler von den meisten Datenbankadministratoren schnell verstanden, da er SQL Server-Agent und SSIS verwendet, um einen Satz von Aufträgen und Paketen zu erstellen, mit denen Verbindungen verwaltet und die Sammlung und Speicherung von Daten durchgeführt werden (siehe Abbildung 2). Nachdem diese Daten an einem zentralen Speicherort gespeichert wurden, der als das Verwaltungs-Data Warehouse bezeichnet wird, können sie durch eine Reihe von T-SQL-Anweisungen und SQL Server 2008 Reporting Services-Berichten angezeigt und organisiert werden. Durch diesen zentralen Datenspeicher wird es viel leichter, die allgemeinen Verwaltungsmetriken der Datenbankumgebung zu analysieren und anzuzeigen.
Abbildung 2 Datensammler-Protokolldatei zur Datenträgerverwendung
Abbildung 2 Datensammler-Protokolldatei zur Datenträgerverwendung

Neuerungen bei der Skalierbarkeit
Im Laufe der Jahre mussten SQL Server-Datenbankadministratoren feststellen, dass der Umfang der Datenbankumgebungen stetig zunimmt. Mit der zunehmenden Größe Ihrer Datenbankumgebung benötigen Sie neue Methoden und Tools, um die Skalierbarkeit zu erzielen, die für die meisten Unternehmen erforderlich ist. SQL Server 2008 enthält mehrere neue Features, die dabei helfen.
SQL Server 2008 umfasst eine integrierte Komprimierung, die Ihnen ermöglicht, die Datenbank- und Transaktionsprotokolldateien, die der komprimierten Datenbank zugeordnet sind, zu komprimieren. In SQL Server 2005 wurde die Möglichkeit eingeführt, Daten in einer schreibgeschützten Datei oder Dateigruppe zu komprimieren, doch bei dieser Art der Komprimierung wurde einfach die Komprimierungsmöglichkeit von Windows® NTFS verwendet. Mit SQL Server 2008 haben Sie die Möglichkeit zur Komprimierung auf Zeilen- und auf Seitenebene. Dies bietet Vorteile, die Sie bei der Komprimierung auf Datendateiebene nicht haben.
Die Komprimierung auf Zeilen- und Seitenebene verringert den Umfang des benötigten Datenspeicherplatzes und reduziert den Umfang des benötigten Speichers, da die Daten im Speicher komprimiert bleiben. Komprimierte Daten im Speicher führen zu einer verbesserten Speichernutzung, von der die Skalierbarkeit vieler Systeme profitiert.
In SQL Server 2008 wird außerdem die Komprimierung auf Sicherungsebene eingeführt. Obwohl Datenbanksicherungen nur eine Sicherungskopie für den aktiven Anteil der Datenbank erstellen, sind dies trotzdem Hunderte von Gigabyte oder gar Dutzende von Terabyte. In Datenbankumgebungen, die mehr als eine Kopie einer Sicherungsdatei mit einer Größe von mehreren Terabyte enthalten, nehmen diese Sicherungen oft wertvollen Speicherplatz ein, der effektiver verwendet werden könnte. Dadurch, dass Datenbankadministratoren ermöglicht wird, ihre Sicherungsdateien zu komprimieren, gibt SQL Server 2008 einen Teil dieses Speicherplatzes frei, sodass er für Livedaten verwendet werden kann.
Abgesehen davon, gibt es die Ressourcenkontrolle. Mit diesem neuen Feature können Sie den Umfang der Ressourcen definieren, die einzelne oder Gruppierungen von Arbeitsauslastungen bei der Ausführung verwenden. Mit der Ressourcenkontrolle können Sie eine Umgebung erstellen, in der viele verschiedene Arbeitsauslastungen auf einem Server nebeneinander existieren können, ohne befürchten zu müssen, dass eine oder mehrere Arbeitsauslastungen den Server überfordern und die Leistung der anderen Arbeitsauslastungen herabsetzen.
Der Vorteil dieses Features besteht darin, dass Sie den Gesamtumfang der Ressourcen, die auf Ihren Datenbankservern verfügbar sind, effektiver verwenden können. In Abbildung 3 wird ein Beispiel für das Verwenden der Ressourcenkontrolle zur Begrenzung der Aktivität auf einem Server gezeigt.
Figure 3 Aktivitätsbeschränkung mit der Ressourcenkontrolle (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

Neuerungen bei der Leistung
Die allgemeine Leistung von Datenbanken wird mit SQL Server 2008 verbessert. Dank mehrerer neuer in SQL Server 2008 enthaltener Features können Sie die Leistung Ihrer Datenbanken und der dafür ausgeführten Anwendungen steuern und überwachen.
Wenn in jeder Sekunde eine große Anzahl von Transaktionen durchgeführt wird, kann die Sperre, die in der Regel während dieser Transaktionen auftritt, eine negative Auswirkung auf die Leistung Ihrer Datenbankanwendungen haben. SQL Server wurde so entworfen, dass es die Gesamtanzahl der Sperren in einem Prozess verringert, indem die Sperren angefangen bei den kleineren Sperren auf Zeilenebene und Seitenebene auf die großen Sperren auf Tabellenebene ausgeweitet werden. Es ist wichtig zu verstehen, dass diese Sperrenausweitung Probleme verursachen kann. Zum Beispiel kann eine einzige Transaktion eine gesamte Tabelle sperren und verhindern, dass andere Transaktionen mit dieser Tabelle arbeiten.
SQL Server 2008 arbeitet mit der Methode der Tabellenpartitionierung (die in SQL Server 2005 eingeführt wurde), um dem SQL Server-Modul zu ermöglichen, Sperren vor der Tabellenebene zur Partitionsebene weiterzuleiten. Diese Zwischenebene für Sperren kann die Auswirkung der Sperrenausweitung auf Systeme, die Hunderte und Tausende von Transaktionen pro Sekunde verarbeiten müssen, deutlich verringern.
SQL Server 2008 bietet mehrere neue Abfrageprozessorverbesserungen für die Interaktion der Abfrage mit partitionierten Tabellen. Der Abfrageoptimierer kann jetzt Abfragesuchen für Partitionen durchführen, wie er das für einzelne Indizes tun würde, indem er nur mit der Partitions-ID und nicht der Partitionierungsmethode auf Tabellenebene arbeitet.

Neuerungen bei der Verfügbarkeit
Mit der zunehmenden Komplexität der Datenbankumgebungen und der zunehmenden Größe der Datenbanken wird es immer schwieriger, eine hohe Verfügbarkeit dieser Datenbanken sicherzustellen. Die vertrauten Methoden, die Sie früher verwendet haben, um eine hohe Verfügbarkeit zu erreichen, sind in SQL Server 2008 weiterhin vorhanden. Einige dieser Features sind jedoch in SQL Server 2008 verbessert worden, und es wurden einige neue hinzugefügt.
Mit SQL Server 2005 haben viele Administratoren angefangen, die Datenbankspiegelung zu implementieren, um eine hohe Verfügbarkeit zu erreichen. SQL Server 2008 bietet viele Verbesserungen für die Praxis der Datenbankspiegelung. In der Vergangenheit wies die Datenbankspiegelung gelegentlich Leistungsprobleme auf, die mit dem Verschieben verschiedener Transaktionsprotokolldaten vom Prinzipal zu den gespiegelten Datenbanken zusammenhingen. Als Reaktion darauf verringert SQL Server 2008 jetzt den Umfang der Informationen, die über das Netzwerk vom Transaktionsprotokoll des Prinzipals zum Transaktionsprotokoll der Spiegelung verschoben werden, indem die Informationen vor dem Senden an das Transaktionsprotokoll der Spiegelung zur Absicherung komprimiert werden.
Sie haben jetzt die Möglichkeit, beschädigte Datenseiten auf dem Prinzipal zu reparieren. Wenn eine Prinzipaldatenbank fehlerhafte Datenseiten aufgrund der Fehler 823 und 824 aufweist, kann der Prinzipal von den gespiegelten Servern eine neue Kopie der Datenseiten anfordern. Diese Anforderung fehlerfreier Datenseiten ist ein automatisierter Prozess, der für alle Benutzer transparent ist, die gerade auf die Prinzipaldatenbanken zugreifen.
Ein anderes neues Feature, Hot Add CPU, ermöglicht, einem Datenbankserver zusätzliche CPUs hinzuzufügen, ohne die Verfügbarkeit der Datenbanken auf diesem Server zu beeinträchtigen. Sie sollten jedoch wissen, dass Hot Add CPU einige Einschränkungen aufweist, da es nur beim Ausführen der Itanium-basierten 64-Bit-Windows Server® 2008 Enterprise Edition oder Datacenter Edition von Nutzen ist und die Enterprise Edition von SQL Server 2008 erfordert.

Neuerungen bei der Sicherheit
SQL Server 2005 hat Datensicherheit in Form von Datenverschlüsselung eingeführt. Mit SQL Server 2008 ist die Verschlüsselung durch die Einführung zweier Features verbessert worden: der erweiterbaren Schlüsselverwaltung und der transparenten Datenverschlüsselung.
Die erweiterbare Schlüsselverwaltung ermöglicht, dass eine verbesserte Struktur für eine sichere Speicherung der Schlüssel sorgt, die in der Verschlüsselungsinfrastruktur verwendet werden – nicht nur in der Datenbank selbst, sondern auch außerhalb der Datenbank in Softwaremodulen von Drittanbietern oder mit einem Hardwaresicherheitsmodul.
Die transparente Datenverschlüsselung bietet eine verbesserte Flexibilität beim Verschlüsseln von Daten, indem sie ermöglicht, dass die Verschlüsselung eine Eigenschaft der Datenbank und nicht einfach nur das Ergebnis der Funktionen in einer Codezeile ist. Das Ergebnis ist, dass Administratoren die große Zahl der Änderungen, die für ihre Datenbankstruktur und ihren Anwendungscode erforderlich sind, nicht durchführen müssen, wenn sie eine Verschlüsselung auf Datenebene durchführen. Der Code in Abbildung 4 veranschaulicht, wie Sie eine Datenbank mithilfe der transparenten Datenverschlüsselung verschlüsseln können.
Figure 4 Verwenden der transparenten Datenverschlüsselung (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

Änderungen für Entwickler
Datenbankadministratoren sind nicht die einzigen, die direkt von den Änderungen in SQL Server 2008 profitieren werden. Eine Reihe neuer Features wurde entworfen, um Datenbankentwickler zu unterstützen. Diese neuen Features reichen von neuen T-SQL-Verbesserungen zu neuen Komponenten, die Entwicklern helfen können, Datenbankabfragen zu erstellen und zu verwenden.
Viele Datenbankentwickler sind für das Erstellen der Abfragen verantwortlich, die zum Zurückgeben der für ihre Anwendungen erforderlichen Daten notwendig sind. Sie sind vermutlich mit dem LINQ-Tool (Language Integrated Query) vertraut, mit dem Datenbankentwickler Abfragen für eine Datenbank veröffentlichen können, indem sie eine auf Microsoft® .NET basierte Programmiersprache statt der üblichen T-SQL-Anweisungen verwenden. LINQ wird von SQL Server 2008 verbessert, indem ein neuer LINQ to SQL-Anbieter bereitgestellt wird, der Entwicklern die Ausgabe von LINQ-Befehlen direkt für SQL Server-Tabellen und -Spalten ermöglicht. Dadurch wird die für das Erstellen neuer Datenabfragen benötigte Zeit verkürzt.
Beim Entwickeln anhand von Datenbanken verwenden Entwickler Objekte höherer Ebene, die sie einzelnen Datenbanktabellen und -spalten zuordnen. Diese Objekte, auch Entitäten genannt, repräsentieren die für Datenbankanwendungen erforderlichen Daten, und deshalb müssen Entwickler mit der eigentlichen Speicherstruktur der Daten und dem Schema der Datenbank nicht vertraut sein. Das neue ADO.NET Entity Framework ermöglicht Entwicklern jetzt, mithilfe dieser Entitäten Datenbankabfragen zu erstellen. Die Abstraktion der Datenbankstruktur gestattet Entwicklern, produktiver zu sein.
SQL Server 2008 stellt viele verschiedene Verbesserungen für T-SQL bereit, die Datenbankentwicklern ermöglichen, effizienter zu sein. Ein Beispiel ist die neue MERGE-Anweisung, die Entwicklern ermöglicht, vor dem Einfügen der Daten ihre Existenz zu prüfen. Durch diese Überprüfung vor dem Durchführen der INSERT-Anweisung können die Daten aktualisiert werden. Es ist nicht mehr notwendig, komplexe Verknüpfungen zu erstellen, um existierende Daten zu aktualisieren und noch nicht existierende Daten einzufügen, und das alles in einer einzigen Anweisung.
Außerdem wurde die Trennung der Uhrzeit- und Datumsdaten vom kombinierten Datum/Uhrzeit-Datentyp vereinfacht. SQL Server 2008 führt zwei separate Datentypen ein, um die Datums- und Uhrzeitdaten zu behandeln. Verschiedene Datentypen bewirken eine verbesserte Leistung für viele Abfragen, da es nicht mehr notwendig ist, einen Datenvorgang durchzuführen, bevor die Daten in der Abfrage verwendet werden können.
Beim Erstellen neuerer Datenbankstrukturen stellen Datenbankentwickler oft fest, dass sie die Struktur der Datenbanken ausdehnen müssen, um Zuordnungsanwendungen zu implementieren. In SQL Server 2008 kann dieses Problem mit neuen räumlichen Datentypen behandelt werden. Die zwei räumlichen Datentypen GEOGRAPHY und GEOMETRY ermöglichen Entwicklern, ortsspezifische Daten direkt in der Datenbank zu speichern, ohne diese Datenelemente in Formate zerlegen zu müssen, die für andere Standarddatentypen geeignet sind. Der Code in Abbildung 5 ist ein Beispiel für eine einfache Tabelle mit räumlichen Daten.
Figure 5 Eine einfache Tabelle mit räumlichen Daten (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
Ein sehr häufiges Problem, mit dem Datenbankentwickler früher konfrontiert wurden, war die Frage, wie sie große binäre Objekte, wie z. B. Dokumente und Mediendateien, speichern und verwenden können. Die häufig verwendete Methode bestand darin, die Dateien außerhalb der Datenbank zu speichern und in der Datenbank nur einen Zeiger zur externen Datei zu speichern. Bei dieser Methode müssen Sie jedoch beim Verschieben der Datei daran denken, den Zeiger zu aktualisieren.
SQL Server 2008 behandelt dieses Problem mit dem neuen FILESTREAM-Datentyp. Mit diesem Datentyp können Dateien weiterhin außerhalb der Datenbank gespeichert werden, die Daten werden aber zwecks Transaktionskonsistenz als Teil der Datenbank angesehen. Dies ermöglicht die Verwendung häufiger Dateivorgänge, während die Leistungs- und Sicherheitsvorteile der Datenbank weiterhin beibehalten werden.

Neuerungen bei Business Intelligence
Die in den letzten Jahren zunehmende Verwendung von SQL Server wurde größtenteils durch die Übernahme von Business Intelligence-Strategien gefördert. Business Intelligence-Funktionen sind nichts Neues in SQL Server, aber SQL Server 2008 bringt einige neue Features mit sich.
Wenn zum Beispiel Daten in Data Warehouses gespeichert werden, wird oft aufgrund von NULL-Werten Speicherplatz verschwendet. Spalten, die NULL-Werte speichern, verbrauchen den Speicherplatz der größten zulässigen Datengröße, die in der Spalte definiert ist. Dies bedeutet, dass eine Spalte mit Tausenden von NULL-Werten tatsächlich viele MB Speicherplatz einnehmen kann, ohne wirklich Daten zu speichern.
SQL Server 2008 führt Spalten mit geringer Dichte ein, sodass NULL-Werte gespeichert werden, ohne physischen Speicherplatz auf dem Datenträger einzunehmen. Da Spalten mit geringer Dichte eigentlich keinen Speicherplatz benötigen, können Tabellen, die solche platzsparenden Spalten enthalten, die Spaltenbeschränkung von 1024 überschreiten.
SQL Server 2008 führt zudem zum Verwalten inkrementeller Änderungen, die in das Data Warehouse geladen werden müssen, eine neue Methode namens „Change Data Capture“ ein. Bei dieser Methode werden geänderte Daten erfasst und in einem Satz von Änderungstabellen platziert. Die Erfassung aktualisierter, gelöschter und eingefügter Daten in einem problemlos nutzbaren Speicherschema ermöglicht das inkrementelle Laden der Data Warehouses seitens der Tabellen – im Gegensatz zu früher, als benutzerdefinierte insert-Anweisungen erstellt werden mussten, die vor dem Aktualisieren des Data Warehouse versuchten, die Änderungen festzustellen, die an den vorhandenen Datenzeilen vorgenommen wurden.

Zusammenfassung
Dies ist nur eine kurze Übersicht darüber, was SQL Server 2008 zu bieten hat. Die vielfältigen neuen Features und die Updates zu vorhandenen Features wird die Arbeit der Datenbankadministratoren und Datenbankentwickler erleichtern. Letztlich wird dieses Produkt eine stark verbesserte Leistung und Skalierbarkeit für die wachsenden Ansprüche moderner Datenbanken bieten.

Randy Dyess ist ein Mentor bei Solid Quality Mentors. Sein Spezialgebiet sind SQL Server-OLTP-Systeme. Randy Dyess ist der Autor von TransactSQL Language Reference Guide, der Mitautor von MCTS Self-Paced Training Kit: Microsoft SQL Server 2005 Implementation and Maintenance (Exam 70-431) und hat zahlreiche Zeitschriften- und Newsletterartikel verfasst. Außerdem ist er der Programmdirektor der SQL Server-Benutzergruppe von Nordtexas und ein SQL Server-MVP. Besuchen Sie seinen Blog unter blogs.solidq.com/EN/rdyess/default.aspx.
© 2007 Microsoft Corporation und CMP Media, LLC. Alle Rechte vorbehalten. Die nicht genehmigte teilweise oder vollständige Vervielfältigung ist nicht zulässig.


 SQL&#160;Server&#160;2008: Sicherheit
SQL Server 2008 Rick Byham

Sicherheit
Kurz zusammengefasst:
  • Verbesserungen bei der Verschlüsselung
  • Verbesserungen bei der Authentifizierung
  • Sicherheitsüberwachung
  • Richtlinienbasierte Verwaltung

SQL Server 2008 bietet viele Verbesserungen und neue Features, die dafür entwickelt wurden, die Sicherheit Ihrer Datenbankumgebung insgesamt zu verbessern. In SQL Server 2008 sind wichtige Verschlüsselungs- und Authentifizierungsfunktionen hinzugekommen, und es wird ein neues Überwachungssystem eingeführt, um
Ihnen zu helfen, Berichte zum Benutzerverhalten zu generieren und Ihre rechtlichen Anforderungen zu erfüllen.
In diesem Artikel werde ich Ihnen einen Überblick über die wichtigsten Änderungen vermitteln, die zur Verbesserung der Sicherheit in SQL Server® 2008 integriert wurden. Eines der ersten Dinge, die Ihnen auffallen werden, ist die Tatsache, dass das SQL Server 2005-Tool zur Oberflächenkonfiguration entfernt wurde. Die Protokolloptionen, die durch das Tool zur Oberflächenkonfiguration bereitgestellt wurden, stehen jetzt im Konfigurations-Manager zur Verfügung. Das Aktivieren und Deaktivieren von Features erfolgt jetzt allerdings über das neue Framework für die richtlinienbasierten Verwaltung von SQL Server 2008.

Verbesserungen bei der Verschlüsselung
Im Bereich der Verschlüsselung wurden vor allem zwei wichtige Verbesserungen vorgenommen. Erstens kann SQL Server jetzt Verschlüsselungsschlüssel verwenden, die auf einem externen Hardwaresicherheitsmodul eines Drittanbieters gespeichert sind. Zweitens können Daten, die in SQL Server gespeichert sind, nach einer Methode verschlüsselt werden, die für Anwendungen, von denen eine Verbindung zur Datenbank hergestellt wird, transparent ist. Dies bedeutet, dass Datenbankadministratoren problemlos alle in einer Datenbank gespeicherten Daten verschlüsseln können, ohne vorhandenen Anwendungscode ändern zu müssen.
Die erste Verbesserung wird durch das neue EKM-Feature (Extensible Key Management, Erweiterbare Schlüsselverwaltung) möglich, das in den Enterprise-, Developer- und Evaluation-Editionen von SQL Server 2008 verfügbar ist. EKM ermöglicht es Drittanbietern von Lösungen zur Unternehmensschlüsselverwaltung und Hardwaresicherheitsmodul-Lösungen, ihre Geräte in SQL Server zu registrieren. Sobald diese Geräte registriert wurden, können die Benutzer die auf diesen Modulen gespeicherten Verschlüsselungsschlüssel verwenden.
Diese Anbieter können in diesen Modulen sogar erweiterte Verschlüsselungsfeatures wie z. B. Schlüsselalterung und Schlüsselrotation verfügbar machen. In einigen Konfigurationen macht dies es möglich, Daten vor Datenbankadministratoren zu schützen, die nicht Mitglieder der sysadmin-Gruppe sind. Danach können die kryptografischen T-SQL-Anweisungen die Daten unter Verwendung der auf dem externen EKM-Gerät gespeicherten Schlüssel ver- und entschlüsseln.
Ein weiteres neues Feature – die transparente Datenverschlüsselung – ermöglicht Ihnen, Datenbankdateien zu verschlüsseln, ohne eine einzige Ihrer Anwendungen ändern zu müssen. Dieses Feature führt eine E/A-Verschlüsselung und -Entschlüsselung der Daten- und Protokolldateien in Echtzeit durch. Zur Verschlüsselung wird ein DEK (Database Encryption Key, Datenbankverschlüsselungsschlüssel) verwendet, der im Datenbankstartdatensatz gespeichert wird, um bei einer Wiederherstellung verfügbar zu sein. Der DEK wird durch ein Zertifikat geschützt, das in der master-Datenbank des Servers gespeichert ist. Das Diagramm in Abbildung 1 veranschaulicht die Architektur, die diese transparente Datenverschlüsselung ermöglicht.
Abbildung 1 Architektur der transparenten Datenverschlüsselung
Abbildung 1 Architektur der transparenten Datenverschlüsselung
Dies hilft, ruhende Daten zu schützen. Obwohl Sie mehrere Vorsichtsmaßnahmen ergreifen können, um Ihre Datenbank zu schützen, indem Sie beispielsweise vertrauliche Ressourcen verschlüsseln und die Datenbankserver mit einem Firewall umgeben, stellen die physischen Medien, auf denen die Datenbank gespeichert ist (selbst die Sicherungsbänder), eine ganz andere Art von Sicherheitsrisiko dar. Ein böswilliger Benutzer könnte diese Medien stehlen und unter Umständen auf die gespeicherten Daten zugreifen.
Bei der transparenten Datenverschlüsselung dagegen können Sie die vertraulichen Daten in der Datenbank verschlüsseln und die Schlüssel, die zum Verschlüsseln der Daten verwendet werden, mit einem Zertifikat schützen. Dies kann Ihrem Unternehmen helfen, viele Gesetze, Bestimmungen und Branchenrichtlinien zu erfüllen, die den angemessenen Schutz von Daten betreffen.
Die transparente Datenverschlüsselung ermöglicht Softwareentwicklern, Daten mit AES (Advanced Encryption Standard, erweiterter Verschlüsselungsstandard)- und 3DES (Dreifach-DES)-Verschlüsselungsalgorithmen zu verschlüsseln. Die Verschlüsselung der Datenbankdatei wird auf Seitenebene durchgeführt, indem die Seiten verschlüsselt werden, bevor sie auf den Datenträger geschrieben werden, und später beim Einlesen in den Speicher wieder entschlüsselt werden. Sicherungsdateien von Datenbanken, für die transparente Datenverschlüsselung aktiviert wurde, werden ebenfalls mit dem Datenbankverschlüsselungsschlüssel verschlüsselt.
Zur Wiederherstellung einer verschlüsselten Datenbank benötigen Sie Zugriff auf das Zertifikat oder den asymmetrischen Schlüssel, das bzw. der zum Verschlüsseln der Datenbank verwendet wurde. Ohne das Zertifikat oder den asymmetrischen Schlüssel kann die Datenbank nicht wiederhergestellt werden. Achten Sie also darauf, alle Schlüssel aufzubewahren, solange Sie Zugriff auf die mit ihnen verknüpften Datensicherungen benötigen.

Verbesserungen bei der Authentifizierung
Wie Sie wahrscheinlich wissen, ist Kerberos ein Netzwerkauthentifizierungsprotokoll, das verwendet wird, um eine äußerst sichere Methode für das gegenseitige Authentifizieren von Client- und Serverentitäten (oder Sicherheitsprinzipalen) in einem Netzwerk bereitzustellen. Kerberos hilft Benutzern, Sicherheitsrisiken wie z. B. die Anfälligkeit für Lockangriffe und Man-in-the-Middle-Angriffe zu verringern. Im Vergleich zur NTLM-Authentifizierung von Windows® ist Kerberos sicherer, stabiler und leistungsfähiger.
Um mit Kerberos eine Verbindung in beiden Richtungen zu authentifizieren, müssen die Dienstprinzipalnamen (SPN, Service Principal Names) einer SQL Server-Instanz in Active Directory® registriert werden, und es muss ein Clienttreiber beim Herstellen einer Verbindung einen registrierten SPN angeben. In SQL Server 2008 wurde die Kerberos-Authentifizierung auf alle Netzwerkprotokolle einschließlich TCP, Named Pipe, Shared Memory und VIA (Virtual Interface Adapter) erweitert. Standardmäßig leitet der Clienttreiber für eine SQL Server-Instanz, zu der er eine Verbindung herstellt, automatisch einen richtigen SPN ab. Sie können einen SPN auch explizit im Verbindungszeichenfolgenparameter angeben, um eine höhere Sicherheit, mehr Kontrolle und eine bessere Problembehandlung zu erzielen.
IIS (Internet Information Services, Internetinformationsdienste) bietet keinen Zugriff mehr auf ASP.NET, Berichts-Manager oder den Berichtsserver-Webdienst. In SQL Server 2008 verarbeiten die Reporting Services alle Authentifizierungsanforderungen über ein neues Authentifizierungssubsystem, das sowohl Windows-basierte als auch benutzerdefinierte Authentifizierungen unterstützt.
Reporting Services hostet jetzt die Technologien Microsoft® .NET Framework und ASP.NET, die in die SQL Server-CLR (Common Language Runtime) integriert sind, und verwendet auch die HTTP.SYS-Funktionen des Betriebssystems. Der Berichtsserver beinhaltet einen HTTP-Listener, der Anforderungen akzeptiert, die an eine URL und einen Port geleitet werden, die Sie während der Serverkonfiguration festlegen. URL-Reservierungen und -Registrierungen werden jetzt über HTTP.SYS direkt durch den Berichtsserver verwaltet.

Sicherheitsüberwachung
Mit dem neuen Feature „SQL Server Audit“ können Sie benutzerdefinierte Überwachungen von Datenbankmodulereignissen einrichten. Dieses Feature verwendet erweiterte Ereignisse, um Informationen für Überwachungen aufzuzeichnen, und stellt die Tools und Prozesse bereit, die Sie benötigen, um Überwachungen verschiedener Server und Datenbankobjekte zu aktivieren, zu speichern und anzuzeigen.
Darüber hinaus ist SQL Server Audit schneller als die SQL Server-Ablaufverfolgung, und SQL Server Management Studio erleichtert Ihnen die Aufgabe, die Überwachungsprotokolle zu erstellen und zu prüfen. Jetzt können Sie eine detailliertere Überwachung durchführen und auch SELECT-, INSERT-, UPDATE-, DELETE-, REFERENCES- und EXECUTE-Anweisungen einzelner Benutzer erfassen. SQL Server Audit ist zudem durch die T-SQL-Anweisungen „CREATE SERVER AUDIT“ und „CREATE SERVER AUDIT SPECIFICATION“ sowie die zugehörigen ALTER- und DROP-Anweisungen vollständig skriptfähig.
Um die Überwachung einzurichten, erstellen Sie einen Überwachungsprozess und legen den Speicherort fest, an dem die überwachten Ereignisse aufgezeichnet werden sollen. Überwachungen können im Windows-Sicherheitsprotokoll, im Windows-Anwendungsprotokoll oder in einer Datei an einem von Ihnen festgelegten Speicherort gespeichert werden. Sie weisen der Überwachung einen Namen zu und konfigurieren ihre Merkmale wie z. B. den Pfad zur Überwachungsdatei und ihre maximale Größe. Sie können auch festlegen, dass SQL Server heruntergefahren werden soll, falls die Überwachung fehlschlägt. Falls es notwendig ist, die überwachten Ereignisse an mehreren Speicherorten zu protokollieren, erstellen Sie einfach mehrere Überwachungen.
Der nächste Schritt besteht darin, eine oder mehrere Überwachungsspezifikationen zu erstellen. Eine Serverüberwachungsspezifikation sammelt Informationen über die Instanz von SQL Server und enthält für Server vorgesehene Objekte wie z. B. Anmeldungen und Serverrollenmitgliedschaften. Sie enthält auch Datenbankinformationen, die in der master-Datenbank verwaltet werden, wie z. B. die Berechtigung, auf eine Datenbank zuzugreifen. Wenn Sie eine Überwachungsspezifikation definieren, geben Sie an, welche Überwachung die überwachten Ereignisse erhalten wird. Sie können mehrere Serverüberwachungen und mehrere Serverüberwachungsspezifikationen definieren, aber in jeder Serverüberwachung kann immer nur eine einzige aktivierte Serverüberwachungsspezifikation enthalten sein.
Sie können auch Datenbanküberwachungsspezifikationen erstellen, die Ereignisse in einer einzelnen Datenbank überwachen. Sie können einer Überwachung mehrere Datenbanküberwachungsspezifikationen hinzufügen, aber eine einzige Serverüberwachung kann immer nur eine einzige Datenbanküberwachungsspezifikation pro Datenbank aktivieren.
Die für Serverüberwachungsspezifikationen verwendeten SQL Server-Überwachungsaktionsereignisse werden in Sammlungen verwandter Überwachungsaktionsereignisse gruppiert. Diese Sammlungen werden als Überwachungsaktionsgruppen verfügbar gemacht. Wenn Sie der Überwachungsspezifikation eine Gruppe hinzufügen, überwachen Sie alle in dieser Gruppe enthaltenen Ereignisse. So gibt es beispielsweise eine Überwachungsaktionsgruppe namens „DBCC_GROUP“, die die DBCC-Befehle verfügbar macht. Die DBCC-Befehle sind jedoch nicht einzeln für eine Überwachung verfügbar.
Für den Server stehen 35 Überwachungsaktionsgruppen zur Verfügung, von denen einige nahe miteinander verwandt sind. Es gibt zum Beispiel eine SUCCESSFUL_LOGIN_GROUP, eine FAILED_LOGIN_GROUP und eine LOGOUT_GROUP. Ferner gibt es einen Überwachungsaktionstyp namens „AUDIT_ CHANGE_GROUP“, den Sie verwenden können, um den Überwachungsprozess zu überwachen.
Datenbanküberwachungsspezifikationen können auch Gruppen von Überwachungsaktionsereignissen festlegen, die in Überwachungsaktionsgruppen auf Datenbankebene gesammelt werden. Zusätzlich zu den Überwachungsaktionsgruppen kann eine Datenbanküberwachungsspezifikation einzelne Überwachungsaktionsereignisse enthalten, um Anweisungen der Datenbearbeitungssprache zu überwachen. Diese Ereignisse können dafür konfiguriert werden, die gesamte Datenbank oder nur bestimmte Datenbankobjekte zu überwachen. Beispielsweise kann die Überwachungsaktion „SELECT“ dazu verwendet werden, SELECT-Abfragen für eine einzige Tabelle oder ein ganzes Schema zu überwachen. Diese Ereignisse können auch dafür konfiguriert werden, Aktionen bestimmter Benutzer oder Rollen (z. B. aller Inhaber der Rolle „db_writer“) zu überwachen.
Sie können beispielsweise die Überwachungsaktion „SELECT“ dafür verwenden, SELECT-Abfragen des Benutzers „Mary“, der Datenbankrolle „FINANCE_DEPT“ oder der öffentlichen Datenbankrolle für eine einzige Tabelle zu überwachen. Dies gibt Ihnen viel Kontrolle und Flexibilität, um genau die Überwachungen zu erstellen, die Sie benötigen.

Abhängigkeitsberichterstattung
Die Abhängigkeitsberichterstattung wurde durch eine neue Katalogansicht und neue Systemfunktionen verbessert. Wenn Sie „sys.sql_expression_dependencies“, „sys.dm_sql_referencing_entities“ und „sys.dm_sql_referenced_entities“ verwenden, können Sie Berichte zu serverübergreifenden und datenbankübergreifenden Abhängigkeiten sowie zu Datenbank-SQL-Abhängigkeiten für schemagebundene und nicht schemagebundene Objekte generieren.

Neue Datenbankrollen
Es wurden Änderungen an den in der msdb-Datenbank enthaltenen Datenbankrollen vorgenommen. Die Rolle „db_dtsadmin“ wurde in „db_ssisadmin“, die Rolle „db_dtsltduser“ in „db_ssisltduser“ und die Rolle „db_dtsoperator“ in „db_ssisoperator“ umbenannt. Um Abwärtskompatibilität zu unterstützen, werden die alten Rollen beim Aktualisieren der Server als Mitglieder der neuen Rollen hinzugefügt.
Zusätzlich zu diesen Änderungen wurden zur Unterstützung neuer Features von SQL Server 2008 neue Datenbankrollen hinzugefügt. Insbesondere enthält die msdb-Datenbank neue Rollen für Servergruppen („ServerGroupAdministratorRole“ und „ServerGroupReaderRole“), für die richtlinienbasierte Verwaltung („PolicyAdministratorRole“) und für den Datensammler („dc_admin“, „dc_operator“ und „dc_proxy“). Auch die Datenbank des Verwaltungs-Data Warehouse enthält neue Rollen für den Datensammler („mdw_admin“, „mdw_writer“ und „mdw_reader“).

FILESTREAM-Sicherheit
SQL Server unterstützt jetzt auch FILESTREAM-Speicher. Dies ermöglicht es, mit SQL Server-Anwendungen unstrukturierte Daten wie z. B. Dokumente und Bilder im Dateisystem zu speichern. Dies wiederum bedeutet, dass Clientanwendungen von den Streaming-APIs und der Leistung des Dateisystems profitieren und zugleich die Transaktionskonsistenz zwischen den unstrukturierten und den entsprechenden strukturierten Daten beibehalten können.
FILESTREAM-Daten müssen in FILESTREAM-Dateigruppen gespeichert werden. Bei diesen FILESTREAM-Dateigruppen handelt es sich um spezielle Dateigruppen, in denen nicht die Dateien selbst, sondern Dateisystemverzeichnisse enthalten sind. Diese als Datencontainer bezeichneten Verzeichnisse stellen die Schnittstelle zwischen Datenbankmodulspeicher und Dateisystemspeicher bereit.
Im Hinblick auf die Sicherheit werden FILESTREAM-Daten genau wie alle anderen Daten geschützt, indem auf Tabellen- oder Spaltenebene Berechtigungen zugeteilt werden. Das einzige Konto, dem NTFS-Berechtigungen für den FILESTREAM-Container gewährt werden, ist das Konto, unter dem der SQL Server-Dienst ausgeführt wird. Wenn eine Datenbank geöffnet wird, schränkt SQL Server den Zugriff auf die FILESTREAM-Datencontainer ein, es sei denn, der Zugriff erfolgt über die T-SQL-Transaktionen und die OpenSqlFilestream-APIs.

Richtlinienbasierte Verwaltung
Die richtlinienbasierte Verwaltung von SQL Server 2008 stellt ein neues System zum Verwalten von SQL Server bereit. Sie können Richtlinien erstellen, um viele Aspekte von SQL Server zu testen und Berichte über sie zu generieren. Richtlinien können auf eine einzelne Datenbank, auf eine einzelne Instanz von SQL Server oder auf sämtliche von Ihnen verwalteten SQL-Server angewendet werden.
Mit richtlinienbasierter Verwaltung können Sie die SQL Server-Konfigurationsoptionen und viele der Sicherheitseinstellungen testen. Außerdem können Sie für einige Sicherheitseinstellungen Richtlinien erstellen, die nichtkonforme Datenbankserver erkennen, und anschließend die nötigen Schritte unternehmen, um diese Server konform zu machen.
In SQL Server 2008 sind einige weniger wichtige Features standardmäßig deaktiviert, um die Anfälligkeit für potenzielle Angriffe zu minimieren. Sie können die richtlinienbasierte Verwaltung verwenden, um selektiv zusätzliche Features zu aktivieren, die Sie benötigen. Darüber hinaus können Sie Ihre Konfiguration nach einem Zeitplan überprüfen und sich durch Warnmeldungen informieren lassen, falls bei einer Überprüfung festgestellt wird, dass die Konfigurationseinstellungen nicht den Richtlinien entsprechen.
Die richtlinienbasierte Verwaltung fasst verwandte Eigenschaften in Gruppen zusammen und macht sie in Komponenten verfügbar, die als Facets bezeichnet werden. So enthält beispielsweise das Facet „Oberflächenkonfiguration“ Eigenschaften für Ad-hoc-Remoteabfragen, CLR-Integration, Datenbank-E-Mail, OLE-Automatisierung, Remote-DAC, SQL Mail, Web-Assistent und xp_cmdshell. Sie können eine Richtlinie erstellen, die die CLR-Integration aktiviert, aber alle anderen Features deaktiviert. Ihre Richtlinie kann komplexe Bedingungsanweisungen enthalten, wie z. B. die Anweisung, Datenbank-E-Mail in allen Instanzen von SQL Server zu deaktivieren, es sei denn, sie tragen den Namen „Customer_Response“.
Sobald Sie die Richtlinie erstellt haben, können Sie die Richtlinie auf sämtlichen Servern überprüfen lassen, um einen Bericht zu generieren, der Sie darüber informiert, welche Server nicht konform sind. Wenn Sie dann auf die Schaltfläche „Konfigurieren“ klicken, werden alle Instanzen, die nicht konform sind, mit den Richtlinieneinstellungen konfiguriert. Sie sollten auch die Richtlinie nach einem Zeitplan regelmäßig ausführen lassen, um den Status Ihrer Server zu überwachen. Für das Datenbankmodul, die Analysis Services und die Reporting Services werden Oberflächenkonfigurations-Facets bereitgestellt.
Beachten Sie jedoch, dass diese richtlinienbasierte Verwaltung nicht als Methode zur Durchsetzung der Sicherheit konzipiert wurde. In den meisten Fällen kann ein Benutzer mit den erforderlichen Berechtigungen Anweisungen schreiben, die gegen eine Richtlinie verstoßen oder diese Richtlinie umgehen und Neukonfigurationsaktionen durchführen, die gegen Ihre Sicherheitsrichtlinie verstoßen könnten. Die richtlinienbasierte Verwaltung von SQL Server 2008 sollte lediglich als Hilfe bei der Überwachung Ihrer SQL Server-Sicherheitseinstellungen betrachtet werden.
Die einzelnen Facets variieren in Abhängigkeit davon, ob ihre zugehörigen DDL-Anweisungen in Modi ausgeführt werden können, die keine autocommit-Modi sind, in ihrer Fähigkeit, Einstellungen durchzusetzen. Manchmal kann ein Facet eine Konfiguration in einer Instanz des Datenbankmoduls durchsetzen, aber ein Administrator kann nach wie vor die Einstellungen wieder umkonfigurieren. Einige Facets können von einem Servertrigger durchgesetzt werden. Dadurch lässt sich verhindern, dass Benutzer mit niedriger Berechtigungsstufe die Einstellung ändern, und es lässt sich die Wahrscheinlichkeit senken, dass ein Administrator die Einstellung aus Versehen ändert. In diesem Fall müsste der Administrator zuerst die Richtlinie vorübergehend deaktivieren, bevor er die Einstellung ändert. Andere Facets können nur den Status einer Eigenschaft melden, ihn aber nicht ändern. Dies ist bei einer Richtlinie der Fall, die die Schlüssellänge eines symmetrischen oder asymmetrischen Schlüssels prüft, wie in Abbildung 2 zu sehen ist.
Abbildung 2 Facet für asymmetrische Schlüssel
Abbildung 2 Facet für asymmetrische Schlüssel
Es gibt Facets für die meisten Arten von Datenbankobjekten, von denen viele für die Sicherheit eingesetzt werden. So kann beispielsweise das Facet „Anmeldung“ ermitteln, ob die Kennwortrichtlinie bei jeder Anmeldung durchgesetzt wird, und das Facet „Gespeicherte Prozedur“ kann erkennen, ob alle Prozeduren verschlüsselt sind. Andere Facets testen die Eigenschaften von Benutzern, Schemas und kryptografischen Anbietern, die Einhaltung allgemeiner Kriterien und die C2-Überwachung.

Windows Server 2008
SQL Server 2008 wurde umfassend mit Windows Server® 2008 getestet, das mit aktivierter Firewall geliefert wird. Jetzt ist der richtige Zeitpunkt, sich anzusehen, wie die Firewalleinstellungen konfiguriert werden. Außerdem stellt Windows Server 2008 auch Benutzerkontensteuerung bereit, die Sie möglicherweise bereits aus Windows Vista® kennen. Die Benutzerkontensteuerung schränkt die Berechtigungen ein, die Sie als administrativer Benutzer automatisch erhalten. Diese Features betreffen alle Versionen von SQL Server.

Zusammenfassung
Sicherheit ist ein Bereich von SQL Server, der weiterhin im Brennpunkt von Optimierungsbemühungen steht. Verbesserungen bei der Verschlüsselung und der Authentifizierung stellen neue Funktionen bereit, und das neue Überwachungssystem sowie die richtlinienbasierte Verwaltung von SQL Server 2008 bieten Ihnen neue Tools, mit denen Sie den Status der Einhaltung von Sicherheitsanforderungen überwachen können.

Rick Byham kam 1995 zu Microsoft. Er hat als SQL Server-Supporttechniker beim Microsoft-Kundendienst gearbeitet und ist danach dem SQL Server-Team bei Microsoft Learning beigetreten. 2003 kam er als technischer Redakteur zum Team der SQL Server-Onlinedokumentation, wo er für die Sicherheitsdokumentation zuständig ist. Sie erreichen Rick Byham unter rick.byham@microsoft.com.


 SQL&#160;Server&#160;2008: Neue Datentypen
SQL Server 2008 Kelly Wilson

Neue Datentypen
Kurz zusammengefasst:
  • Neue Datums- und Uhrzeitdatentypen
  • Darstellen der Position in einer Hierarchie
  • Zwei Modelle für die Arbeit mit räumlichen Daten

Um in der globalen Wirtschaft Geschäfte machen zu können, müssen Unternehmen zunehmend neue Datentypen, Anwendungen und komplexe Berechnungen einsetzen. Die sieben neuen in SQL Server 2008 integrierten Datentypen
ermöglichen die Arbeit mit komplizierteren Daten und vereinfachen deren Verwaltung.

Datum und Uhrzeit
Bei dem alten Datentyp „datetime“ hatten SQL Server®-Benutzer keine Möglichkeit, mit den Datums- und Uhrzeitangaben separat zu arbeiten. Vier der neuen Datentypen (date, time, datetime2 und datetimeoffset) ändern diese Situation, indem sie die Arbeit mit Datums- und Zeitangaben vereinfachen und einen größeren Datumsbereich, eine Genauigkeit von Sekundenbruchteilen sowie Zeitzonenunterstützung bieten. Neue Datenbankanwendungen sollten statt des herkömmlichen Datentyps „datetime“ diese neuen Datentypen verwenden. Betrachten wir die neuen Versionen etwas genauer.
Der Datentyp „date“ speichert ein Datum ohne Uhrzeitkomponente. Der Datumsbereich erstreckt sich vom 1. Januar 1000 bis zum 31. Dezember 9999 („0001-01-01“ bis „9999-12-31“). Jede Datumsvariable beansprucht 3 Byte im Speicher und besitzt eine Genauigkeit von 10 Stellen. Die Genauigkeit des Datentyps „date“ ist auf einen einzigen Tag beschränkt.
Betrachten Sie Abbildung 1, die zeigt, wie Datumsvariable in T-SQL-Skripts erstellt und initialisiert werden. Die Variable „@myDate1“ wird durch eine Zeichenfolge mit dem Format „MM/TT/JJJJ“ initialisiert. Die Variable „@myDate2“ wird nicht initialisiert, sondern hat den Wert NULL. Die Variable „@myDate3“ wird mit dem Datum des lokalen Computersystems initialisiert. Der Wert von Variablen kann jederzeit mit SELECT- oder SET-Anweisungen geändert werden, wie das Beispiel einer Änderung des Werts von @myDate2 veranschaulicht. Spalten des Typs „date“ können ebenfalls in Tabellen erstellt werden. Abbildung 2 zeigt, wie eine Tabelle mit drei date-Spalten erstellt wird.
Figure 2 Erstellen einer Tabelle mit drei date-Spalten (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 Erstellen und Initialisieren von Datumsvariablen in T-SQL-Skripts (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
Der Datentyp „time“ speichert die Tageszeit ohne Datumskomponente. Da er auf dem 24-Stunden-Format basiert, unterstützt er einen Bereich von 00:00:00.0000000 bis 23:59:59.9999999 (Stunden, Minuten, Sekunden und Sekundenbruchteile). Beim Erstellen dieses Datentyps können Sie seine Genauigkeit in Sekundenbruchteilen festlegen. Dieser Datentyp besitzt eine Standardgenauigkeit von 7 Stellen bzw. 100 Nanosekunden. Die Genauigkeit wirkt sich darauf aus, wie viel Speicherplatz benötigt wird, und bewegt sich im Bereich von 3 Byte für bis zu 2 Stellen über 4 Byte für 3 oder 4 Stellen bis hin zu 5 Byte für 5 bis 7 Stellen.
Das in Abbildung 3 dargestellte T-SQL-Skript zeigt, wie sich implizite Konvertierungen eines Zeichenfolgeninitialisierungswerts auf die variable Genauigkeit auswirken. Der T-SQL-Code erstellt zunächst acht separate Uhrzeitvariable und initialisiert sie mit einem identischen Wert. Die Sekundenbruchteilgenauigkeit jeder Variablen lässt sich aus ihrem Namen ableiten. So bietet beispielsweise die Variable „@myTime3“ eine Sekundenbruchteilgenauigkeit von drei Stellen. Die Ergebnisse zeigen, dass die Genauigkeit jedes Uhrzeitdatentyps der Sekundenbruchteilgenauigkeit entspricht, mit der der Datentyp deklariert wird. Stellen, die außerhalb dieses Bereichs liegen, werden abgeschnitten.
Figure 3 Anzeigen der variablen Genauigkeit des Datentyps „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
Ein time-Datentyp kann als Spalte in einer Tabelle erstellt werden. Das T-SQL-Skript „DROP TABLE myTable“ in Abbildung 4 erstellt eine Tabelle namens „myTable1“ und fügt ihr drei time-Spalten hinzu. Danach wird ein Datensatz in die Tabelle eingefügt, und es werden durch eine SELECT-Anweisung die Inhalte der Tabelle angezeigt.
Figure 4 Erstellen von 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 und datetime2
Der Datentyp „datetimeoffset“ berücksichtigt Zeitzonen. Der Datentyp „time“ beinhaltet keine Zeitzone und arbeitet daher nur mit der Ortszeit. In der globalen Wirtschaft ist es jedoch oft notwendig zu wissen, wie sich eine Uhrzeit in einem bestimmten Teil der Welt zu einer Uhrzeit in einem anderen Teil der Welt verhält. Der Zeitunterschied wird im Format „+ hh:mm“ bzw. oder „- hh:mm“ angegeben.
Dieser Code erstellt eine Variable des Datentyps „datetimeoffset“ und initialisiert sie mit dem Uhrzeitwert „8:52 A.M. Pacific Standard Time“:
DECLARE @date DATETIMEOFFSET = '2007-11-26T08:52:00.1234567-08:00'
PRINT @date
--Results
--2007-11-26 08:52:00.1234567 -08:00
Die Zeichenfolge, die die Variable des Datentyps „datetimeoffset“ (im Skript: @date) initialisiert, besitzt ein spezielles Format, das in absteigender Reihenfolge zu Beginn das wichtigste und zum Schluss das am wenigsten wichtige Element angibt. Das Datumselement und das Uhrzeitelement werden durch einen einzelnen Großbuchstaben „T“ voneinander getrennt. Ein Minusvorzeichen trennt die Uhrzeitelemente von der Zeitzone. Zwischen dem Minuszeichen und der Uhrzeit- oder Zeitzonenangabe stehen keine Leerzeichen. Dieses Format ist eines von zwei ISO 8601-Formaten, die vom Datentyp „datetimeoffset“ unterstützt werden. (ISO 8601 ist eine internationale Norm zur Darstellung von Datums- und Uhrzeitwerten.)
Die Genauigkeit der Uhrzeitkomponente wird genau wie beim Datentyp „time“ angegeben, wobei als Standardwert die gleichen sieben Stellen verwendet werden, falls nichts angegeben wird. Der unterstützte Bereich ist identisch.
Der Datentyp „datetime2“ ist eine Erweiterung des ursprünglichen Datentyps „datetime“. Er unterstützt einen größeren Datumsbereich und eine höhere Sekundenbruchteilgenauigkeit und ermöglicht Ihnen, die Genauigkeit festzulegen. Der Datumsbereich des Datentyps „datetime2“ erstreckt sich vom 1. Januar 0001 bis zum 31. Dezember 9999, wohingegen der Datumsbereich des ursprünglichen Datentyps „datetime“ nur vom 1. Januar 1753 bis zum 31. Dezember 9999 reichte. Genau wie bei dem Datentyp „time“ wird eine Genauigkeit von siebenstelligen Sekundenbruchteilen bereitgestellt. Der ursprüngliche Datentyp „datetime“ bot eine dreistellige Genauigkeit und einen Uhrzeitbereich von 00:00:00 bis 23:59:59.999. Hier können Sie sehen, wie eine Variable des Datentyps „datetime2“ erstellt und mit dem Datum und der Uhrzeit des lokalen Servers initialisiert wird:
DECLARE @datetime2 DATETIME2 = GetDate();
PRINT @datetime2

--Results
--2007-11-26 09:39:04.1370000
Als Nächstes werde ich den neuen Datentyp „hierarchyid“ untersuchen. Dieser Datentyp arbeitet nicht mit einer bestimmten Datums- oder Uhrzeitangabe, sondern mit der Beziehung zwischen Datenelementen in einer Tabelle.

Der Datentyp „hierarchyid“
Mit dem Datentyp „hierarchyid“ können Sie Beziehungen zwischen Datenelementen innerhalb einer Tabelle erstellen, was vor allem dem Zweck dient, eine Position innerhalb einer Hierarchie darzustellen. Um diesen Datentyp zu untersuchen, erstelle ich zunächst mit dem Skript in Abbildung 5 die MyCompany-Datenbank und fülle sie mit Mitarbeiterdaten.
Figure 5 Erstellen und Füllen der MyCompany-Datenbank (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
Abbildung 6 zeigt die sich ergebende einfache Datenbank, die aus einer einzigen Mitarbeitertabelle besteht. Diese Mitarbeitertabelle in der MyCompany-Datenbank besitzt keine auferlegte Struktur. Dies ist bei einer relationalen Datenbank normal, denn eine Struktur wird auf dynamische Weise von einer Anwendung durch ihren Abfrage- und Verarbeitungscode auferlegt.
Abbildung 6 Die MyCompany-Mitarbeitertabelle
Abbildung 6 Die MyCompany-Mitarbeitertabelle
Geschäftsdaten dagegen besitzen in der Regel eine inhärente Struktur. So gibt es beispielsweise in jedem Unternehmen eine Struktur aus Vorgesetzten und Untergebenen wie z. B. die Struktur, die in Abbildung 7 für MyCompany dargestellt ist. Alle Mitarbeiter von MyCompany sind Untergebene des Geschäftsführers David. Einige Mitarbeiter wie z. B. Jill sind seine direkten Untergebenen. Andere Mitarbeiter wie z. B. Mary sind seine indirekten Untergebenen, da eine Mittelsperson dazwischen steht, die ihr direkter Vorgesetzter ist. In der Programmierung wird die hierarchische Struktur von MyCompany als Baumstruktur bezeichnet, weil sie einem Baum ähnelt. David an der Spitze hat keinen Vorgesetzten. Er ist das übergeordnete Element bzw. Vorgängerelement. Die Mitarbeiter, deren Vorgesetzter David ist, sind unter ihm angeordnet. Derartige Knoten werden als untergeordnete Elemente oder Nachfolgerelemente bezeichnet. David kann so viele Nachfolger wie nötig besitzen, um seine direkten Untergebenen darzustellen.
Abbildung 7 Die Organisationsstruktur von MyCompany
Abbildung 7 Die Organisationsstruktur von MyCompany
Das Skript in Abbildung 8 baut die MyCompany-Datenbank unter Verwendung des Datentyps „hierarchyid“ neu auf und erstellt dabei eine Beziehung, die der hierarchischen Struktur von MyCompany entspricht. Zunächst wird mit der ALTER TABLE-Anweisung eine Spalte des Typs „hierarchyid“ hinzugefügt. Danach wird mit der hierarchyid-Methode „GetRoot“ der Knoten „David“ eingefügt. Anschließend werden mit der Methode „GetDescendant“ die direkten Untergebenen von David der Baumstruktur hinzugefügt.
Figure 8 Neuaufbau der Datenbank mithilfe des hierarchyid-Typs (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
Sobald die Datenbankdatensätze hinzugefügt wurden und die Hierarchie erstellt wurde, können die Inhalte der Mitarbeitertabelle mit einer Abfrage wie der folgenden angezeigt werden:
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 ist die Spalte des Typs „hierarchyid“. Im Ergebnis wird durch jeden Schrägstrich ein Knoten in der Hierarchiestruktur angegeben. David befindet sich am Stamm, was durch einen einzelnen Schrägstrich angezeigt wird. Sariya, John und Jill sind Untergebene von David und besitzen zwei Schrägstriche, wodurch angegeben wird, dass sie in der Hierarchie den zweiten Knoten bilden. Die Zahlen 1, 2 oder 3 geben die Reihenfolge des jeweiligen untergeordneten Knotens an. Dieses System ist sehr flexibel. Untergeordnete Knoten können nach Bedarf entfernt, eingefügt oder hinzugefügt werden. Wenn ich beispielsweise zwischen John und Jill einen Mitarbeiter hinzufügen würde, würde dieser Mitarbeiter im Resultset folgendermaßen aufgelistet werden: /2.1/.
Wenn Sie beispielsweise die Antwort auf die Frage „Wer ist ein Untergebener von Sariya?“ ermitteln möchten, können Sie dazu die folgende T-SQL-Code-Abfrage erstellen:
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/
Die Abfrage verwendet die hierarchyid-Methode „GetAncestor“, die den übergeordneten Knoten des aktuellen hierarchyid-Knotens zurückgibt. Im vorherigen Code wird die Variable „@Sariya“ auf den Hierarchieknoten für Sariya gesetzt. Der Grund dafür ist, dass Sariya das direkte Vorgängerelement jedes Mitarbeiters ist, der ein Untergebener von ihr ist. Daher muss beim Schreiben einer Abfrage, von der die Mitarbeiter zurückgegeben werden sollen, die direkte Untergebene von Sariya sind, der Knoten von Sariya aus der Baumstruktur abgerufen werden, und es müssen anschließend alle Mitarbeiter ausgewählt werden, deren Vorgängerknoten der Knoten von Sariya ist.
Spalten des Typs „hierarchyid“ neigen dazu, sehr kompakt zu sein, weil die Anzahl der Bits, die dafür benötigt werden, einen Knoten in der Baumstruktur darzustellen, von der durchschnittlichen Anzahl der untergeordneten Elemente des Knotens (oft als „Fanout“ des Knotens bezeichnet) abhängt. So würde beispielsweise ein neuer Knoten in einer Organisationshierarchie von 100.000 Mitarbeitern mit einem durchschnittlichen Fanout von sechs Ebenen einen Speicherplatz von mehr als fünf Byte beanspruchen.
Der Datentyp „hierarchyid“ stellt mehrere Methoden bereit, die die Arbeit mit hierarchischen Daten vereinfachen. Eine Zusammenfassung dieser Methoden ist in Abbildung 9 zu sehen. Ausführliche Informationen zu allen Methoden stehen in der SQL Server-Onlinedokumentation (msdn2.microsoft.com/ms130214) zur Verfügung.
Figure 9 Vom Datentyp „hierarchyid“ bereitgestellte Methoden (Close Figure 9)

Methode | Beschreibung
GetAncestor | Gibt einen hierarchyid-Knoten zurück, der das n-te Vorgängerelement dieses hierarchyid-Knotens repräsentiert.
GetDescendant | Gibt einen untergeordneten Knoten dieses hierarchyid-Knotens zurück.
GetLevel | Gibt eine Ganzzahl zurück, die die Tiefe dieses hierarchyid-Knotens in der Gesamthierarchie repräsentiert.
GetRoot | Gibt den hierarchyid-Stammknoten dieser Hierarchiestruktur zurück. Statisch.
IsDescendant | Gibt „true“ zurück, wenn der übergebene untergeordnete Knoten ein Nachfolgerelement dieses hierarchyid-Knotens ist.
Parse | Konvertiert eine Zeichenfolgendarstellung einer Hierarchie in einen hierarchyid-Wert. Statisch.
Reparent | Verschiebt einen Knoten einer Hierarchie innerhalb der Hierarchie an eine neue Position.
ToString | Gibt eine Zeichenfolge zurück, die die logische Darstellung dieses hierarchyid-Werts enthält.

Räumliche Datentypen
Räumliche Daten sind Daten, die geografische Orte und Formen v. a. auf der Erde beschreiben. Bei diesen Orten und Formen kann es sich um Orientierungspunkte im Gelände, Straßen oder sogar den Standort eines Unternehmens handeln. Für die Arbeit mit dieser Art von Daten stellt SQL Server 2008 die Datentypen „geography“ und „geometry“ bereit.
Der Datentyp „geography“ arbeitet mit Daten des Globusmodells. Das Globusmodell berücksichtigt bei seinen Berechnungen, dass die Oberfläche der Erde gekrümmt ist. Positionen werden durch Länge und Breite angegeben. Dieses Modell eignet sich gut für Anwendungen wie z. B. die Überseetransportschifffahrt und die militärische Planung sowie für Anwendungen, die sich auf kurze Distanzen auf der Erdoberfläche beziehen. Dieses Modell sollten Sie verwenden, wenn Ihre Daten in Form von Breiten- und Längengraden gespeichert sind.
Der Datentyp „geometry“ arbeitet nach dem planaren Modell einer flachen Welt. In diesem Modell wird die Erde als eine zweidimensionale Kartenabbildung behandelt, die von einem bekannten Punkt ausgeht. Das Flachweltmodell berücksichtigt die Krümmung der Erde nicht und wird deshalb in erster Linie zum Beschreiben kurzer Entfernungen verwendet, beispielsweise in einer Datenbankanwendung, die das Innere eines Gebäudes abbildet.
Die Datentypen „geography“ und „geometry“ werden aus Vektorobjekten erstellt und in den Formaten WKT (Well-Known Text) und WKB (Well-Known Binary) angegeben. Dies sind Übertragungsformate für räumliche Daten, die von der Spezifikation „Simple Features for SQL“ des OGC (Open Geospatial Consortium) beschrieben werden. In Abbildung 10 sind die sieben Arten von Vektorobjekten aufgelistet, die von SQL Server 2008 unterstützt werden.
Figure 10 Von SQL Server 2008 unterstützte Vektorobjekte (Close Figure 10)

Objekt | Beschreibung
Point | Ein Ort.
MultiPoint | Eine Reihe von Punkten.
LineString | Eine Reihe von null oder mehr Punkten, die durch Linien verbunden sind.
MultiLineString | Ein Satz von LineStrings.
Polygon | Ein durch einen Satz geschlossener LineStrings beschriebener zusammenhängender Bereich.
MultiPolygon | Ein Satz von Polygonen.
GeometryCollection | Eine Sammlung von geography-Typen.
Um einen geography-Typ mit einem oder mehreren Vektorobjekten zu erstellen, müssen Sie zunächst, wie in Abbildung 11 gezeigt, den geography-Typ in Ihrem T-SQL Skript deklarieren. Danach rufen Sie eine der in Abbildung 12 aufgelisteten Methoden auf und übergeben ihr die Zeichenfolge für Ihr Vektorobjekt und die SRID (Spatial Reference ID). Die SRID ist das räumliche Referenzidentifikationssystem, das von der European Petroleum Survey Group definiert wurde. Die SRID ist Teil einer Gruppe von Normen, die für die Kartografie, die Vermessung und die Speicherung geodätischer Daten entwickelt wurde. Jede SRID beschreibt eine bestimmte Art von Ellipsoid, der in geographischen Berechnungen verwendet wird. Dies ist notwendig, da die Erde keine perfekte Kugel ist. SQL Server 2008 kann nur anhand identischer SRIDs Berechnungen durchführen.
Figure 12 Konstruieren von Objekten für „geography“ und „geometry“ (Close Figure 12)

Methode | Beschreibung
STGeomFromText | Erstellt aus dem Eingabetext eine geography-Instanz beliebigen Typs.
STPointFromText | Erstellt aus dem Eingabetext eine geography-Instanz des Typs „Point“.
STMPointFromText | Erstellt aus dem Eingabetext eine geography-Instanz des Typs „MultiPoint“.
STLineFromText | Erstellt aus dem Eingabetext eine geography-Instanz des Typs „LineString“.
STMLineFromText | Erstellt aus dem Eingabetext eine geography-Instanz des Typs „MultiLineString“.
STPolyFromText | Erstellt aus dem Eingabetext eine geography-Instanz des Typs „Polygon“.
STMPolyFromText | Erstellt aus dem Eingabetext eine geography-Instanz des Typs „MultiPolygon“.
STGeomCollFromText | Erstellt aus dem Eingabetext eine geography-Instanz des Typs „GeometryCollection“.
Figure 11 Erstellen von Punkten, Linien und Polygongeometrie (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))

Unterschiede zwischen den Datentypen „geography“ und „geometry“
Da die Datentypen „geography“ und „geometry“ für die Arbeit mit unterschiedlichen Arten von Daten vorgesehen sind, unterscheiden sie sich in einigen Punkten, über die Sie sich im Klaren sein müssen. Beim Datentyp „geometry“ werden Entfernungen und Flächen in derselben Maßeinheit wie die Koordinaten der Instanzen angegeben. So beträgt beispielsweise die Entfernung zwischen den Punkten (0,0) und (6,8) immer 10 Einheiten. Dies ist beim Datentyp „geography“ nicht der Fall, denn dieser Datentyp arbeitet mit ellipsoiden Koordinaten, die in Form von Breiten- und Längengraden ausgedrückt werden.
Der Datentyp „geometry“ gibt unsinnige Ergebnisse zurück, wenn Koordinaten als Paare aus Breiten- und Längengrad angegeben werden. Der folgende T-SQL-Code berechnet die Entfernung zwischen den Punkten (90 0) und (90 180). Da sich beide Punkte auf den Nordpol beziehen, müsste die Entfernung zwischen ihnen 0 Einheiten betragen. Im Fall des Datentyps „geometry“ wird jedoch eine Entfernung von 180 Einheiten errechnet.
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
Auch in der Orientierung räumlicher Daten besteht zwischen den beiden Datentypen ein Unterschied. Im planaren System, das vom Datentyp „geometry“ verwendet wird, ist die Orientierung des Polygons kein wesentlicher Faktor. So ist beispielsweise ein Polygon mit den Koordinaten ((0, 0), (10, 0), (0, 20), (0, 0)) identisch mit dem Polygon ((0, 0), (0, 20), (10, 0), (0, 0)). In dem vom Datentyp „geography“ verwendeten Datenmodell dagegen ist ein Polygon ohne Angabe einer Orientierung eine unklare Sache. Denken Sie zum Beispiel an einen Ring um den Äquator. Bezieht sich das durch diesen Ring beschriebene Polygon auf die nördliche oder die südliche Hemisphäre? Der springende Punkt hierbei ist, dass bei der Arbeit mit Daten des Datentyps „geography“ die Orientierung und die Position genau beschrieben werden müssen.
Dem Datentyp „geography“ werden auch von SQL Server 2008 einige Einschränkungen auferlegt. So muss beispielsweise jede geography-Instanz in eine einzige Hemisphäre passen. Größere räumliche Objekte sind nicht erlaubt und lösen einen ArgumentException-Fehler aus. geography-Datentypen, die zwei Eingaben erfordern, geben NULL zurück, wenn die Ergebnisse der Methoden nicht in eine einzige Hemisphäre passen.
SQL Server stellt mehrere Methoden bereit, die es ermöglichen, Operationen für geography- und geometry-Instanzen durchzuführen. Abbildung 13 zeigt einige Beispiele für die Verwendung von Methoden, die von SQL Server 2008 für die Arbeit mit räumlichen Daten bereitgestellt werden. Aus Platzgründen kann ich auf dieses Thema nicht ausführlicher eingehen, aber Sie können vollständige Beschreibungen in der SQL Server-Onlinedokumentation finden.
Figure 13 Arbeiten mit räumlichen Daten (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
Ich hoffe, dass diese Informationen zu den sieben neuen Datentypen in SQL Server 2008 hilfreich waren.

Kelly Wilson ist seit über 20 Jahren im Bereich des Software Engineering tätig. Während dieser Zeit hat sie Anwendungen für SQL Server, 3D-Grafik-Programme, Spiele und Anwendungen im Bereich der Farbwissenschaft geschrieben. Kelly Wilson arbeitet derzeit als Programming Writer in der SQL Server-Gruppe bei Microsoft.


 SQL&#160;Server&#160;2008: Abfrageleistung in Data Warehouses
SQL Server 2008 Sunil Agarwal and Torsten Grabs and Dr. Joachim Hammer

Abfrageleistung in Data Warehouses
Kurz zusammengefasst:
  • Optimierung von Sternverknüpfungsabfragen
  • Parallelverarbeitung partitionierter Tabellen
  • Zeilen- und Seitenkomprimierung
  • Indizierte Sichten mit ausgerichteter Partitionierung

Die Funktionen für das relationale Data Warehousing in SQL Server 2008 sind deutlich leistungsfähiger als noch bei seinem Vorgänger. Trotzdem fragen Sie sich vielleicht, wie Sie diese neuen Möglichkeiten nutzen können, um ein effizientes Data Warehouse für die Entscheidungsunterstützung bei Milliarden von Zeilen zu erstellen. Sie
möchten vielleicht wissen, mit welchen Features sich eine optimale Abfrageleistung für Abfragen und Berichte zur Entscheidungsunterstützung erzielen lässt und welche Leistungssteigerungen von dieser neuen SQL Server®-Version realistischerweise zu erwarten sind.
Je näher der Veröffentlichungstermin rückt, desto mehr Fragen tauchen auf. Wir hoffen, dass Ihnen diese detaillierte Beschreibung einiger der wichtigsten leistungsrelevanten Data Warehousing-Features von SQL Server 2008 bei Ihrer persönlichen Vorbereitung von Nutzen ist.

Logischer Datenbankentwurf: Dimensionsmodellierung
Transaktionalen Branchenanwendungen liegt meist ein normalisiertes Datenbankschema zugrunde. Bei relationalen Data Warehouses liegt das Augenmerk des logischen Datenbankschemas jedoch weniger auf der Normalisierung. Viele relationale Data Warehouses folgen heute einem Dimensionsmodellierungsansatz, den Ralph Kimball und Margy Ross mit ihrem Buch „The Data Warehouse Toolkit: The Complete Guide to Dimensional Modeling“ populär gemacht haben.
Wenn Sie sich ausführlich mit dem Data Warehousing befasst haben, sind Ihnen die gebräuchlichsten Schemamuster für relationale Data Warehouses, wie z. B. das Stern- und das Schneeflockenschema, wahrscheinlich bereits vertraut. Die Dimensionsmodellierung unterscheidet zwischen Dimensionstabellen und Faktentabellen. Während die Dimensionstabellen die Masterdaten (wie z. B. Produkte, Kunden, Filialen und Länder) enthalten, sind in der Faktentabelle die Transaktionsdaten (wie z. B. Umsätze, Aufträge, Einkäufe und Rückgaben) gespeichert.
Dimensionstabellen und Faktentabellen sind durch PK/FK-Beziehungen (primary key, Primärschlüssel; foreign key, Fremdschlüssel) miteinander verknüpft. Sie werden feststellen, dass viele Data Warehouses, um den Speicherbedarf gering zu halten, die FK-Einschränkungen nicht durchsetzen. Dadurch wird der Speicheraufwand infolge der zugrunde liegenden Indizes vermieden, und der Wartungsaufwand für die Faktentabelle wird gering gehalten. Die Dimensionstabellen in einem Data Warehouse sind normalerweise recht klein und enthalten in der Regel zwischen einigen Tausend und mehreren Millionen Zeilen. Die Faktentabelle hingegen kann sehr groß sein und zwischen einigen hundert Millionen und mehreren Milliarden Zeilen umfassen. Daher muss beim logischen Entwurf besonders der Speicherbedarf der Faktentabelle berücksichtigt werden.
Dieser Größenfaktor wirkt sich auch darauf aus, welcher Schlüssel aus einer Dimensionstabelle für die Beziehungen zwischen Fakten- und Dimensionstabelle verwendet wird. Zusammengesetzte Schlüssel auf Grundlage des Geschäftsschlüssels der Dimension (also dem realen Bezeichner der Entität, die durch die Dimension repräsentiert wird) decken normalerweise mehrere Spalten ab. Dies stellt jedoch für den zugehörigen Fremdschlüssel in der Faktentabelle ein Problem dar, weil der zusammengesetzte Mehrspaltenschlüssel für jede Zeile der Faktentabelle wiederholt wird.
Daher ist es üblich, die Beziehungen zwischen einer Faktentabelle und ihren Dimensionen mithilfe kleiner Ersatzschlüssel zu implementieren. Ein Ersatzschlüssel ist eine ID-Spalte des Typs „integer“, die als künstlicher Primärschlüssel für die Dimensionstabelle dient. Wenn sich die Faktentabelle auf den kleineren Ersatzschlüssel bezieht, wird der Speicherbedarf für große Faktentabellen deutlich verringert. Abbildung 1 zeigt das Schema eines Data Warehouse mit Dimensionsmodellierung, in dem Dimensions- und Faktentabellen mit Ersatzschlüsseln verwendet werden.
Abbildung 1 Beispiel eines Sternschemas mit einer Faktentabelle und zwei Dimensionstabellen
Abbildung 1 Beispiel eines Sternschemas mit einer Faktentabelle und zwei Dimensionstabellen
Der Schneeflockenschemaentwurf verteilt eine oder mehrere Dimensionen auf mehreren Ebenen (z. B. Kunde, Land und Region für eine Kundendimension), wodurch größere Dimensionen, bei denen übermäßige Datenredundanzen vorliegen können, normalisiert werden. Die Ebenen werden durch separate Tabellen repräsentiert, wodurch das Schema die Form einer Schneeflocke erhält. Im Sternschema hingegen werden die Dimensionen nicht auf Tabellen verteilt. Vielmehr hat es die Form eines Sterns, mit der Faktentabelle in der Mitte und den Dimensionstabellen um sie herum gruppiert.
Bei einem Stern- oder Schneeflockenschema mit Dimensionsmodellierung folgen die Abfragen zur Entscheidungsunterstützung einem typischen Muster: Die Abfrage wählt mehrere relevante Measures aus der Faktentabelle aus, verknüpft die Faktenzeilen anhand der Ersatzschlüssel mit einer oder mehreren Dimensionen, belegt die Geschäftsspalten der Dimensionstabellen mit Filterprädikaten, gruppiert nach einer oder mehreren Geschäftsspalten und aggregiert schließlich die aus der Faktentabelle abgerufenen Measures über einen bestimmten Zeitraum. Dieses Muster, gelegentlich auch als Sternverknüpfungsabfrage bezeichnet, wird im Folgenden näher vorgestellt:
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

Physischer Entwurf
Viele SQL-Abfragen in Ihrem relationalen Data Warehouse haben die Struktur einer Sternverknüpfungsabfrage. Die Abfragen zur Entscheidungsunterstützung ändern sich jedoch im Laufe der Zeit, weil die Entscheidungsträger nach neuen Möglichkeiten suchen, die grundlegenden Geschäftsdaten besser zu verstehen. Daher besteht die Arbeitsauslastung von Data Warehouses in der Regel zu einem großen Teil aus Ad-hoc-Abfragen. Dies macht den physischen Entwurf für Abfragen zur Entscheidungsunterstützung und ein Data Warehouse-Schema mit Dimensionsmodellierung so anspruchsvoll.
Bei SQL Server beginnt die Entwicklung eines Data Warehouse gewöhnlich mit einem Blaupausenschema oder einem physischen Entwurf, der nach und nach an die tatsächliche Arbeitsauslastung angepasst und weiterentwickelt wird. Das hier vorgestellte Blaupausenschema können Sie selbstverständlich für Ihre eigene Data Warehouse-Umgebung übernehmen und anpassen. Befolgen Sie dabei jedoch stets die bewährten Methoden für den physischen Datenbankentwurf, und berücksichtigen Sie beispielsweise die Auswirkung von Updateindexwartungen auf die Leistung und den Speicherbedarf von Indizes.

Die Faktentabelle
Das Blaupausenschema versucht, die typische Sternabfrageform vorwegzunehmen und erstellt Indizes über die Faktentabelle. Der gruppierte Index der Faktentabelle nutzt mehrere Dimensionsersatzschlüsselspalten (Fremdschlüsselspalten) als Indexschlüssel. Dabei sollten die am häufigsten genutzten Spalten in der Liste der Indexschlüssel enthalten sein. Sie können sich selbst überzeugen, dass dies ein guter Zugriffspfad für die am häufigsten ausgeführten Abfragen Ihrer Arbeitsauslastung ist.
Zusätzlich wird mit diesem Blaupausenschema für jede Dimensionsersatzspalte (Fremdschlüsselspalte) in der Faktentabelle ein nicht gruppierter Index über eine Spalte erstellt. So entsteht ein überaus effizienter Zugriffspfad für Abfragen, die in einer ihrer Dimensionen sehr selektiv sind.
Ziel des gruppierten Indexes ist es, für die Mehrzahl der Abfragen in der Arbeitsauslastung eine gute Leistung zu erzielen. Der Satz nicht gruppierter Indizes zielt speziell auf Abfragen ab, mit denen Faktentabellenmeasures für einen bestimmten Kunden oder ein bestimmtes Produkt abgerufen werden. Durch diese nicht gruppierten Indizes wird sichergestellt, dass beispielsweise nicht die komplette Faktentabelle durchlaufen werden muss, um die Umsatzzahlen eines einzelnen Kunden abzurufen.

Dimensionstabellen
Wenn Sie das Blaupausenschema auf Dimensionstabellen anwenden, müssen Sie für alle Dimensionstabellen Indizes erstellen. Diese umfassen einen nicht gruppierten Primärschlüssel-Einschränkungsindex auf der Ersatzschlüsselspalte der Dimension sowie einen gruppierten Index über die Spalten des Geschäftsschlüssels der Dimensionsentität. Bei großen Dimensionstabellen sollten Sie erwägen, nicht gruppierte Indizes für Spalten hinzuzufügen, die häufig in stark selektiven Prädikaten verwendet werden.
Der gruppierte Index erleichtert das effiziente Extrahieren, Transformieren und Laden (ETL) im Wartungsfenster des Data Warehouse, wobei es sich oft um einen besonders zeitkritischen Prozess handelt. Bei sich langsam ändernden Dimensionen beispielsweise werden die vorhandenen Zeilen direkt vor Ort aktualisiert, während bislang noch nicht in der Dimension enthaltene Zeilen an die Dimensionstabelle angehängt werden. Für einen erfolgreichen Einsatz dieses Zugriffsmusters ist eine gut funktionierende Suche und Aktualisierung der Dimensionstabelle zum ETL-Zeitpunkt Voraussetzung.
Das hier vorgestellte Blaupausenschema ist ein guter Ausgangspunkt für physische Entwürfe in relationalen Data Warehouses, die mit SQL Server erstellt wurden. Ausgehend von diesem typischen relationalen Data Warehouse-Setup werden wir nun näher auf einige zentrale neue Features von SQL Server 2008 eingehen.

Optimierung von Sternverknüpfungsabfragen
Die größten Kosten bei der Ausführung einer Sternverknüpfungsabfrage in einem relationalen Data Warehouse mit Dimensionsmodellierung entstehen gewöhnlich durch die Verarbeitung der Faktentabelle. Das ist auch ganz logisch, denn selbst stark selektive Abfragen rufen bedeutend mehr Zeilen aus der Faktentabelle als aus einer der Dimensionen ab. Daher ist ein optimaler Zugriffspfad für die Faktentabelle ein wesentlicher Faktor für eine gute Abfrageleistung.
In SQL Server wählt der Abfrageoptimierer automatisch aus einer Reihe von Alternativen den Zugriffspfad mit den niedrigsten geschätzten Kosten aus. Beim Data Warehousing besteht das Hauptziel darin sicherzustellen, dass der Abfrageoptimierer die besten alternativen Zugriffspfade für den Ausführungsplan der Sternverknüpfungsabfrage berücksichtigt. Der Abfrageoptimierer von SQL Server umfasst verschiedene Funktionalitäten, um automatisch gut funktionierende Ausführungspläne für Sternverknüpfungsabfragen erstellen zu können.
Bei Sternverknüpfungsabfragen lässt sich zwischen drei verschiedenen Klassen unterscheiden, wie in Abbildung 2 dargestellt. Diese weit gefassten Klassen helfen dem SQL Server-Modul auch dabei, den richtigen Plan für eine Abfrage auszuwählen. Das Hauptkonzept von SQL Server basiert auf der Selektivität dieser Abfragen in Bezug auf die Faktentabelle. Eine Abfrage gilt als umso selektiver, je weniger Zeilen sie aus der Faktentabelle benötigt. Für die Beurteilung der Abfrageklassen wird der prozentuale Anteil der Zeilen verwendet, die aus der Faktentabelle abgerufen wurden. Diese Prozentzahlen entsprechen Werten aus typischen Kundenumgebungen, stellen aber keine strengen Grenzen für die Erzeugung von Zugriffspfaddefinitionen dar.
Abbildung 2 Selektivitätsbereiche für Sternverknüpfungsabfragen
Abbildung 2 Selektivitätsbereiche für Sternverknüpfungsabfragen
Die erste Klasse umfasst stark selektive Abfragen, bei denen bis zu 10 Prozent der Zeilen aus der Faktentabelle verarbeitet werden. Die zweite Klasse mit mittlerer Selektivität besteht aus Abfragen, bei denen zwischen 10 und 75 Prozent der Faktentabellenzeilen verarbeitet werden. Abfragen in der dritten Klasse weisen eine geringe Selektivität auf und erfordern die Verarbeitung von über 75 Prozent aller in der Faktentabelle gespeicherten Zeilen. Die Kästchen in der Abbildung zeigen auch die zur Auswahl stehenden grundlegenden Abfrageausführungspläne für die einzelnen Selektivitätsklassen.

Planauswahl anhand der Selektivität
Da stark selektive Sternabfragen normalerweise nicht mehr als 10 Prozent der Faktentabellenzeilen abrufen, können solche Abfragen zufällige Zugriffe auf die Faktentabelle verkraften. Deshalb sind die Abfragepläne für diese Klasse stark abhängig von Verknüpfungen über verschachtelte Schleifen in Verbindung mit (nicht gruppierten) Indexsuchen und Lesezeichensuchen in der Faktentabelle. Diese zufälligen E/A-Zugriffe auf die Faktentabelle werden jedoch von sequenziellen E/A-Zugriffen übertroffen, sobald größere Teile der Faktentabelle abgerufen werden müssen. Dadurch werden alternative Abfragepläne erforderlich, sobald die Anzahl der Zeilen aus der Faktentabelle eine bestimmte Zahl überschreitet.
Da Sternabfragen mittlerer Selektivität einen erheblichen Anteil der Faktentabellenzeilen verarbeiten, werden für den Zugriff auf die Faktentabelle gewöhnlich Hashverknüpfungen mit Faktentabellenscans oder Faktentabellen-Bereichsscans bevorzugt. Um die Leistung dieser Hashverknüpfungen zu verbessern, verwendet SQL Server Bitmusterfilter.
Abbildung 3 zeigt, wie SQL Server mithilfe dieser Bitmusterfilter die Verknüpfungsleistung bei der Ausführung von Sternverknüpfungsabfragen verbessert. Die Abbildung zeigt den Plan für eine Abfrage in zwei Dimensionstabellen (Produkt und Zeit), die anhand ihrer Ersatzschlüssel mit der Faktentabelle verknüpft werden. Die Abfrage wendet für beide Dimensionstabellen Filterprädikate (wie z. B. WHERE-Klauseln) an, sodass sich für jede Dimension nur eine Zeile in Frage kommt. Dies wird durch die kleinen roten Tabellen neben den beiden Verknüpfungsoperatoren angezeigt.
Abbildung 3 Abfrageplan mit Sternverknüpfungen und Verknüpfungsverringerung
Abbildung 3 Abfrageplan mit Sternverknüpfungen und Verknüpfungsverringerung
Die einzelnen Verknüpfungen werden durch eine Hashverknüpfung implementiert, sodass SQL Server die Informationen zu in Frage kommenden Zeilen aus den Dimensionstabellen abrufen und für beide Dimensionstabellen für Informationen zur Verknüpfungsverringerung verwenden kann. Die grünen Kästchen in der Abbildung stellen die Datenstrukturen mit Informationen zur Verknüpfungsverringerung dar. Nachdem diese Datenstrukturen mittels der zugrunde liegenden Dimensionstabellen ausgefüllt wurden, verschiebt SQL Server sie während der Abfrageausführung automatisch zu dem Operator, der die Faktentabelle verarbeitet (z. B. einem Tabellenscan). Dieser Operator nutzt die Informationen zu den Dimensionstabellenzeilen, um die Zeilen der Faktentabellen zu entfernen, die für die Verknüpfungsbedingungen in Bezug auf die Dimensionen nicht in Frage kommen.
SQL Server bereinigt die Zeilen der Faktentabelle schon sehr früh während der Abfrageverarbeitung, nämlich direkt nach dem Abruf der Zeile aus der Faktentabelle. Dies bewirkt Einsparungen bei der CPU-Nutzung und potentiell auch bei den Datenträger-E/As, da die entfernten Zeilen nicht mehr durch weitere Operatoren des Abfrageplans verarbeitet werden müssen. SQL Server nutzt für die effiziente Implementierung der Datenstrukturen mit Informationen zur Verknüpfungsverringerung zum Zeitpunkt der Abfrageausführung eine Bitmusterdarstellung.

Pipeline zur Sternverknüpfungsoptimierung
Im Optimierungsprozess werden Verknüpfungsabfragen mittels der Standardheuristik optimiert, um so einen grundlegenden Satz von Alternativen für den Abfrageausführungsplan zu erstellen. Um zusätzliche Abfrageplanalternativen zu erstellen, werden dann Erweiterungen für besondere Zwecke aufgerufen.
Im Fall des Data Warehousing erkennt die Erweiterung Stern- und Schneeflockenschemas sowie das Sternabfragemuster und schätzt die Selektivität der Abfrage in Bezug auf die Faktentabelle ein. Wenn das Schema und die Abfrageform den Mustern entsprechen, fügt SQL Server dem Planbereich automatisch weitere Abfragepläne hinzu. Aus diesen wird dann bei der kostenbasierten Optimierung der vielversprechendste Abfrageplan für die Ausführung ausgewählt.
Zur Ausführungszeit der Abfrage überwacht SQL Server auch die tatsächliche Selektivität der Verknüpfungsverringerung zur Laufzeit. Wenn sich die Selektivität ändert, ordnet SQL Server die Datenstrukturen mit den Informationen zur Verknüpfungsverringerung so an, dass die selektivste zuerst angewendet wird.

Sternverknüpfungsheuristik
Viele physische Entwürfe für Data Warehouses folgen dem Sternschema, geben aber die Beziehungen zwischen Fakten- und Dimensionstabellen nicht vollständig an, wie z. B. bei den bereits erwähnten Fremdschlüsseleinschränkungen. Wenn die Fremdschlüsseleinschränkungen nicht explizit angegeben sind, ist SQL Server zur Erkennung von Sternschema-Abfragemustern auf die Heuristik angewiesen. Zur Erkennung von Sternverknüpfungs-Abfragemustern wird folgende Heuristik angewendet:
  1. Die größte an der n-ary-Verknüpfung beteiligte Tabelle wird als Faktentabelle behandelt. Für die Mindestgröße der Faktentabelle gelten zusätzliche Einschränkungen. Wenn beispielsweise die größte Tabelle eine bestimmte Größe nicht überschreitet, wird die n-ary-Verknüpfung nicht als Sternverknüpfung betrachtet.
  2. Sämtliche Verknüpfungsbedingungen der Binärverknüpfungen in einer Sternverknüpfungsabfrage müssen Gleichheitsprädikate auf nur einer Spalte sein. Alle Verknüpfungen müssen innere Verknüpfungen sein. Dies mag restriktiv scheinen, deckt aber tatsächlich die große Mehrheit der Verknüpfungen zwischen Faktentabelle und Dimensionstabellen auf dem Ersatzschlüssel in typischen Sternschemas ab. Wenn eine Verknüpfung eine komplexere Verknüpfungsbedingung besitzt, die nicht dem oben beschriebenen Muster entspricht, wird die Verknüpfung aus der Sternverknüpfung ausgeschlossen. Ein Fünf-Wege-Verknüpfung beispielsweise kann zu einer Drei-Wege-Sternverknüpfung führen (mit zwei zusätzlichen späteren Verknüpfungen), wenn zwei der Verknüpfungen komplexere Verknüpfungsprädikate besitzen.
Beachten Sie, dass dies heuristische Regeln sind. In einigen Fällen wählt die Heuristik eine Dimensionstabelle als Faktentabelle aus. Dies beeinflusst zwar die Planauswahl, hat aber keinen Einfluss auf die Korrektheit des ausgewählten Plans. Die Binärverknüpfungen in der Sternverknüpfung werden dann nach absteigender Selektivität geordnet. In diesem Zusammenhang ist die Verknüpfungsselektivität definiert als das Verhältnis zwischen der Kardinalität der Eingangsrelation der Faktentabelle und der Kardinalität der Ergebnisrelation der Verknüpfung. Die Verknüpfungsselektivität gibt an, wie stark eine bestimmte Dimension die Kardinalität einer Faktentabelle verringert. Allgemein gilt, dass Verknüpfungen mit höherer Selektivität zuerst behandelt werden sollten.
Der Abfrageprozessor in SQL Server wendet die Optimierung automatisch auf Abfragen an, die dem Sternverknüpfungsmuster und den oben genannten Bedingungen entsprechen, sofern die geschätzten Abfragekosten der sich ergebenden Abfragepläne attraktiv sind. Folglich müssen Sie keine Änderungen an Ihrer Anwendung vornehmen, damit diese von dieser deutlichen Leistungsverbesserung profitieren kann. Beachten Sie, dass einige der Sternverknüpfungsoptimierungen wie z. B. die Verknüpfungsverringerung nur in SQL Server Enterprise Edition verfügbar sind.

Leistungsergebnisse von Sternverknüpfungen
Im Rahmen der Entwicklung der Sternverknüpfungsoptimierung in SQL Server 2008 haben wir eine Reihe von Leistungsstudien mit Benchmark- und tatsächlichen Kundenarbeitsauslastungen durchgeführt. Besonders interessant sind dabei die Ergebnisse dreier dieser Arbeitsauslastungen.
Data Warehouse von Microsoft Sales In diesem Beispiel wird die Leistung eines Data Warehouse verfolgt, das in der Vertriebsabteilung von Microsoft zur internen Entscheidungsunterstützung verwendet wird. Dazu haben wir einen Beispielsnapshot der Datenbank mit einer Größe von etwa 750 GB (einschließlich Indizes) erstellt. Die Verarbeitung von Abfragen bei dieser Arbeitsauslastung ist anspruchsvoll, da viele mehr als 10 Verknüpfungen umfassen.
Einzelhandelskunde Diese Testreihe wurde für einen Data Warehousing-Kunden im Einzelhandel durchgeführt (mit einem Ladengeschäft und einem Onlineshop). Bei diesem Kunden treten ein dimensional modelliertes Schneeflockenschema sowie kanonische Sternverknüpfungsabfragen auf. Für unsere Tests haben wir einen Snapshot des Warehouse mit etwa 100 GB Rohdaten gefüllt.
Arbeitsauslastung für die Entscheidungsunterstützung Bei dieser Testreihe wurde die Leistung einer Arbeitsauslastung zur Entscheidungsunterstützung bei einer 100 GB großen Datenbank mit Dimensionsmodellierung untersucht. Abbildung 4 zeigt das Ergebnis für diese drei Arbeitsauslastungen. Dargestellt sind die normalisierten geometrischen Mittel der Abfrageantwortzeiten über alle Abfragen in der Arbeitsauslastung hinweg. Diese Metrik ist ein guter Indikator dafür, welche Abfrageleistung zu erwarten ist, wenn eine beliebige Abfrage von der Arbeitsauslastung ausgeführt wird. Die Balken in der Abbildung vergleichen die grundlegenden Leistungswerte ohne Sternverknüpfungsoptimierung (1,0) mit der Leistung bei Verwendung der Sternverknüpfungsoptimierung. Alle Testläufe wurden mit SQL Server 2008 durchgeführt.
Abbildung 4 Leistungssteigerung durch Sternverknüpfungsoptimierung
Abbildung 4 Leistungssteigerung durch Sternverknüpfungsoptimierung
Wie die Abbildung zeigt, haben sich alle Arbeitsauslastungen deutlich verbessert (um 12 bis 30 Prozent). Während die Werte im Einzelfall natürlich variieren können, ist mit einer durchschnittlichen Verbesserung der Arbeitsauslastung für die Entscheidungsunterstützung um rund 15–20 Prozent im Vergleich zum SQL Server-Modul zu rechnen, basierend auf der Erweiterung der neuen sternverknüpfungsspezifischen Optimierungen in SQL Server 2008.

Parallelverarbeitung partitionierter Tabellen
Um die Abfrageverarbeitung in großen Data Warehouses zu beschleunigen, werden große Faktentabellen von den Datenbankadministratoren häufig nach Datum partitioniert. Dabei werden die Daten in verschiedenen FileGroups platziert, was die zu durchsuchende Datenmenge bei der Verarbeitung von Zeilen innerhalb eines bestimmten Datenbereichs verringert. Zugleich wird die Leistung des zugrunde liegenden Datenträgersystems besser genutzt, wenn die FileGroups über eine große Anzahl physischer Datenträger verteilt sind.
Seit SQL Server 2005 besteht die Möglichkeit, eine große Relation in kleinere logische Abschnitte zu partitionieren, um die Verwaltung und Handhabung großer Tabellen zu erleichtern. Damit ließ sich auch erfolgreich die Abfrageverarbeitung optimieren, insbesondere bei großen Anwendungen zur Entscheidungsunterstützung.
Leider mussten einige Nutzer von SQL Server 2005 bei Abfragen auf diesen partitionierten Tabellen Leistungseinbußen feststellen, insbesondere bei der Ausführung auf Mehrprozessorcomputern mit gemeinsam genutztem Speicher. Bei der Verarbeitung paralleler Abfragen auf partitionierten Tabellen in SQL Server 2005 kann es vorkommen, dass nur ein Teil der verfügbaren Threads zum Ausführen der Abfrage zugeteilt wird.
Angenommen, bei einem 64-Kern-Prozessor könnten Abfragen bis zu 64 Threads parallel nutzen, und eine Abfrage betrifft zwei Partitionen. Bei SQL Server 2005 werden der Abfrage nur 2 der 64 Threads zugewiesen, sodass nur zwei Vierundsechzigstel (3,1 Prozent) der CPU-Leistung des Computers genutzt werden. Es hat sich gezeigt, dass bei manchen Abfragen die Leistung bei einer Partitionierung zehn Mal oder noch schlechter sein kann, als wenn dieselbe Abfrage auf demselben Computer mit einer nicht partitionierten Version der gleichen Faktentabelle ausgeführt wird.
SQL Server 2005 wurde nämlich speziell für Abfragen optimiert, die nur eine Partition betreffen. In einem solchen Fall weist der Abfrageprozessor alle verfügbaren Threads für die Durchführung des Scanvorgangs zu. Diese besondere Art der Optimierung bewirkt eine enorme Leistungssteigerung bei Abfragen auf einer Partition auf Mehrkerncomputern. Da war es nur verständlich, dass die Anwender ein vergleichbares Verhalten auch bei Abfragen über mehrere Partitionen erwarteten.
Das neue PTP-Feature (partitioned table parallelism) in SQL Server 2008 verbessert die Abfrageleistung bei Partitionierungen, indem die Rechenleistung der vorhandenen Hardware besser genutzt wird, unabhängig davon, wie viele Partitionen eine Abfrage betriff und wie groß die einzelnen Partitionen tatsächlich sind. In einem typischen Data Warehouse-Szenario mit einer partitionierten Faktentabelle ist bei Abfragen mit parallelen Plänen eine deutliche Leistungssteigerung möglich, insbesondere wenn die Anzahl der verfügbaren Prozessorkerne größer ist als die Anzahl der von der Abfrage betroffenen Partitionen. Dieses neue Feature ist sofort einsatzbereit. Es sind keine Abstimmungs- oder Konfigurationsmaßnahmen erforderlich.
Angenommen, eine Faktentabelle enthält die Umsatzzahlen sortiert nach Verkaufsdatum über vier Partitionen verteilt. Das Diagramm in Abbildung 5 zeigt dieses Beispiel. Beachten Sie, dass es anstelle eines einzelnen gruppierten Indexes für den gesamten Datenbereich (wie im Fall ohne Partitionen) hier für jede Partition der Faktentabelle in der Regel einen gruppierten Index auf der Datumsspalte gibt. Nehmen wir jetzt an, dass die Abfrage A die Umsatzzahlen der letzten sieben Tage zusammenfasst. Während über die letzte Partition (P4) kontinuierlich neue Vertriebsdaten in die Faktentabelle gelangen, berührt die Abfragen sehr wahrscheinlich mehrere Partitionen, je nachdem, wann sie ausgeführt wird. Dies wird in der ersten Zeile des Diagramms dargestellt: Die Abfrage A1 betrifft nur eine einzelne Partition, während die Abfrage A2 zwei Partitionen betrifft, da sich die relevanten Daten zum Zeitpunkt der Ausführung über die Partitionen P3 und P4 erstrecken.
Abbildung 5 Das neue PTP-Feature im Einsatz
Abbildung 5 Das neue PTP-Feature im Einsatz
Nehmen wir nun an, dass acht Threads verfügbar sind. Bei der Ausführung von A1 und A2 mit SQL Server 2005 kann es zu unerwartetem Verhalten kommen. Wenn der Optimierer in SQL Server 2005 zur Kompilierzeit darüber informiert ist, dass die Abfrage nur eine Partition berührt, wird diese Partition wie eine einzelne, nicht partitionierte Tabelle behandelt. Es wird dann ein Plan erstellt, der mit allen verfügbaren Threads auf die Tabelle zugreift.
Die Abfrage A1, bei der nur eine Partition (P3) betroffen ist, resultiert so in einem Plan, bei dem die Verarbeitung durch acht Threads erfolgt (nicht gezeigt). A2 hingegen betrifft zwei Partitionen. Hier weist das Ausführungsmodul jeder Partition nur einen Thread zu, selbst wenn die zugrunde liegende Hardware über zusätzliche Threads verfügt. Folglich nutzt A2 nur einen sehr kleinen Teil der verfügbaren CPU-Leistung und ist in der Ausführung wahrscheinlich deutlich langsamer als A1.
Die Ausführung von A1 und A2 mit SQL Server 2008 bewirkt eine bessere Nutzung der verfügbaren Hardware, eine bessere Leistung und ein besser vorhersagbares Verhalten. Im Fall von A1 weist das Ausführungsmodul der Datenverarbeitung in P2 wieder alle acht verfügbaren Threads zu (nicht gezeigt). A2 hingegen resultiert in einem parallelen Plan, bei dem das Ausführungsmodul P3 und P4 im Roundrobinstil alle verfügbaren Threads zuweist. Das Ergebnis ist in der untersten Zeile des Diagramms dargestellt: Jede der beiden Partitionen erhält vier Threads. Die CPU wird also weiterhin voll genutzt, und die Leistung von A1 und A2 ist vergleichbar.
Eine solche Roundrobinzuordnung der Threads ermöglicht eine zunehmend bessere Abfrageleistung, je mehr Prozessorkerne im Vergleich zur Anzahl der Partitionen, auf die die Abfrage zugreift, vorhanden sind. Leider ist die Zuordnung der Threads zu Partitionen nicht in jedem Fall so einfach wie in diesem Beispiel.
Die Leistungssteigerung von SQL Server 2005 zu SQL Server 2008 bei partitionierten Tabellen und einem Mehrkernprozessor-PC ist in Abbildung 6 näher dargestellt. Dieses Einzelfalldiagramm illustriert die Scanleistung für partitionierte Tabellen. Bei diesem speziellen Test, der auf einem System mit 64 Kernen und 256 GB RAM durchgeführt wurde, haben wir eine 121 GB große Tabelle in 11 Partitionen zu je 11 GB partitioniert. Für die in dieser Abbildung dargestellte Testreihe wurde eine Heapdateiorganisation verwendet, einmal mit „warmem“ und einmal mit „kaltem“ Puffer. Sämtliche Abfragen führen einfache Datenscans durch.
Abbildung 6 Scanleistung für SQL Server mit aktiviertem neuem PTP-Feature
Abbildung 6 Scanleistung für SQL Server mit aktiviertem neuem PTP-Feature
Auf der Y-Achse ist die Antwortzeit (in Sekunden) dargestellt und auf der X-Achse der Parallelitätsgrad (degree of parallelism, DOP), der der Anzahl an Threads entspricht, die der Abfrage zugewiesen sind. Sowohl bei warmem als auch bei kaltem Puffer sinken die Antwortzeiten, bis der DOP den Wert 22 erreicht. An diesem Punkt tritt die Sättigung des E/A-Systems für den Start mit kaltem Puffer ein. Der Grund dafür ist, dass die Abfrage in diesem Beispiel E/A-gebunden ist. Bei stärker CPU-gebundenen Arbeitsauslastungen besteht diese Einschränkung möglicherweise nicht oder tritt erst bei höheren DOPs auf.
Die Kurve für den Start mit warmem Puffer hingegen zeigt bei steigendem Parallelitätsgrad auch weiterhin sinkende Antwortzeiten. Bei SQL Server 2005 würden beide Kurven etwa bei DOP 11 anfangen abzuflachen, da die Anzahl der Threads pro Partition im Fall mehrerer Partitionen auf 1 begrenzt ist.
Wichtig ist festzuhalten, dass in der Praxis die Verbesserung der Antwortzeiten bei einem höheren Parallelitätsgrad nie linear ist. Vielmehr ähnelt das erwartete Verhalten dem einer Schrittfunktion. Dies spiegelt die Tatsache wider, dass die Abfrage im Prinzip immer auf das langsamste Unterelement wartet. Daher würde das Hinzufügen eines weiteren Threads zu einem Scanvorgang die Ausführungszeit einer Abfrage erst verbessern, wenn alle übrigen Scans ebenfalls zusätzliche Threads erhalten haben, sodass sie schneller ausgeführt werden können.
In weiteren Tests haben wir das neue PTP-Verhalten für verschiedene andere Hardware- und Dateikonfigurationen untersucht. Bei steigendem Parallelitätsgrad über einen Thread bzw. eine Partition hinaus ließ sich in Sachen Skalierung des Durchsatzes ein ähnliches Verhalten feststellen.
Nicht zuletzt verbessert das neue PTP-Feature in SQL Server 2008 auch die Lesbarkeit von Abfrageplänen und ermöglicht einen besseren Einblick in die Ausführung bestimmter Arbeitsauslastungen. Beispielsweise wurde im Rahmen des PTP-Features auch die Darstellung paralleler und serieller Pläne in Showplan-XML verbessert, und auch die Partitionierungsinformationen in Kompilierzeit- und Laufzeitausführungsplänen wurden optimiert.

Datenkomprimierung
Mit der zunehmenden Verbreitung von Business Intelligence lassen Unternehmen mehr und mehr Daten zur Analyse in ihre Data Warehouses einfließen. Das Ergebnis ist ein exponentielles Wachstum der zu verwaltenden Datenmenge. 1995 hat die erste Studie der Winter Corporation zum Thema Datenbankgröße ergeben, dass das weltweit größte System etwa ein Terabyte an Daten enthielt. Zehn Jahre später war die größte Datenbank etwa 100 Mal so groß. Erstaunlicher ist jedoch die Tatsache, dass sich die Größe von Data Warehouses etwa alle zwei Jahre verdreifacht. Daraus ergeben sich neue Herausforderungen bei der Verwaltung solch großer Datenmengen und der Realisierung akzeptabler Leistungsniveaus bei Data Warehouse-Abfragen. Solche Abfragen sind in der Regel komplex, umfassen zahlreiche Verknüpfungen und Aggregate und greifen auf große Datenmengen zu. Zudem ist es nicht ungewöhnlich, dass viele Abfragen E/A-gebunden sind.
Speziell auf dieses Problem zielt die systemeigene Datenkomprimierung ab. Mit SQL Server 2005 SP2 wurde ein neues Speicherformat mit variabler Länge eingeführt – das vardecimal-Format für Dezimalzahlen und numerische Daten. Mit diesem neuen Speicherformat lässt sich die Größe einer Datenbank erheblich verringern. Diese Platzersparnis wiederum kann auf zweierlei Weise helfen, die Leistung von E/A-gebundenen Abfragen zu steigern. Erstens müssen weniger Seiten gelesen werden, und zweitens wird die Lebensdauer der Seiten verbessert, da die Daten komprimiert im Pufferpool gehalten werden. (Anders ausgedrückt: Auf diese Weise wird die Wahrscheinlichkeit erhöht, dass sich die angeforderte Seite bereits im Puffer befindet.) Selbstverständlich sind mit der Platzersparnis durch die Datenkomprimierung auch CPU-Kosten für die Komprimierung und Dekomprimierung der Daten verbunden.
SQL Server 2008 basiert auf dem vardecimal-Speicherformat und verfügt über zwei Arten von Komprimierung: die Zeilenkomprimierung und die Seitenkomprimierung. Die Zeilenkomprimierung erweitert das vardecimal-Speicherformat, indem sämtliche Datentypen fester Länge in einem Speicherformat variabler Länge gespeichert werden.
Beispiele für Datentypen fester Länge sind Integer-, Char- und Gleitkommadatentypen. Obwohl SQL Server diese Datentypen in einem Format variabler Länge speichert, bleibt die Semantik der Datentypen unverändert erhalten (aus Sicht der Anwendung bleibt der Datentyp ein Datentyp fester Länge). Sie können also die Vorteile der Datenkomprimierung nutzen, ohne Änderungen an Ihren Anwendungen vornehmen zu müssen.
Die Seitenkomprimierung minimiert die Datenredundanz in Spalten in einer oder mehreren Zeilen einer gegebenen Seite. Dazu wird eine proprietäre Implementierung des LZ78-Algorithmus (Lempel-Ziv-Algorithmus) genutzt, bei dem die redundanten Daten nur einmal auf der Seite gespeichert werden und bei dem dann von mehreren Spalten auf diese Seite verwiesen wird. Beachten Sie, dass die Seitenkomprimierung die Zeilenkomprimierung praktisch bereits umfasst.
Die Zeilen- und die Seitenkomprimierung können für eine Tabelle, einen Index oder bei partitionierten Tabellen und Indizes für eine oder mehrere Partitionen aktiviert werden. So haben Sie völlige Flexibilität bei der Auswahl der zu komprimierenden Tabellen, Indizes und Partitionen und können die richtige Balance zwischen Platzersparnis und CPU-Kosten finden. Abbildung 7 illustriert dies anhand einer auf unterschiedliche Weise partitionierten Umsatztabelle mit ausgerichteten Indizes.
Abbildung 7 Partitionierte Tabelle mit unterschiedlichen Komprimierungseinstellungen
Abbildung 7 Partitionierte Tabelle mit unterschiedlichen Komprimierungseinstellungen
Jede Partition entspricht einem Quartal, wobei Okt-Dez das aktuelle Quartal ist. Angenommen, auf die ersten beiden Partitionen wird nur selten zugegriffen, auf die dritte Partition häufiger und meistens auf die letzte Partition. In diesem Fall wäre eine mögliche Konfiguration, für die ersten beiden Partitionen die Seitenkomprimierung zu aktivieren (für maximale Platzeinsparung bei minimaler Auswirkung auf die Rechenleistung), für die dritte Partition die Zeilenkomprimierung zu nutzen und die letzte Partition unkomprimiert zu verwenden.
Die Komprimierung können Sie online und offline mithilfe der DDL-Anweisungen (Data Definition Language, Datendefinitionssprache) ALTER TABLE und ALTER INDEX aktivieren. SQL Server verfügt auch über eine gespeicherte Prozedur zum Abschätzen der Platzeinsparungen. Die erreichbaren Platzeinsparungen hängen von der Datenverteilung und dem Schema des komprimierten Objekts ab.
Die Testergebnisse bei vielen Kundendatenbanken lassen vermuten, dass die Mehrzahl der Anwender auf diese Weise die Größe ihrer Datenbank um 50 bis 65 Prozent verringern und die Leistung der E/A-gebundenen Abfragen deutlich verbessern kann. Die Auswirkung auf die Leistung von CPU-gebundenen Abfragen einzuschätzen, ist jedoch etwas schwieriger und hängt von der Komplexität der Abfrage ab. Bei SQL Server entstehen die Kosten für die Dekomprimierung nur bei einem Zugriff auf den Index oder die Tabellen. Wenn die relativen CPU-Kosten für Scanoperatoren im Vergleich zu den CPU-Gesamtkosten der Abfrage gering sind, wie es bei einem Data Warehouse-Szenario normalerweise der Fall ist, dürfte der Einfluss auf die CPU-Nutzung maximal 20–30 Prozent betragen.

Indizierte Sichten mit ausgerichteter Partitionierung
In SQL Server 2008 ermöglichen indizierte Sichten mit ausgerichteter Partitionierung eine effizientere Erstellung und Verwaltung von Zusammenfassungsaggregaten in einem relationalen Data Warehouse und deren Verwendung in Szenarios, in denen eine effiziente Nutzung bislang nicht möglich war. Dies verbessert die Abfrageleistung. Ein typisches Szenario ist eine Faktentabelle, die nach Datum partitioniert ist. Für diese Tabelle sind indizierte Sichten (oder Zusammenfassungsaggregate) definiert, um Abfragen zu beschleunigen. Wenn zu einer neuen Tabellenpartition gewechselt wird, wird automatisch auch zu den entsprechenden Partitionen der indizierten Sichten mit ausgerichteter Partitionierung gewechselt, die für die partitionierte Tabelle definiert sind.
Dies stellt eine erhebliche Verbesserung gegenüber SQL Server 2005 dar, wo die für eine partitionierte Tabelle definierten indizierten Sichten zuerst verworfen werden mussten, bevor mit dem Vorgang ALTER TABLE SWITCH eine Partition gewechselt werden konnte. Die indizierten Sichten mit ausgerichteter Partitionierung in SQL Server 2008 bieten Ihnen die Vorteile indizierter Sichten auf große partitionierte Tabellen, vermeiden dabei aber die Kosten für eine erneute Aggregaterstellung für eine komplette partitionierte Tabelle. Zu den Vorteilen gehören auch die automatische Verwaltung von Aggregaten und die Verwendung vorhandener indizierter Sichten.

Sperrenausweitung auf Partitionsebene
SQL Server unterstützt die Bereichspartitionierung, sodass Daten zur besseren Verwaltbarkeit partitioniert oder gemäß ihrem Nutzungsmuster gruppiert werden können. Beispielsweise könnten Umsatzzahlen auf monatlicher oder vierteljährlicher Basis partitioniert werden. Außerdem können Sie eine Partition ihrer eigenen FileGroup zuordnen und umgekehrt die FileGroup einer Gruppe von Dateien zuweisen. Dies bietet zwei wichtige Vorteile. Erstens können Sie eine Partition als unabhängige Einheit sichern und wiederherstellen. Zweitens können Sie eine FileGroup einem langsamen oder schnellen E/A-Subsystem zuordnen, je nach Nutzungsmuster oder der Abfragelast.
Ein interessanter Punkt dabei ist das Zugriffsmuster der Daten. Möglicherweise müssen die Abfragen und DML-Vorgänge nur auf eine Teilmenge der Partitionen zugreifen und diese ändern. Wenn Sie beispielsweise die Umsatzzahlen des Jahres 2004 analysieren, benötigen Sie nur Zugriff auf die entsprechenden Partitionen. Im Idealfall kommt es (mit Ausnahme der Systemressourcen) zu keiner Beeinflussung durch Abfragen, die gleichzeitig auf Daten in anderen Partitionen zugreifen. In SQL Server 2005 kann der gleichzeitige Zugriff auf Daten in anderen Partitionen zu einer Tabellensperre führen, die den Zugriff auf andere Partitionen beeinflusst.
Um solche Störungen auf ein Minimum zu reduzieren, wurde bei SQL Server 2008 eine Option auf Tabellenebene eingeführt, mit der sich die Sperrenausweitung auf Partitions- oder Tabellenebene steuern lässt. Standardmäßig ist die Sperrenausweitung auf Tabellenebene aktiviert, wie es auch bei SQL Server 2005 der Fall ist. Bei Bedarf kann jedoch die Richtlinie für die Sperrenausweitung für die Tabelle außer Kraft gesetzt werden. Sie könnten die Sperrenausweitung beispielsweise wie folgt festlegen:
Alter table <mytable> set (LOCK_ESCALATION = AUTO)
Dieser Befehl weist SQL Server an, die für das Tabellenschema geeignete Sperrenausweitungsgranularität auszuwählen. Wenn die Tabelle nicht partitioniert ist, gilt die Sperrenausweitung auf Tabellenebene. Wenn die Tabelle partitioniert ist, gilt die Sperrenausweitung auf Partitionsebene. Diese Option dient SQL Server auch als Hinweis, auf die Sperrengranularität auf Tabellenebene zu verzichten.

Zusammenfassung
Dieser Artikel bietet nur einen kurzen Überblick über die verbesserten Features in SQL Server 2008, mit denen Sie die Leistung bei Abfragen zur Entscheidungsunterstützung in relationalen Data Warehouses verbessern können. Bedenken Sie, dass kurze Antwortzeiten bei den Abfragen zur Entscheidungsunterstützung zwar wichtig sind, dass aber auch andere wichtige Anforderungen berücksichtigt werden müssen, die den Rahmen dieses Artikels sprengen würden.
Hier einige Beispiele für weitere Funktionen im Zusammenhang mit relationalem Data Warehousing:
  • Unterstützung für die MERGE-Syntax in T-SQL, um (Dimensions-) Daten mit nur einer Anweisung und einem Roundtrip in der Datenbank zu aktualisieren, zu löschen oder einzufügen.
  • Optimierte Protokollierungsleistung des SQL Server-Moduls für effizienteres ETL.
  • Gruppierungssätze für eine vereinfachte Erstellung von Aggregatabfragen zur Entscheidungsunterstützung in T-SQL.
  • Sicherungskomprimierung zur Verminderung der E/A-Anforderungen für vollständige und inkrementelle Sicherungen.
  • Ressourcenkontrolle zur Steuerung der Systemressourcenzuordnung zu verschiedenen Arbeitsauslastungen.
Ausführlichere Informationen zu diesen spannenden Features finden Sie auf der SQL Server-Webseite unter microsoft.com/sql.
Unser Dank gilt Boris Baryshnikov, Prem Mehra, Peter Zabback und Shin Zhang für ihre fachliche Unterstützung.

Sunil Agarwal ist Senior Program Manager in der Arbeitsgruppe für das SQL Server-Speichermodul bei Microsoft. Zu seinen Arbeitsschwerpunkten zählen Parallelität, Indizes, tempdb, LOBs, Unterstützbarkeit sowie Massenimport und -export.
Torsten Grabs ist Senior Program Manager Lead für das Kernspeichermodul im Microsoft SQL Server-Team. Er besitzt einen PhD für Datenbanksysteme und verfügt über 10 Jahre Erfahrung in der Arbeit mit SQL Server.
Dr. Joachim Hammer ist Program Manager in der Arbeitsgruppe für Abfrageverarbeitung bei Microsoft. Zu seinen Spezialgebieten gehören die Abfrageoptimierung bei umfassenden Data Warehouse-Anwendungen sowie verteilte Abfragen, ETL und Informationsintegration.


 SQL Server: Minimieren der Blockierung in SQL&#160;Server
SQL Server Cherié Warren

Minimieren der Blockierung in SQL Server
Kurz zusammengefasst:
  • Ursachen für Sperrenausweitung
  • Vermeiden unnötiger Blockierung
  • Optimieren Ihrer Abfragen
  • Überwachen der Auswirkungen des Sperrens auf die Leistung

Sperren ist notwendig, um gleichzeitiges Lesen und Schreiben in einer Datenbank zu unterstützen, aber das Blockieren kann die Systemleistung beeinträchtigen, und zwar auf eine Weise, die manchmal nur schwer erkennbar ist. In diesem Artikel werde ich mich damit befassen, wie Sie Ihre SQL Server 2005- oder SQL Server 2008-Datenbank optimieren können,
um das Blockieren zu minimieren, und wie Sie das System überwachen können, damit Sie besser verstehen, welche Auswirkungen das Sperren auf die Leistung hat.

Sperrung und Ausweitung
SQL Server® wählt den am besten geeigneten Sperrungsgrad, wobei es berücksichtigt, wie viele Datensätze betroffen sind und welche gleichzeitige Aktivität auf dem System stattfindet. Standardmäßig wählt SQL Server den kleinsten Sperrungsgrad aus. Höhere Sperrungsgrade werden nur dann gewählt, wenn dies eine effizientere Verwendung des Systemspeichers ermöglicht. SQL Server weitet eine Sperre aus, wenn die Gesamtleistung des Systems davon profitiert. Wie Abbildung 1 veranschaulicht, finden Ausweitungen statt, wenn die Anzahl der Sperren bei einem bestimmten Scan die Zahl 5.000 überschreitet oder wenn der vom System für Sperren verwendete Speicher die verfügbare Kapazität übersteigt:
Abbildung 1 Ursachen für Sperrenausweitung
Abbildung 1 Ursachen für Sperrenausweitung
  • Wenn die Sperreneinstellung auf 0 gesetzt ist, werden vom Datenbankmodul 24 Prozent des Nicht-AWE-Speichers (Address Windowing Extensions) verwendet.
  • Wenn die Sperreneinstellung nicht auf 0 gesetzt ist, werden vom Datenbankmodul 40 Prozent des Nicht-AWE-Speichers verwendet.
Wenn eine Ausweitung erfolgt, wird immer zu einer Tabellensperre ausgeweitet.

Vermeiden unnötiger Blockierungen
Eine Blockierung kann bei jedem Sperrungsgrad stattfinden, aber das Blockierungsrisiko steigt, wenn Ausweitungen erfolgen. Sperrenausweitung kann ein Zeichen dafür sein, dass Ihre Anwendung auf ineffiziente Weise entworfen, programmiert oder konfiguriert wurde.
Um Blockierung zu vermeiden, ist es wichtig, die Grundlagen des Datenbankentwurfs zu beherzigen und beispielsweise ein normalisiertes Schema mit eingeschränkten Schlüsseln zu verwenden und Vorgänge mit großen Datenmengen auf Transaktionssystemen zu vermeiden. Wenn diese Prinzipien (z. B. die Trennung des Berichterstattungssystems vom Transaktionssystem oder die Verarbeitung von Datenfeeds außerhalb der Geschäftszeiten) nicht befolgt werden, ist es schwierig, das System zu optimieren.
Die Indizierung kann ein wichtiger Faktor dafür sein, wie viele Sperren benötigt werden, um auf die Daten zugreifen zu können. Ein Index kann die Anzahl der Datensätze verringern, auf die eine Abfrage zugreift, indem er die Anzahl der internen Suchvorgänge reduziert, die das Datenbankmodul durchführen muss. Wenn Sie beispielsweise in einer nicht indizierten Spalte einer Tabelle eine einzige Zeile auswählen, muss jede Zeile der Tabelle vorübergehend gesperrt werden, bis der gewünschte Datensatz identifiziert wurde. Wenn diese Spalte dagegen indiziert ist, wird nur eine einzige Sperre benötigt.
Sowohl SQL Server 2005 als auch SQL Server 2008 enthalten dynamische Verwaltungsansichten (sys.dm_db_missing_index_group_stats, sys.dm_db_missing_index_groups, sys.dm_db_missing_index_details), von denen Tabellen und Spalten angezeigt werden, die basierend auf gesammelten Nutzungsstatistiken von Indizes profitieren würden.
Fragmentierung kann bei Leistungsproblemen ebenfalls eine Rolle spielen, denn sie zwingt das Datenbankmodul unter Umständen, auf mehr Seiten zuzugreifen, als ohne Fragmentierung notwendig wäre. Zusätzlich können falsche statistische Werte den Abfrageoptimierer dazu verleiten, einen weniger effizienten Plan zu wählen.
Bedenken Sie, dass Indizes zwar den Datenzugriff beschleunigen, aber andererseits die Datenänderung verlangsamen können, weil nicht nur zugrunde liegende Daten geändert, sondern auch die Indizes aktualisiert werden müssen. Die dynamische Verwaltungsansicht „sys.dm_db_index_usage_stats“ hebt hervor, wie oft Indizes verwendet werden. Ein häufiges Beispiel für eine ineffiziente Indizierung tritt im Fall zusammengesetzter Indizes auf, bei denen sowohl isoliert als auch kombiniert dieselben Spalten indiziert werden. Da SQL Server auf Indizes von links nach rechts zugreift, wird der Index verwendet, solange die Spalten links außen hilfreich sind.
Eine Partitionierung von Tabellen kann sowohl das System optimieren, um das Blockierungsrisiko zu senken, als auch die Daten in separate physische Objekte unterteilen, die separat angefordert werden können. Während die Einrichtung von Zeilenpartitionen das naheliegendere Verfahren zur Trennung der Daten darstellt, sollte als weitere Möglichkeit eine horizontale Partitionierung der Daten in Betracht gezogen werden. Sie können sich u. U. bewusst für eine Denormalisierung entscheiden, indem Sie eine Tabelle in separate Tabellen mit derselben Anzahl von Zeilen und Schlüsseln, aber unterschiedlichen Spalten aufteilen, um die Wahrscheinlichkeit zu senken, dass separate Prozesse gleichzeitig exklusiv auf die Daten zuzugreifen versuchen.
Je vielfältiger die Möglichkeiten sind, mit denen eine Anwendung auf eine bestimmte Zeile von Daten zugreifen kann, und je mehr Spalten in dieser Zeile enthalten sein können, desto vorteilhafter kann ein mit Spaltenpartitionierung arbeitendes Verfahren sein. Anwendungswarteschlangen und Statustabellen können manchmal von diesem Verfahren profitieren. SQL Server 2008 bietet die zusätzliche Möglichkeit, Sperrenausweitungen für einzelne Partitionen (oder einzelne Tabellen, falls für die Tabelle keine Partitionen eingerichtet sind) zu deaktivieren.

Abfrageoptimierung
Die Abfrageoptimierung spielt bei der Verbesserung der Leistung eine wichtige Rolle. Hierbei können Sie nach den drei folgenden Verfahren vorgehen:
Verkürzen der Transaktion Eines der wichtigsten Verfahren zum Verringern von Blockierungen sowie zum Verbessern der Gesamtleistung besteht darin sicherzustellen, dass die Transaktionen möglichst klein sind. Jede Verarbeitung, die für die Integrität der Transaktion nicht entscheidend ist (z. B. die Suche nach verwandten Daten sowie das Indizieren und Bereinigen von Daten) sollte aus der Transaktion ausgelagert werden, um ihre Größe zu verringern.
SQL behandelt jede Anweisung als implizite Transaktion. Wenn sich die Anweisung auf eine große Zahl von Zeilen auswirkt, kann eine einzige Anweisung dennoch eine große Transaktion darstellen, insbesondere dann, wenn viele Spalten beteiligt sind oder wenn die beteiligten Spalten einen großen Datentyp enthalten. Eine einzige Anweisung kann auch Seitenaufteilungen verursachen, falls der Füllfaktor hoch ist oder eine UPDATE-Anweisung eine Spalte mit einem längeren Wert füllt, als der Spalte zugeordnet war. In solchen Fällen kann es nützlich sein, die Transaktion in Zeilengruppen aufzuteilen und diese einzeln zu verarbeiten, bis sie vollständig sind. Batchverarbeitung sollte nur in Betracht gezogen werden, wenn die einzelne Anweisung oder die Gruppen von Anweisungen in kleinere Stapel aufgeteilt werden können, die dennoch als vollständige Verarbeitungseinheiten betrachtet werden können, wenn sie gelingen oder fehlschlagen.
Sequenzieren der Transaktion Innerhalb der Transaktion lässt sich durch Sequenzierung die Wahrscheinlichkeit des Blockierens verringern. Dabei sind zwei Prinzipien zu beherzigen. Erstes Prinzip: Greifen Sie in Ihrem System im gesamten SQL-Code stets in der gleichen Reihenfolge auf Objekte zu. Ohne eine konsistente Reihenfolge können Deadlocks auftreten, falls zwei konkurrierende Prozesse in unterschiedlicher Reihenfolge auf Daten zugreifen und für einen dieser Prozesse ein Systemfehler ausgelöst wird. Zweites Prinzip: Setzen Sie Objekte, auf die häufig zugegriffen wird oder bei denen der Zugriff sehr aufwändig ist, an das Ende der Transaktion. SQL wartet mit dem Sperren der Objekte, bis sie in der Transaktion benötigt werden. Das Hinauszögern des Zugriffs auf diese „problematischen Objekte“ ermöglicht es, die Dauer der Sperrung dieser Objekte zu verkürzen.
Verwenden von Sperrhinweisen Sperrhinweise können für eine bestimmte Tabelle oder Ansicht auf Sitzungs- oder Anweisungsebene verwendet werden. Ein typisches Szenario für die Verwendung eines Hinweises auf Sitzungsebene ist beispielsweise eine Batchverarbeitung in einem Data Warehouse, bei der der Entwickler weiß, dass diese Verarbeitung der einzige Prozess ist, der zu einem bestimmten Zeitpunkt an diesem Satz von Daten ausgeführt wird. Wenn am Beginn der gespeicherten Prozedur ein Befehl wie z. B. „SET ISOLATION LEVEL READ UNCOMMITTED“ verwendet wird, reserviert SQL Server keine Lesesperren, wodurch der durch Sperren entstehende zusätzliche Aufwand insgesamt verringert und die Leistung gesteigert wird.
Ein typisches Szenario für die Verwendung von Hinweisen auf Anweisungsebene ist beispielsweise eine Situation, in der der Entwickler weiß, dass ein unsauberes Lesen auf sichere Weise stattfinden kann (z. B. beim Lesen einer einzigen Zeile in einer Tabelle, wobei feststeht, dass keine anderen gleichzeitigen Prozesse diese spezielle Zeile benötigen), oder in der alle anderen Versuche, die Leistung zu optimieren (z. B. Schemaentwurf, Indexentwurf und -wartung sowie Abfrageoptimierung), gescheitert sind und der Entwickler den Compiler zwingen will, eine bestimmte Art von Hinweis zu verwenden.
Zeilensperrhinweise sind u. U. dann sinnvoll, wenn eine Überwachung zeigt, dass Sperrungen eines höheren Sperrungsgrads stattgefunden haben, bei denen sich die Abfrage auf sehr wenige Datensätze auswirkt, denn dadurch lassen sich Blockierungen möglicherweise verringern. Tabellensperrhinweise sind evtl. dann sinnvoll, wenn eine Überwachung zeigt, dass Sperrungen eines kleineren Sperrungsgrads aufrechterhalten (und nicht ausgeweitet) werden, bei denen sich die Abfrage auf fast alle Datensätze der Tabelle auswirkt, denn dadurch lassen sich die zum Aufrechterhalten der Sperren benötigten Systemressourcen möglicherweise verringern. Beachten Sie, dass das Festlegen eines Sperrhinweises keine Gewähr dafür bietet, dass die Sperre nicht ausgeweitet wird, wenn die Anzahl der Sperren den Schwellenwert für den Systemspeicher erreicht. Das Festlegen eines Sperrhinweises verhindert jedoch alle sonstigen Ausweitungen.

Anpassen Ihrer Konfiguration
Wie Abbildung 2 veranschaulicht, müssen Sie beim Konfigurieren Ihres SQL Server-Systems eine Reihe von Faktoren berücksichtigen.
Abbildung 2 Ermittlung des für Sperren verwendbaren Speichers durch SQL Server
Abbildung 2 Ermittlung des für Sperren verwendbaren Speichers durch SQL Server
Speicher Da Sperren immer im Nicht-AWE-Speicher aufbewahrt werden, wird durch eine Erhöhung der Größe des Nicht-AWE-Speichers die Kapazität des Systems für das Aufrechterhalten von Sperren erhöht.
Wenn Sie versuchen, die Sperrkapazität zu erhöhen, sollte eine 64-Bit-Architektur Ihre erste Wahl sein, denn eine 32-Bit-Architektur ist auf 4 GB des Nicht-AWE-Speichers begrenzt, während es in einer 64-Bit-Architektur in dieser Hinsicht keinerlei Einschränkungen gibt.
Auf 32-Bit-Systemen können Sie ein zusätzliches Gigabyte an Speicher, das vom Betriebssystem genutzt wird, für SQL Server reservieren, indem Sie in der Datei „Boot.ini“ den Schalter „/3GB“ hinzufügen.
SQL Server-Konfigurationseinstellungen Über sp_configure können verschiedene Einstellungen festgelegt werden, die sich auf das Sperren auswirken. Mit der Sperreneinstellung wird konfiguriert, wie viele Sperren vom System aktiviert werden können, bevor ein Fehler ausgelöst wird. Standardmäßig ist diese Einstellung auf 0 gesetzt, was bedeutet, dass der Server die Sperrenreservierungen dynamisch an andere Prozesse anpasst, die Speicher benötigen. SQL reserviert zu Beginn 2.500 Sperren, und jede Sperre nimmt 96 Byte im Speicher in Anspruch. Ausgelagerter Speicher wird nicht verwendet.
Die Einstellungen für minimalen und maximalen Speicher reservieren die von SQL Server verwendete Speichermenge und konfigurieren dadurch den Server dafür, den Speicher statisch bereitzuhalten. Da die Sperrenausweitung mit dem verfügbaren Speicher zusammenhängt, kann das Reservieren der Speichermenge aus konkurrierenden Prozessen einen Einfluss darauf haben, ob Ausweitungen stattfinden.
Verbindungseinstellungen Standardmäßig werden Sperren, die blockieren, nicht aufgrund einer Zeitüberschreitung deaktiviert, aber Sie können die Einstellung „@@LOCK_TIMEOUT“ verwenden, die einen Fehler auslöst, wenn die für die Freigabe einer Sperre festgelegte Wartezeit überschritten wird.
Ablaufverfolgungsflags Auf Sperrenausweitungen beziehen sich insbesondere zwei Ablaufverfolgungsflags. Eines dieser Flags ist das Ablaufverfolgungsflag 1211, das Sperrenausweitungen deaktiviert. Wenn die Anzahl der verwendeten Sperren den verfügbaren Speicher überschreitet, wird ein Fehler ausgelöst. Das andere dieser Flags ist das Ablaufverfolgungsflag 1224, das Sperrenausweitungen für einzelne Anweisungen deaktiviert.

Überwachen Ihres Systems
Weiterführende Literatur
  • Inside Microsoft SQL Server 2005: The Storage Engine von Kalen Delaney
  • Überwachen von Blockierungen in SQL Server 2005 und SQL Server 2000
  • Leistungsstatistikskript für SQL Server 2005
  • Beheben von durch Sperrenausweitung in SQL Server verursachten Blockierungsproblemen
  • Sperrenausweitung (Datenbankmodul)

Die Auswirkungen, die das Sperren auf die Gesamtsystemleistung hat, können für Blockierungen und Sperren überwacht werden, indem in bestimmten Intervallen (z. B. stündlich) Statusdaten abgerufen und fortlaufend Informationen zu den aktivierten Sperren erfasst werden. Es müssen folgende Hauptinformationen ermittelt werden:
  • Betroffenes Objekt, Sperrungsgrad und Sperrentyp
  • Sperr- und Blockierdauer
  • Erteilter SQL-Befehl (Name der gespeicherten Prozedur, darin enthaltene SQL-Anweisung)
  • Informationen zur Blockierungskette (sofern relevant)
  • Nutzung der verfügbaren Sperrkapazität durch das System
Sie können ein ähnliches Skript wie in Abbildung 3 ausführen, um diese Informationen zu ermitteln und sie mit dem relevanten Zeitstempel in eine Tabelle zu schreiben. Um die Ressourcen-ID der blockierten Daten noch weiter aufzuschlüsseln, können Sie ein ähnliches Skript wie in Abbildung 4 ausführen.
Figure 4 Weitere Informationen zu blockierten Daten (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 Erfassen von Sperrstatistiken (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
Sie können Ihr System auch in Bezug auf Ausweitungen überwachen, und zwar über SQL Profiler (Lock:Escalation-Ereignis), über die dynamische Verwaltungsansicht „dm_db_index_operational_stats“ (index_lock_promotion_count) oder durch regelmäßiges Abrufen von Systemsperrungsinformationen. Durch eine Ausweitungsüberwachung lassen sich Informationen darüber gewinnen, ob die Verarbeitung eine Ausweitung erfordert. Ist dies nicht der Fall, können die relevanten gespeicherten Prozeduren eine Ursache von Leistungsproblemen aufzeigen. Tabellen mit großen Datenmengen oder einer hohen gleichzeitigen Nutzung sollten im Mittelpunkt der Auswertung stehen.
Nach dem Sammeln von Daten zu Sperren, Blockierungen und Ausweitungen können die Daten anschließend analysiert werden, um die kumulative Blockier- und Sperrzeit (Anzahl der Fälle multipliziert mit der Dauer der Fälle) pro Objekt zu bestimmen. Dies kann in der Regel einen iterativen Zyklus der Leistungsoptimierung in Gang setzen, in dem Änderungen implementiert, überwacht, analysiert und korrigiert werden. Manchmal ist lediglich eine einfache Änderung wie z. B. das Hinzufügen eines Indexes notwendig, um eine beträchtliche Leistungssteigerung zu erzielen und etwas daran zu ändern, in welchem Bereich des Systems der gravierendste Leistungsengpass entsteht.
Weitere Informationen zum Verringern von Blockierungen in SQL Server finden Sie in der Randleiste „Weiterführende Literatur“. Wenn in den Phasen der Entwicklung, der Programmierung und der Stabilisierung sorgfältig darauf geachtet wird, die Transaktionen klein zu halten, lassen sich viele Blockierungsprobleme minimieren. Die Wahl einer geeigneten Hardware kann ebenfalls die Wahrscheinlichkeit unerwünschter Ausweitungen beträchtlich senken. Durch eine unabhängige, kontinuierliche Auswertung von Blockierungen im System lassen sich Leistungsprobleme schnell an der Quelle ihres Entstehens erkennen.

Cherié Warren arbeitet als leitende Entwicklerin für Microsoft IT. Sie ist derzeit für eine der größten Transaktionsdatenbanken bei Microsoft verantwortlich. Cherié Warren berät auch oft zu Fehlerursachen und Leistungsproblemen im Zusammenhang mit der Blockierung. Sie ist seit 10 Jahren auf SQL Server-Datenbanken auf Unternehmensebene spezialisiert.


 Microsoft Office: Integrieren von Access-Datenbanken in SharePoint
Microsoft Office Peter Serzo

Integrieren von Access-Datenbanken in SharePoint
Kurz zusammengefasst:
  • Vorteile der Integration von Access und SharePoint
  • Migrieren von Access-Daten nach SharePoint
  • Erweitern der Access-Funktionalität mit SharePoint

Wenn ich mit Endbenutzern über Microsoft Office SharePoint Server (MOSS) 2007 spreche, bitte ich sie immer, mir zu zeigen, welche Tools sie verwenden und wie sie sie verwenden. Es stellt sich immer heraus, dass jemand in der
Organisation Microsoft® Office AccessTM verwendet, um wichtige Geschäftsanforderungen zu erfüllen. Access stellt in vielen Unternehmen nach wie vor ein nützliches Tool und eine wichtige Ressource dar.
MOSS 2007 bietet eine Möglichkeit, Access-basierte Anwendungen zu nutzen und sie in SharePoint® zu integrieren, sodass eine neue Lösung mit erweitertem Umfang erstellt werden kann. In diesem Artikel soll veranschaulicht werden, wie und an welchen Punkten die Integration von MOSS und Access stattfindet und wie ein Endbenutzer diese zwei Produkte konfigurieren kann, um eine Lösung zu erstellen.
Die zugrunde liegende Technologie, die MOSS zu Access beiträgt, beinhaltet einen Workflow, ein gemeinsames Repository (SQL Server®) und eine webbasierte Schnittstelle (den Browser). SharePoint-Features umfassen Dokumentverwaltung, Arbeitsbereiche sowie die Möglichkeit, benutzerdefinierte Listen einzurichten und integrierte Workflows und einsatzbereite Webparts zu verwenden, die alles abdecken, angefangen bei Werbemaßnahmen über das Erstellen einer Kontakt- bzw. Problemliste bis hin zum Verwalten von Formularen, die von Benutzern erstellt wurden. Darüber hinaus erhalten Endbenutzer durch die Benutzerfreundlichkeit und die vertrauten Office-Technologien mehr Möglichkeiten. Wie Sie sehen werden, stellt MOSS die bereits vorhandenen aktuellen Lösungen nicht in Frage. Stattdessen sorgt MOSS für Effizienz, da Sie Anwendungen nicht neu schreiben müssen. Dadurch wird Endbenutzern ermöglicht, sich auf die Behandlung geschäftlicher statt technischer Aspekte zu konzentrieren.
Von den Vorteilen profitiert nicht nur der Endbenutzer. IT-Abteilungen und Administratoren fragen sich, wie sie ihre Endbenutzer unterstützen können, wenn es um das Verwalten all der benutzerdefinierten Datenbanken geht, die in einem Unternehmen verwendet werden. Viele wissen nicht einmal, dass Access verwendet wird, um erfolgsentscheidende Geschäftsprobleme zu lösen, bis Probleme in bestimmten Bereichen auftreten, wie z. B. Speicherbeschränkungen, Mehrbenutzerzugriff, Sicherheit, das Reparieren fehlerhafter Datenbanken, Webnutzung, inkompatible Access-Versionen und das Bereitstellen von Änderungen auf mehreren Desktops. SharePoint hat für alle diese Probleme eine Antwort parat.
Auch wenn Access seine Grenzen hat, ist es leistungsfähig und benutzerfreundlich, besonders für diejenigen, die ihren Lebensunterhalt nicht mit dem Schreiben von Code verdienen. Unter einem Dach finden Sie hier konfigurierbare relationale Tabellen, einfache (und komplexe) Abfragen, ein Programm zum Erstellen von Front-End-Formularen per Drag & Drop, datenbasierte Berichte und die Möglichkeit, mehrere Benutzer zu konfigurieren. Das Erstellen von Lösungen, die auf Access und SharePoint basieren, ist sowohl für Organisationen nützlich, die Ressourcen und Talente zusammenführen wollen, als auch für Einzelpersonen, die die über Jahre aufgebauten Anwendungen und Fähigkeiten nutzen möchten.

Erste Schritte
Access 2007 bietet mehrere Punkte für die Integration in MOSS 2007. Wie Sie in Abbildung 1 sehen können, gehören dazu z. B.: das Importieren von Daten aus einer SharePoint-Liste, das Veröffentlichen von Daten auf einer SharePoint-Website, das Erstellen einer SharePoint-Liste, das Verwenden einer SharePoint-Liste als externe Quelle, das Migrieren einer Access-Datenbank auf eine neue oder vorhandene SharePoint-Website und der Offlinezugriff auf SharePoint-Daten.
Abbildung 1 Access 2007 bietet einfache Einstiegspunkte für die Integration in SharePoint
Abbildung 1 Access 2007 bietet einfache Einstiegspunkte für die Integration in SharePoint
Das Erstellen einer SharePoint-Liste aus einer Access-Tabelle ist ein guter Ausgangspunkt. Eine SharePoint-Liste ist einer Access-Tabelle sehr ähnlich. Sie wird in der SQL Server-Inhaltsdatenbank gespeichert, enthält bestimmte Feldattribute und unterstützt Suchvorgänge.
Einige der Einschränkungen, die beim Erstellen einer SharePoint-Liste zu beachten sind, umfassen Folgendes: Microsoft empfiehlt für eine optimale Leistung eine Beschränkung auf 2000 Elemente pro Ansicht; SharePoint erzwingt keine referentielle Integrität; OLE-Objekte werden in SharePoint nicht exportiert; und die Prüfung der Daten ist eingeschränkt.
Wählen Sie zum Erstellen einer SharePoint-Liste aus einer Access-Tabelle zuerst die Registerkarte „Externe Daten“ aus, und klicken Sie dann unter der Gruppe „Export“ auf die aktivierte Schaltfläche „SharePoint-Liste“. Jetzt müssen Sie die SharePoint-Website angeben, auf der die Liste aktiviert wird, indem Sie das in Abbildung 2 dargestellte Dialogfeld „Export – SharePoint-Website“ ausfüllen oder indem Sie mit der rechten Maustaste auf Ihre Tabelle klicken und „Daten in SharePoint-Liste exportieren“ auswählen. Beachten Sie Folgendes: Wenn die Tabelle ein untergeordnetes Element in einer Beziehung war, werden alle übergeordneten Tabellen ebenfalls exportiert.
Abbildung 2 Access-Daten werden auf eine von Ihnen angegebene SharePoint-Website exportiert
Abbildung 2 Access-Daten werden auf eine von Ihnen angegebene SharePoint-Website exportiert
Nach Abschluss des Exports haben Sie die Möglichkeit, die Exportschritte zu speichern, um sie nicht wiederholen zu müssen. Jetzt können Sie zur SharePoint-Website gehen und die Daten anzeigen, die hochgeladen wurden. Dieser einfache Vorgang ist nützlich, wenn Sie Daten nach SharePoint transferieren und Benutzern zugänglich machen möchten. Die Vorteile bestehen in der erhöhten Sicherheit, da die Daten jetzt in einer SQL Server-Datenbank gespeichert werden, und im einfacheren Zugriff, da Informationen über den Browser verfügbar sind.
Ein anderer Vorgang – das Verknüpfen von Listen in SharePoint als Tabellen in Access – erweist sich jedoch als eine viel effektivere Möglichkeit für die Integration von Access und SharePoint. Klicken Sie dazu in Access auf die Registerkarte „Externe Daten“, und wählen Sie die SharePoint-Liste unter der Gruppe „Import“ die Option „SharePoint-Liste“ aus. Dadurch wird das Dialogfeld in Abbildung 3 geöffnet.
Abbildung 3 Verknüpfen von Access mit SharePoint
Abbildung 3 Verknüpfen von Access mit SharePoint
Wählen Sie die Website aus, die die als verknüpfte Datenquelle zu verwendende SharePoint-Liste enthält, und wählen Sie dann die Liste aus, die Sie verknüpfen möchten. Wenn dieser Vorgang beendet ist, wird die Liste in Access als verknüpfte Tabelle angezeigt, und in der rechten unteren Ecke der Anwendung sehen Sie die Anzeige „Online mit SharePoint“. Es findet jetzt eine gegenseitige Synchronisierung von Access und SharePoint statt, die das Hinzufügen, Ändern und Löschen von Vorgängen von SharePoint oder Access aus unterstützt. Wie Sie sehen werden, kann für die Tabelle Code geschrieben werden, um zusätzliche Funktionalität bereitzustellen.
Wenn Sie eine Verknüpfung mit SharePoint-Listen in Access herstellen, werden Sie feststellen, dass eine andere Tabelle, die WSS-Benutzerinformationsliste (Windows® SharePoint Services), ebenfalls standardmäßig importiert und verknüpft wird. Es wird eine Problemtabelle erstellt, die „Wechseln zu SharePoint-Website-Problemen“ genannt wird. Hier können Sie alle Datenkonflikte überprüfen.
Weitere Informationen zum Migrieren von Daten sowie dazu, wie Datentypen bei der Konvertierung behandelt werden, finden Sie unter „Konvertierung zwischen Access- und SharePoint-Datentypen durch Access“ (office.microsoft.com/en-us/access/HP010477131033.aspx) und im Abschnitt zu Einschränkungen der Migration in „Transferieren von Tabellen in einer Access-Datenbank auf eine SharePoint-Website und Erstellen zugehöriger Links“ (office.microsoft.com/en-us/access/HA101314681033.aspx).
Eine dritte Möglichkeit, Tabellen und Listen zu integrieren, wird durch SharePoint initiiert. Wählen Sie eine Liste, und klicken Sie auf der Registerkarte „Aktionen“ auf die Option „Mit Access öffnen“. Es wird ein Dialogfeld angezeigt, in dem Sie zur Angabe des (neuen oder bereits vorhandenen) Datenbanknamens aufgefordert werden. Nach der Angabe des Datenbanknamens wählen Sie aus, ob Sie einfach eine Verknüpfung zu den Daten auf der SharePoint-Website erstellen oder die Daten nach Access exportieren möchten (siehe Abbildung 4).
Abbildung 4 Bereitstellen von SharePoint-Daten über Access
Abbildung 4 Bereitstellen von SharePoint-Daten über Access

Transferieren einer Datenbank nach SharePoint
Bisher wurden das Importieren einer SharePoint-Liste als verknüpfte Tabelle und das Exportieren von Tabellen nach SharePoint als Listen behandelt. Was ist aber, wenn Sie auf die gesamte Datenbank zugreifen müssen? Viele Organisationen führen erfolgsentscheidende Anwendungen in Access aus und benötigen Remotezugriff auf diese Anwendungen, damit Einzelpersonen Berichte und Abfragen ausführen und Daten eingeben können. In solchen Situationen ist es aufgrund der Wirtschaftlichkeit oder der zur Verfügung stehenden Kompetenzen nicht immer möglich, die Anwendung neu zu schreiben. In SharePoint und Access wird dies mit der Option „Wechseln zu SharePoint“ abgedeckt, die Sie auf der Access-Registerkarte „SharePoint-Listen“ finden. Diese Option ähnelt der Option für das Wechseln zu SQL Server mithilfe des Upsizing-Assistenten, der in Access 97 eingeführt wurde.
Das Transferieren einer gesamten Access-Datenbank nach SharePoint bietet die folgenden Vorteile: Alle Tabellen werden in SharePoint-Listen umgewandelt; es wird eine Sicherung der Access-Datenbank erstellt; in Access werden Listen automatisch zu verknüpften Listen; Sie können die gesamte Datenbank und nicht nur Tabellen transferieren; und die Datenbank funktioniert weiterhin ganz so wie vor dem Transfer.
Wenn Sie auf die Schaltfläche „Wechseln zu SharePoint“ klicken, wird das Dialogfeld in Abbildung 5 angezeigt. Nach dem Angeben der Website müssen Sie entscheiden, ob Sie die Option auswählen, die Datenbank zu speichern. In diesem Fall wird die gesamte Datenbank in einer ausgewählten Dokumentbibliothek gespeichert. Das heißt, dass die gesamte Datenbank (einschließlich Formularen, Berichten, Abfragen und Makros) in SharePoint gespeichert wird und folglich auf dem Server verfügbar ist. Wenn ein Benutzer auf die Datenbank zugreifen will, navigiert er einfach zur Bibliothek, in der sich die Datenbank befindet, klickt darauf, und sie wird automatisch auf seinem Desktop bereitgestellt.
Abbildung 5 Geben Sie die SharePoint-Website an, auf die Sie Ihre Datenbank transferieren möchten
Abbildung 5 Geben Sie die SharePoint-Website an, auf die Sie Ihre Datenbank transferieren möchten
Wenn Sie sich entscheiden, die gesamte Datenbank zu transferieren, wird unter der Multifunktionsleiste die Statusleiste „Änderungen veröffentlichen“ angezeigt. Dies ermöglicht Ihnen, die lokalen Änderungen am Entwurf und an den Daten synchron mit der Kopie auf dem Server zu halten. Wenn Sie diese Option nicht auswählen, werden nur die Tabellen in Listen konvertiert und mit Access verknüpft. In diesem Fall ist die gesamte Datenbank nicht für die Benutzercommunity verfügbar und durch keine Sicherungskopie als Objekt in SharePoint gesichert.
Nach dem Auswählen einer dieser Optionen sind die Datenbank und ihre zugeordneten Informationen durch die ausgewählte SharePoint-Website verfügbar. Auch hier wird automatisch eine Tabelle namens „Wechseln zu SharePoint-Website-Problemen“ erstellt. An diesem Punkt werden alle durch die Migration verursachten Konflikte dokumentiert. Sie können die in Access auftretenden Probleme überprüfen, während Sie die Tabelle zur SharePoint-Website hochladen.

Ansichten, Formulare und Berichte
Nachdem die Datenbank transferiert wurde, werden Sie ihre Funktionalität testen wollen. Stellen Sie vor dem Start sicher, dass die Anzeige „Online mit SharePoint“ zu sehen ist. Beachten Sie, dass Access-Abfragen zu SharePoint-Ansichten werden. Eine SharePoint-Ansicht ist einer Access-Abfrage sehr ähnlich.
Wenn Sie die gesamte Datenbank transferieren, werden die vorhandenen Abfragen als Ansichten nach SharePoint kopiert. Die Benutzer von Access verstehen, dass das Erstellen von Abfragen ihnen ermöglicht, eine Teilmenge der Daten anzuzeigen. Zu erlernen, wie dies in einer SharePoint-Ansicht getan wird, hilft Ihnen zu verstehen, wie die Daten in einer SharePoint-Liste organisiert sind.
Eine der nützlichsten Ansichten, die Sie erstellen können, ist eine Access-Ansicht. Navigieren Sie dazu zu der Liste, unter der Sie die Ansicht erstellen werden, und wählen Sie „Ansichten“ und dann „Ansicht erstellen“ aus. Hier finden Sie die Option „Access-Ansicht“, mit der Sie listenbasierte Formulare und Berichte erstellen können. Wenn Sie auf diese Option klicken und die Access-Datenbank auswählen, wird ein Dialogfeld wie in Abbildung 6 angezeigt. Wie Sie sehen können, definieren Sie jetzt das Format (Formulartyp, PivotChart, PivotTable oder Bericht), und wenn der Prozess abgeschlossen ist, enthält die Access-Datenbank ein verknüpftes Formular bzw. einen verknüpften Bericht.
Abbildung 6 Erstellen einer Access-Ansicht
Abbildung 6 Erstellen einer Access-Ansicht

Offlinezugriff
In der Praxis bedeutet die Erweiterung einer erfolgsentscheidenden Anwendung eine Steigerung der Rendite. Eine Möglichkeit, eine integrierte Access/SharePoint-Anwendung zu erweitern, besteht darin zu erkennen, dass Sie keine Verbindung mit SharePoint herstellen müssen, um sie zu verwenden. Zur Bereitstellung einer solchen Flexibilität wurde in Access 2007 die Möglichkeit eingeführt, offline zu arbeiten. Informationen werden in der lokalen Kopie der Datenbank zwischengespeichert, bis diese an den Server angehängt ist. Um eine Datenbank offline zu nehmen, klicken Sie auf der Multifunktionsleiste unter „Externe Daten“ | „SharePoint-Listen“ auf die Schaltfläche „Offline arbeiten“.
Wenn Sie wieder eine Verbindung mit SharePoint herstellen möchten, können Sie entweder „Online arbeiten“ oder „Synchronisieren“ auswählen. Beide Optionen laden die Daten hoch und zeigen Konflikte an, die überprüft werden müssen. Bei der Option „Synchronisieren“ werden die Daten hochgeladen, die Anwendung bleibt jedoch offline.
Ein anderes Element, das in der Gruppe „SharePoint-Listen“ beachtet werden muss, ist „Änderungen verwerfen“, zu dem zwei Optionen gehören. Die erste Option verwirft alle Änderungen, aktualisiert aber nicht die SharePoint-Daten in Access. Die zweite Option verwirft alle Änderungen und aktualisiert die SharePoint-Daten (verknüpfte Listen).

Access-Vorlagen
Access 2007 besitzt mehrere vordefinierte Vorlagen, mit denen die Benutzer beim schnellen Erstellen von Geschäftslösungen unterstützt werden. Sie können sie durch Klicken auf die Schaltfläche „SharePoint-Listen“ auf der Registerkarte „Erstellen“ in der Gruppe „Tabellen“ anzeigen (siehe Abbildung 7). Wenn Sie eine dieser Vorlagen auswählen, wird das Schema einer Tabelle, die mit SharePoint verknüpft ist, automatisch definiert. Derzeit werden nur Kontakte, Aufgaben, Probleme und Ereignisse unterstützt. Dies bedeutet Folgendes: Wenn Sie eine Tabelle exportieren, die diese Art von Informationen enthält, werden die Daten als entsprechender WSS-Inhaltstyp ausgegeben (zum Beispiel Probleme als Probleme).
Abbildung 7 Auswählen des Listentyps
Abbildung 7 Auswählen des Listentyps
Sie können auch benutzerdefinierte Vorlagen erstellen, die für SharePoint-Listen oder SharePoint-Websitevorlagen mit den sich selbst verknüpfenden Access 2007-Datenbanken verwendet werden können. Dies erfordert Access 2007 Developer Extensions und das Festlegen der WSSTemplateID der Tabelle. Diese Eigenschaft überprüft, welche Tabellen eine Entsprechung in den SharePoint-Listenvorlagen besitzen.

Access und Metadaten
Unternehmen mit feststehenden Access-Anwendungen sind möglicherweise nicht immer in der Lage oder dazu bereit, alle Anwendungen nach SharePoint zu transferieren. In solchen Fällen ist es manchmal sinnvoll, Code in Access zu schreiben, um SharePoint zu aktualisieren. Mit dem Code können Sie SharePoint und Access vereinigen.
Ein einfaches Beispiel ist die Datenbank von Northwind Trader, in der Informationen zu Produkten, Lieferanten und Kundenbestellungen gespeichert werden. Jedes Produkt hat in der Regel ein zugeordnetes Produktblatt, das vom Anbieter als PDF-Datei bereitgestellt wird. Die Access-Datenbank überprüft alle Informationen, die auf dem Produktblatt enthalten sind, wie z. B. den geografischen Standort, die Produktnummer, den Revisionsverlauf und den Code der Unternehmensabteilung. Diese Informationen müssen für die Lieferanten und Anbieter über das SharePoint-Extranet verfügbar sein.
Es wird eine SharePoint-Website eingerichtet, und alle Dokumente werden in eine verknüpfte Dokumentbibliothek transferiert. Die Metadatenfelder sind aber leer (siehe Abbildung 8), weil die Daten in Access nachverfolgt werden (und die zuständige Person mit Access vertraut ist und keinen Wechsel wünscht).
Abbildung 8 In SharePoint angezeigtes Northwind-Dokument mit fehlenden Metadaten
Abbildung 8 In SharePoint angezeigtes Northwind-Dokument mit fehlenden Metadaten
Zum Glück können Sie VBA-Code (Visual Basic® for Applications) hinzufügen, um die Metadaten über die Access-Anwendung zu aktualisieren (siehe Abbildung 9). Die Anwendung muss nicht neu geschrieben werden. Ihre Mitarbeiter können weiterhin ein vertrautes Tool verwenden, das mühelos auf das Web erweitert werden kann, und die Anbieter können in Abhängigkeit von ihren Berechtigungen auf das Extranet zugreifen (sodass sie nur sehen, was sie sehen sollen), und es gibt keine Probleme mit der Parallelität oder der Datenbank.
Abbildung 9 Aktualisieren von Metadaten mithilfe von Code
Abbildung 9 Aktualisieren von Metadaten mithilfe von Code

Integrierte Sicherheit
Einer der größten Vorteile, die das Transferieren von Access-Anwendungen nach SharePoint bietet, ist die Fähigkeit, das SharePoint-Sicherheitsmodell zu nutzen, in das die Active Directory®-Authentifizierung integriert ist. Das heißt, dass kein Grund mehr zur Sorge besteht, wie die Sicherheit in Access-Anwendungen durch das Erstellen von Schemas und Tabellen und anschließendem Hinzufügen von Benutzern implementiert wird. Mit SharePoint-Listen können Sie die Sicherheitsanpassung nutzen, bei der die Benutzer nur das sehen, was für sie bestimmt ist. Dies ist Standard in SharePoint. Darüber hinaus gilt: Falls es Komponenten der Datenbank gibt, die Sie nicht nach SharePoint transferieren möchten, müssen Sie sie auch nicht transferieren.
SharePoint bietet ein detailliertes, rollenbasiertes Sicherheitsmodell. Wenn Sie festlegen, wie und wohin Sie eine Datenbank transferiert wird, sollten Sie vor der Migration die Website und die Sicherheit entwerfen. Es ist dann leichter, die Berechtigungen einzurichten und zu testen. Außerdem treten weniger Migrationsprobleme auf, und die Access-Datenbank wird effizienter.

Referentielle Integrität
Es wäre nachlässig, das Thema referentielle Integrität nicht wenigstens anzuschneiden. Tatsache ist, dass SharePoint die referentielle Integrität im Gegensatz zu Access nicht erzwingt. Viele Installationen werden auf einer bestimmten Ebene normalisiert. Dies muss berücksichtigt werden, damit diese erfolgsentscheidenden Access-Datenbanken funktionieren. Glücklicherweise gibt es einige Problemumgehungen, die tatsächlich als Verbesserungen des vorhandenen Systems ausgearbeitet werden können.
Wie bereits angemerkt, wenn Sie eine Datenbank auf SharePoint verlagern, werden beim Transferieren untergeordneter Tabellen die übergeordneten Tabellen ebenfalls transferiert. Außerdem werden in SharePoint Nachschlagefelder verwendet, wenn es erkennt, dass eine Feldauswahl auf einer anderen Tabelle basiert. Angenommen, es wird ein Kunde ausgewählt, und in der Northwind Trader-Datenbank geht eine Bestellung ein. Wenn diese Tabellen nach SharePoint transferiert werden würden, wäre das Kundenfeld ein Nachschlagefeld in der Liste der Bestellungen.
Was ist mit Aktualisierungs- und Löschweitergaben und komplexeren Vorgängen? An diesem Punkt sollten SharePoint und seine Workflows als eine potenzielle Lösung evaluiert werden. Um zur Northwind Trader-Database zurückzukommen: Angenommen, ein Kunde ruft an und storniert eine bereits aufgegebene Bestellung, wodurch eine Reihe von Aktionen ausgelöst wird: Das Inventar muss aktualisiert werden, die Lieferanten müssen benachrichtigt werden, der für die Bestellung zuständige Mitarbeiter muss den Kunden kontaktieren, die Lieferung muss storniert werden, und die Buchhaltung muss aktualisiert werden. Da ist vieles in Bewegung, und vieles muss koordiniert werden.
Mithilfe von SharePoint Designer kann in SharePoint ein Workflow erstellt werden, der all dies leistet, sobald sich der Status der Bestellung ändert. Es gibt 22 sofort einsatzbereite Workflows, mit denen Hunderte von Aktionen entsprechend angepasst werden können. SharePoint Designer ist ein großartiges Tool, mit dem Sie sowohl Ihre Website als Marke präsentieren und Workflows erstellen können.
Das Beste daran ist, dass das Erstellen von Workflows mithilfe von SharePoint Designer Fähigkeiten erfordert, über die Benutzer, die mit der Access-Programmierung vertraut sind, bereits verfügen. Das heißt, dass Benutzer, die Access-Anwendungen erstellen, ihre Fähigkeiten ohne großen Aufwand übertragen und auf die Workflowerstellung erweitern können. Wenn es um den Einsatz von SharePoint Designer bei Workflows geht, muss kein Code geschrieben werden, und die Bereitstellung dieser Workflows ist kein Problem.

Peter Serzo ist Senior Engineer bei CDW Berbee. Er konzentriert sich auf das Entwerfen von SharePoint-Unternehmenslösungen für Unternehmen auf der ganzen Welt.


 Mitteilung der Redaktion: An alte und neue Freunde
Mitteilung der Redaktion
An alte und neue Freunde

Wir müssen in diesem Monat mit einer bittersüßen Nachricht beginnen. Leider müssen wir uns von Joseph Davies, dem Cable Guy, verabschieden, der in dieser Ausgabe zum letzten Mal für das TechNet Magazin schreibt. Es war ein besonderes Glück, einen Experten seines Kalibers zu haben, der uns über unzählige Windows-Netzwerkthemen informierte. Leider hat Joseph Davies kürzlich bei Microsoft eine neue anspruchsvolle Funktion übernommen und kann deshalb seine monatliche Rubrik nicht mehr fortsetzen. Wir alle hier beim TechNet Magazin danken ihm für seine großartigen Beiträge im Laufe der Jahre und wünschen ihm viel Erfolg bei seinen neuen Aufgaben.
Aber so traurig wir auch sind, den Cable Guy zu verlieren, die Arbeit muss weitergehen. So werden wir in unserer nächsten Ausgabe mit einer neuen Rubrik namens „Einblicke in SharePoint“ beginnen. Im vergangenen Jahr haben wir überwältigend viele Rückmeldungen mit Bitten um mehr Schulung und Anleitung zu SharePoint erhalten. Da SharePoint eine aufregende und sich schnell entwickelnde Technologie ist, können wir uns kein Thema vorstellen, das eine monatliche Rubrik mehr verdienen würde als dieses. Pav Cherny wird es einführen und mit einem Überblick über die Architektur der SharePoint-Infrastruktur beginnen. In den nächsten Monaten sollen Sicherheit, Verfügbarkeit, Leistung, Problembehandlung und vieles mehr erörtert werden. Wenn es SharePoint-Themen gibt, die wir Ihrer Meinung nach behandeln sollten, geben Sie uns Bescheid! Senden Sie eine E-Mail an tnmag@microsoft.com.
Besonderen Dank schulden wir auch zwei unserer leitenden Redakteure, Terrence Dorsey und Nancy Michell. Terrence Dorsey und Nancy Michell waren von Anfang an dabei und haben gemeinsam sehr viel an Können und Erfahrung eingebracht, um das TechNet Magazin zu dem zu machen, was es heute ist. Von dieser Ausgabe an widmen sie sich jedoch voll und ganz unserer Partnerveröffentlichung, dem MSDN Magazin. Zwei weitere unserer äußerst talentierten leitenden Redakteure, Matthew Graven und Sharon Terdeman, verabschieden sich im Gegenzug von ihren Aufgaben beim MSDN Magazin, um sich voll auf das TechNet Magazin zu konzentrieren. Glücklicherweise gehen Terrence Dorsey und Nancy Michell nicht weit weg, und wir haben vor, auch weiterhin auf ihre Einblicke und Fachkenntnis zu bauen, während das TechNet Magazin weiter wächst.
Nach diesen wichtigen Mitteilungen wünsche ich Ihnen nun viel Spaß mit der Ausgabe dieses Monats. Sie widmet sich größtenteils dem bevorstehenden Start von SQL Server 2008. Es werden verschiedene neue Features besprochen, die Ihnen beim Speichern, Schützen, Verwalten und effektiven Nutzen Ihrer Daten helfen werden, bei denen es sich angesichts des kontinuierlich wachsenden Umfangs wohl um Ihre wichtigste Geschäftsressource handelt. – Joshua Hoffman


 Briefe: Leser sagen ihre Meinung
Briefe
Leser sagen ihre Meinung

Starke und schwache Hosts
Im Artikel „Starke und schwache Hosts“ vom September 2007 in der Rubrik „The Cable Guy“ (technetmagazine.com/issues/ 2007/09/CableGuy) wurde die Möglichkeit erwähnt, die Verwendung schwacher Hosts zu aktivieren oder zu deaktivieren. Es wurde jedoch nicht gesagt, wie das geht. Erfolgt dies nur durch Aktivieren oder Deaktivieren der Firewall oder durch Festlegen von Parametern? Gibt es einen entsprechenden Registrierungsparameter?
Für die Konfiguration des lokalen Zugriffs sind zwei Informationen erforderlich: die IP-Adresse und die IP-Maske. Weshalb betrachtet Microsoft eine Konfiguration, die den optionalen Gatewayparameter nicht enthält, als ungültig?
– Milt B.
Sie können starkes oder schwaches Hostverhalten in Windows Vista® und Windows Server® 2008 mit den in der Abbildung aufgelisteten Befehlen konfigurieren (erstmals in der Ausgabe vom September 2007 veröffentlicht). Es gibt keine entsprechenden Registrierungseinträge. In Windows® XP und Windows Server 2003 können Sie kein starkes oder schwaches Hostverhalten konfigurieren. Für IPv4 gilt nur schwaches Hostverhalten, für IPv6 nur starkes.
Zur zweiten Frage: Nach unserer Kenntnis ist für IPv4- oder IPv6-Konfiguration an einer Schnittstelle keine Konfiguration eines Standardgateways oder -routers über die Benutzeroberfläche oder die Befehlszeile erforderlich.


 Toolbox: Neue Produkte f&#252;r IT-Experten
Toolbox
Neue Produkte für IT-Experten
Greg Steen

Verwalten mehrerer Monitore
UltraMon
realtimesoft.com
Seit LCD-Monitore immer billiger werden, scheinen die meisten Systemadministratoren an ihrer Arbeitsstation mindestens zwei oder sogar mehr Monitore zu verwenden, die ihnen helfen, verschiedene administrative Dashboards im Auge zu behalten. (Wenn Sie dies noch nicht so tun, kann ich es Ihnen nur empfehlen, denn es macht das Leben sehr viel einfacher!) Mit der Aufrüstung um einen oder zwei Monitore beginnen Sie aber auch, die Maus stärker zu verwenden, was Sie bei der Arbeit beträchtlich bremsen kann. Ein gutes, leicht zu bedienendes Dienstprogramm zur Anzeigeverwaltung, das Tastenkombinationen bietet, kann hier eine große Hilfe sein. Ein derartiges Tool, das es wert ist, in Erwägung gezogen zu werden, ist UltraMon von Realtime Soft. Dieses Dienstprogramm, das Windows® 98 bis Windows Vista® unterstützt, umfasst sowohl 32-Bit- als auch 64-Bit-Ausführungen.
Wenn Sie UltraMon zum ersten Mal starten, werden Sie wahrscheinlich die beiden kleinen Symbole in der Ecke jedes Ihrer Anwendungsfenster bemerken. Über das erste Symbol wird das Anwendungsfenster schnell über die Monitore erweitert, und über das zweite Symbol wird die Anwendung auf den entgegengesetzten Monitor verlagert. Sie werden auch bemerken, dass die Taskleiste auf jeden Ihrer Monitore erweitert wurde und die Anwendungen enthält, die auf dem betreffenden Monitor aktiv sind. Dies bedeutet, dass Sie nicht mehr zu Ihrem primären Monitor zurückkehren müssen, um eine Anwendung zu erweitern, und sie wissen sofort, wo diese Anwendung angezeigt wird, sobald sie maximiert bzw. minimiert wird.
In jeder Ihrer Anwendungsverknüpfungen erlaubt Ihnen eine neue UltraMon-Registerkarte festzulegen, auf welchem Monitor und an welcher Position diese Anwendung gestartet werden soll. Dadurch können Sie beispielsweise festlegen, dass Microsoft® Outlook® immer im linken Fenster und Internet Explorer® immer im rechten Fenster geöffnet wird. Als IT-Experte stellen Sie wahrscheinlich von anderen Standorten (z. B. von einem Laptop oder von Ihrem Computer zu Hause) aus eine Verbindung zu Ihrer Arbeitsstation her. Dabei müssen Sie bedenken, dass diese Remoteverbindungen wahrscheinlich eine geringfügige Änderung des Desktops und der Auflösung Ihrer Anzeige erfordern.
Glücklicherweise unterstützt UltraMon auch Anzeigeprofile, die es Ihnen erlauben, rasch zwischen benutzerdefinierten Ansichten Ihrer Monitore zu wechseln. Dies ist eine große Hilfe, wenn Sie Ihren Computer gemeinsam mit anderen Personen benutzen, die ihre eigene benutzerdefinierte Ansicht verwenden möchten, oder wenn Sie Ihre Ansicht basierend auf Ihren Aktivitäten ändern möchten.
Wenn Sie Windows 2000 oder Windows XP verwenden, können Sie auch ein „Spiegelungsfeature“ aktivieren, die ideal für Präsentationen geeignet ist, da es Ihnen erlaubt, Ihren primären Monitor mit einer höheren Auflösung als der Auflösung Ihres Präsentationsmonitors zu betreiben, aber weiterhin die Anwendungsaktivitäten auf beiden Bildschirmen wiederzugeben. Falls Sie noch nicht auf Windows Vista aktualisiert haben, können Sie mit dieser Anwendung auch Ihre Anzeige auf mehrere Monitore erweitern lassen, was Windows Vista standardmäßig tut.
Zusätzliche Anzeigefeatures (z. B. eine Verknüpfung zu den Anzeigeeinstellungen, die Möglichkeit, den primären Monitor Ihres System schnell festzulegen und zu wechseln, sowie der Wechsel zu einem anderen Anzeigeprofil) sind nur einige der schnell zugänglichen wiederkehrenden Aktivitäten, die über das Taskleistensymbol von UltraMon zur Verfügung stehen. Damit können Sie auch das Optionsfenster von UltraMon öffnen, mit dem Sie unter anderem Ihre „Smart Taskbar“ anpassen, Tastaturbefehle zum Verschieben und Ändern von Fenstern einrichten und Ihre Maus zu einem bestimmten Fokuspunkt bringen können.

Preis: Ab 39,95 US-Dollar für eine Einzellizenz.
Über das Optionsfenster von UltraMon können Sie Abkürzungstasten einrichten und Ihre Smart Taskbar verwalten
Über das Optionsfenster von UltraMon können Sie Abkürzungstasten einrichten und Ihre Smart Taskbar verwalten

Buchbesprechung
Microsoft SQL Server 2005 Analysis Services
informit.com
Es ist zwar schön, umfangreiche Daten über Ihre Kundenbasis zu besitzen, aber diese Daten auch wirklich zu verstehen und zu verarbeiten, um nützliche statistische Informationen über diese Kunden zu erhalten, ist eine ganz andere Sache. Um diese durchkalkulierten Ansichten und Projektionen zu erhalten, benötigen Sie eine dynamische, leistungsfähige Business Intelligence-Lösung. Ein Teil der Antwort von Microsoft auf Business Intelligence und OLAP (online analytical processing) ist SQL Server® 2005 Analysis Services. Um diese Lösung voll nutzen zu können, steht Ihnen das Buch „Microsoft SQL Server 2005 Analysis Services“ als Leitfaden zur Verfügung.
Wenn Sie eine neue Data Mining-Implementierung in Erwägung ziehen, von Analysis Services 2000 auf Analysis Services 2005 aktualisieren oder sich als Datenbankadministrator dafür interessieren, was diese Tools für Sie und Ihre Organisation leisten können, ist dieses Buch von Py Bateman, Alexander Berger, Irina Gorbach und Edward Melomed genau das Richtige für Sie. Statt sich mit theoretischen Aspekten von Business Intelligence zu befassen, bietet das Buch einen detaillierten, praxisnahen Einblick in die Verwendung, die Entwicklung für, die Implementierung und die Verwaltung von Analysis Services. Da viele der in diesem Buch bereitgestellten Beispiele auf Food Mart 2005, einer im Lieferumfang der Software enthaltenen Beispieldatenbank, basieren, können Sie rasch damit beginnen, in Ihrer eigenen Testumgebung zu experimentieren.
In der Einleitung des Buchs wird Ihnen gezeigt, was neu an der 2005-Version ist. Dabei wird unter anderem auf die Client/Server-Architektur mit Webdienst-XMLA-Kommunikation (XML for Analysis), auf das UDM (Unified Dimensional Model) sowie auf Verbesserungen der Skalierbarkeit in der neuen Version eingegangen. Ferner werden Ihnen die Food Mart-Beispieldatenbank und die Grundlagen mehrdimensionaler Datenbanken vorgestellt. Danach gehen Sie zum Erstellen von Datenmodellen über und erfahren etwas über DDL-XML (Data Definition Language), Dimensionsattribute und -hierarchien sowie Cubes und multidimensionale Analyse. Sie erhalten mit dem Business Intelligence Development Studio auch eine Einführung in die Entwurfs- und Entwicklungswerkstatt des mit 2005 Analysis Services arbeitenden Business Intelligence-Experten.
Sobald Sie sich mit diesen Entwurfskonzepten vertraut gemacht haben, befassen Sie sich mit der Datenbearbeitung über MDX (multidimensional expressions, mehrdimensionale Ausdrücke). Sie erfahren nicht nur, wie mit MDX Daten abgefragt werden, sondern lernen auch, wie MDX-Funktionen sowie Element- und Zelleneigenschaften verwendet werden, wie mit leeren Sätzen und Null-Werten, untergeordneten SELECT-Ausdrücken und Teilcubes gearbeitet wird, wie auf Cubes basierende MDX-Berechnungen erstellt und verwendet werden und wie Sie Ihre Abfragen mit gespeicherten Prozeduren erweitern können. Danach befasst sich das Buch mit KPIs (Key Performance Indicators), Drillthroughaktionen und Scorecards, die Ihnen Einblick in die verschiedenen Aspekte von Geschäftswachstum, Metriken und Zielen gewähren können.
Der nächste Abschnitt des Buchs stellt den ETL-Prozess (Extrahieren, Transformieren und Laden) für Ihre Daten vor und zeigt Ihnen dabei nicht nur, wie Sie Daten in Ihr System integrieren können, sondern auch, wie Sie Ihren Aggregationsentwurf optimieren und durch Verwendung proaktiver Zwischenspeicherung die Leistung steigern können. Hier befassen Sie sich auch mit dem physischen Datenmodell Ihrer Cubes und Dimensionen und erfahren, wie die Verarbeitung der einzelnen Cubes und Dimensionen mit 2005 Analysis Services funktioniert. Darüber hinaus lernen Sie, wie Sie Ihre Implementierung entsprechend Ihren Geschäftsanforderungen skalieren können, und erfahren am Rande auch mehr über Netzwerklastenausgleich, OLAP-Farmen, verknüpfte Measure- und Dimensionsgruppen sowie Remotepartitionsverarbeitung.
Danach befasst sich das Buch mit den genauen Einzelheiten der Abfrageausführung, damit Sie die zugrunde liegenden Vorgänge besser verstehen und die Leistung Ihrer Anwendung genauer abstimmen können. Es beschreibt den Zugriff auf Ihre Daten aus der Perspektive eines Clients sowie die zahlreichen Optionen, die dafür zur Verfügung stehen, wie z. B. XMLA, ADOMD.net und AMO (Analysis Management Objects). Für diesen Abschnitt müssen Sie auf Ihre Programmierkenntnisse zurückgreifen, um zu erfahren, wie Sie Visual Studio und die Business Intelligence-IDEs dafür einsetzen können, Ihre eigenen benutzerdefinierten Data Warehouse-Anwendungen zu erstellen.
Der letzte Abschnitt befasst sich mit der Verwaltung Ihrer Analysis Services-Installation einschließlich der Verwendung des Ablaufverfolgungstools, des Flight Recorder und des SQL Server Profiler zur Überwachung der Leistung und der Integrität des Systems. Darüber hinaus werden Ihnen verschiedene Optionen zum Sichern und Wiederherstellen Ihrer Implementierung vorgestellt. Hier finden Sie Abschnitte über die Verwendung eines DDL-Befehls zum Sichern Ihrer Datenbank, über die Automatisierung durch SQL Server Agent oder SSIS (SQL Server Integration Services) sowie über Verfahren zur Wiederherstellung verlorengegangener oder beschädigter Daten. Alles in allem handelt es sich bei diesem Handbuch für SQL Server 2005 Analysis Services um ein ausführliches, umfassendes Nachschlagewerk.

Preis: $59.99.

Diagnose von Datenbankproblemen
ApexSQL Audit
apexsql.com/sql_tools_audit.asp
Sie wissen wahrscheinlich, dass der erste Schritt bei der Behebung eines Problems oder beim Aufspüren einer potenziellen Sicherheitslücke darin besteht, die relevanten Informationen zu sammeln, die mit dem Ereignis, das dieses Problem verursacht hat, zusammenhängen. Wenn Sie in der Endbenutzerbetreuung tätig sind, kennen Sie wahrscheinlich Beschwerden der Art „das System hat die Daten verloren“. Ein Tool, das Ihnen helfen kann, Problemen mit SQL Server-Datenbanken schnell auf den Grund zu gehen, ist ApexSQL Audit von ApexSQL, das SQL Server 7.0 bis SQL Server 2005 voll unterstützt.
Wie Sie sicher schon dem Namen entnehmen konnten, verfolgt diese Anwendung Aktivitäten in den von Ihnen angegebenen Datenbanken und ermöglicht Ihnen danach, anhand des Überwachungspfads benutzerdefinierte Berichte zur Analyse zu erstellen. Überwachungseinträge werden über SQL-Trigger hinzugefügt und in einem automatisch generierten Schema gespeichert. Sie können sich dafür entscheiden, die Überwachungsinformationen entweder in der gleichen Datenbank zu speichern, in der die von Ihnen beobachteten Daten gespeichert sind, oder sie in einer separaten Datenbank zu speichern, um sie zu isolieren.
Das Installieren (und Entfernen) des Überwachungsschemas (bzw. der Architektur, wie es auch bezeichnet wird) ist dank der grafischen Benutzeroberfläche ein völlig reibungsloser Vorgang. Das Einrichten eines Überwachungsplans für eine Datenbank ist recht einfach: Sie wählen die Datenbank, wählen die zu beobachtenden Tabellen und Felder aus und klicken dann auf die Schaltfläche, um die Trigger zu generieren.
Die Anwendung ermöglicht Ihnen, die Triggervorlagen für Ihr Projekt zu ändern, und mir persönlich gefällt es, dass der Vorlageneditor IntelliSense®-artige Funktionen für das Überwachungsobjektmodell bereitstellt, was es leicht macht, genau festzulegen, wann der Trigger ausgelöst wird und welche Informationen gespeichert werden. Mit einem weiteren nützlichen Feature können Sie auf einfache Weise auf Nachschlagetabellen verweisen, damit die Überwachungsinformationen verständlich sind, statt nur eine Ansammlung undurchschaubarer IDs zu erhalten. Sie können die Namen beobachteter Felder auch den Namen von Überwachungsfeldern zuordnen, falls Sie Spalten zuordnen möchten.
Sobald Sie bereit sind, kann Ihnen die Benutzeroberfläche einen schnellen Überblick über die derzeit angewendeten Überwachungstrigger bieten, und Sie können bei Bedarf mit einem einzigen Klick bestimmte Trigger aktivieren und deaktivieren. Mit der nützlichen Tabellenansicht der Benutzeroberfläche können Sie auch untersuchen, welche Überwachungsabdeckung Sie erzielen.
Wie Sie wissen, sind Überwachungsinformationen in der Regel sehr ausführlich, und daher wird eine Art von Informationsverwaltungsplan zum Archivieren und Bereinigen von Überwachungsdatenbanken benötigt. ApexSQL Audit bietet Ihnen ein Datenverwaltungstool, mit dem Sie entweder alle Informationen mit einem einzigen Klick löschen, einen Satz von Kriterien festlegen und danach löschen oder einen auf Kriterien basierenden Löschvorgang planen können.
Geplante Aufträge werden automatisch als DTS-Pakete (Data Transformation Services) erstellt und über den SQL-Agent geplant. Alle diese Überwachungsinformationen zu besitzen, bedeutet natürlich nicht automatisch, sie auch verwenden zu können. Glücklicherweise besitzt ApexSQL Audit eine leistungsfähige Berichterstattungskomponente, die es Ihnen ermöglicht, benutzerdefinierte gefilterte Ansichten unteilbarer Überwachungsdaten und zusammengefasste Ansichten dieser Überwachungsdaten zu erstellen. Sobald Sie Ihren Bericht generiert haben, können Sie ihn problemlos drucken oder die Ausgabe nach HTML, Microsoft Excel oder in eine Textdatei exportieren.

Preis: Ab 599 US-Dollar.
Die Nachschlagetabellen in ApexSQL Audit bieten umfangreiche Überwachungsinformationen
Die Nachschlagetabellen in ApexSQL Audit bieten umfangreiche Überwachungsinformationen

Automatisches Erinnern an das Ablaufen des Kennworts
Password Reminder PRO 1.4
sysoptools.com/password-reminder-pro.html
Haben Sie eine Zunahme von Helpdeskanrufen festgestellt, wenn Ihre Richtlinie für den Kennwortablauf in einer Gruppe Ihrer Organisation aktiv wird? Falls dies zutrifft, sollten Sie sich Password Reminder PRO von SysOp Tools ansehen. Dieses einfache Tool lässt sich in Active Directory® integrieren und informiert Ihre Endbenutzer, dass ihre Konten oder Kennwörter bald ablaufen.
Sie können drei verschiedene Erinnerungen einrichten, wobei für jede Erinnerung eine spezielle auf Text oder HTML basierende E-Mail-Vorlage zur Verfügung steht. Sie können auch ein maximales Kennwortalter mit der gleichen Anzahl von Tagen wie in Ihrer Active Directory-Konfiguration festlegen und die Stunde angeben, zu der Erinnerungen gesendet werden sollen, damit keine Konflikte mit den Zeiten entstehen, in denen Hochbetrieb herrscht. Mit dem Testmodus können Sie, ohne die Arbeit Ihrer Endbenutzer zu stören, die Auswirkungen in einer Vorschau betrachten, um sicherzustellen, dass Sie alles richtig konfiguriert haben.
Das Dienstprogramm besitzt auch eine Berichtskonsole, die Ihnen eine Datenrasteransicht verschiedener Benutzerklassen zeigt: ablaufende Konten, inaktive Benutzer, neue Konten, deaktivierte Konten und mehr. Über diese Berichtskonsole können Sie alle Informationen zur späteren Prüfung in eine XLS-Datei exportieren. Zur zusätzlichen Überwachung der gesendeten E-Mails sendet Password Reminder PRO täglich einen Bericht darüber, welche Erinnerungen an welche Benutzer gesendet wurden.

Preis: Ab 249 US-Dollar für eine 100-Benutzer-Lizenz.
Password Reminder PRO prüft Konfigurationen vor der Bereitstellung
Password Reminder PRO prüft Konfigurationen vor der Bereitstellung

Vereinfachte Remoteproblembehandlung
UltraVnc SC
uvnc.com/pchelpware/sc
Die einfachste Möglichkeit, ein Problem zu beheben oder einen Benutzer schrittweise durch einen Prozess zu führen, besteht darin, am betreffenden Computer persönlich anwesend zu sein. Dies ist jedoch in den geografisch weit verteilten Unternehmen von heute oft nicht möglich. Die in Windows integrierten Tools „Remotedesktopverbindung“ und „Remoteunterstützung“ können Ihnen helfen, eine Verbindung zu einigen der Computer in Ihrer Umgebung herzustellen. Wenn Sie aber sämtliche Computer abdecken möchten, sollten Sie sich das kostenlose Tool „UltraVNC SC“ von den Herstellern des Hauptprodukts „UltraVNC“ ansehen.
UltraVNC SC ermöglicht Ihnen genau wie sein großer Bruder, einen Remotecomputer anzuzeigen und zu steuern. Diese Version besteht jedoch aus einem winzigen 166K-UltraVNC-Server, den Sie konfigurieren und an Ihren Endbenutzer senden können. Da dieses Tool keine Registrierungseinträge erfordert, nicht als Dienst ausgeführt wird und kein Installationsprogramm benötigt, muss der Endbenutzer nichts einrichten oder konfigurieren. Der Benutzer doppelklickt lediglich auf die ausführbare Datei, um den VNC-Miniserver zu starten, und schon können Sie eine Verbindung zu seinem Computer herstellen, um den Endbenutzer nach Bedarf zu unterstützen und anzuleiten.
Während die Standardausführung des UltraVNC-Servers Datei- und Verzeichnisübertragungen unterstützt, werden von UltraVNC SC derzeit nur Dateiübertragungen unterstützt. Zur Sicherheit wird die Kommunikation bis zur Ebene Ihrer Microsoft-Krypto-API (entweder 40 oder 128 Bit) verschlüsselt. Der Miniserver erlaubt außerdem keine eingehenden Verbindungen, wird vom Endbenutzer nur instanziiert und kann nur eine Verbindung zu dem Computer herstellen, den Sie in Ihrer Konfiguration festgelegt haben, bevor Sie ihn an Ihren Endbenutzer gesendet haben.
Um die benutzerdefinierte Anzeige zu erstellen, passen Sie einige Textkonfigurationsdateien und Grafiken nach Bedarf an und führen danach über die Installationsdatei eines anderen Projekt-Add-Ons namens „PCHelpware“ eine Stapelverarbeitungsdatei aus, um die ausführbare Datei zu generieren. Die Dokumentation ist nicht besonders beeindruckend, zeigt Ihnen aber, wie Sie den relativ einfachen Prozess durchführen können. Abschließend ist zu sagen, dass die Anwendung automatisch deinstalliert wird, wenn die Verbindung nach ihrer Verwendung geschlossen wird, sodass dieses Tool keine Spuren hinterlässt und keine Sicherheitslücke verursacht.

Preis: Kostenlos.

Greg Steen ist Technologieexperte, Unternehmer und Enthusiast. Er ist immer auf der Suche nach neuen Tools, um IT-Experten Betriebs-, Qualitätssicherungs- und Entwicklungsprozesse zu erleichtern.


 SQL&#160;– Fragen und Antworten: Vergr&#246;&#223;ern von Datenbanken, Verwenden von IFiltern und Herstellen von Remoteverbindungen
SQL – Fragen und Antworten
Vergrößern von Datenbanken, Verwenden von IFiltern und Herstellen von Remoteverbindungen
Herausgegeben von Matthew Graven

Tipp: Leeren Sie den Cache
Fragen Sie sich manchmal, warum eine gespeicherte Prozedur in der Testumgebung gut läuft, nicht aber nach der Bereitstellung auf dem Produktions-SQL-Server? Dies kann mit der Zwischenspeicherung zusammenhängen. Bevor Sie gespeicherte Prozeduren für Ihre Produktionsumgebung bereitstellen, testen Sie diese in der Testumgebung nach dem Löschen zwischengespeicherter Abfragepläne, um zu wissen, wie Ihre gespeicherte Prozedur in einer „kalten“ Cacheumgebung ausgeführt wird. Folgende nützliche Hinweise sollten Sie sich merken.
Löschen des Prozedurcache auf einem SQL-Server:
DBCC FREEPROCCACHE
Go
Abfrage zum Auflisten aller zwischengespeicherten Pläne:
Select * from sys.dm_exec_cached_plans
Go

F: Ich habe eine Datenbank, auf der tagsüber umfangreicher Datenverkehr stattfindet. Ich möchte nicht die automatische Vergrößerung verwenden, weil diese Timeouts verursachen könnte, falls SQL Server® sie während der Spitzenzeiten durchführt. Ich möchte einen regelmäßig durchgeführten Auftrag implementieren, mit dem die Datenbankdatei um einen bestimmten Prozentsatz des belegten Speicherplatzes erweitert wird. Wie kann ich das erreichen?
A: Eine Dateivergrößerung ist ein intensiver E/A-Vorgang auf dem Datenträger, und wenn SQL Server auf die Erweiterung einer Daten- oder Protokolldatei warten muss, können Sie sicher verstehen, dass dadurch Leistung und Antwortzeiten beeinträchtigt werden. Die Standardschrittweite bei der Vergrößerung beträgt 1 MB für Datendateien und 10 Prozent für Protokolldateien, was für ausgelastete Systeme möglicherweise nicht ausreicht. Außerdem kann die Verwendung der automatischen Vergrößerung zu Datenträgerfragmentierung führen, weil die Daten- oder Protokolldateien auf dem Datenträger nicht zusammenhängend gespeichert werden: Dies bedeutet möglicherweise längere Antwortzeiten als notwendig, da die Daten auf dem Datenträger physisch verstreut sind.
Der Schlüssel zu guter Leistung liegt in der proaktiven Zuweisung von ausreichendem Dateispeicherplatz für Daten- und Protokolldateien im Voraus. Dies erfordert oft eine Trendanalyse und Vergrößerungsprognose und führt zu besserer Leistung, weil die Dateien dann auf dem Datenträger zusammenhängend vorliegen, und es werden die durch automatische Vergrößerung in Spitzenzeiten verursachten E/A-Kosten vermieden. Die automatische Vergrößerung sollte in der Regel aktiviert bleiben, da sonst eine zu 100 % volle Daten- oder Protokolldatei den Zugriff auf die Datenbank gänzlich verhindern würde. Bedenken Sie aber, dass die automatische Vergrößerung als Sicherheitsmaßnahme betrachtet werden sollte und nicht als eine Funktion zur Verwaltung von Datenbanken.
Das Einrichten regelmäßiger Erweiterungen von Datenbankdateien ist zu vermeiden, da dies auch zu nicht zusammenhängenden Dateien auf dem Datenträger führen und somit wiederum die Leistung beeinträchtigen kann. Proaktive Überwachung kann erreicht werden, indem man regelmäßig ein Skript ausführt, das für jede Datenbank den Prozentsatz an freiem Speicherplatz bestimmt (ausgeführt durch einen Auftrag an den SQL-Agent), und dann Maßnahmen ergreift (wie z. B. das Senden einer E-Mail-Warnung über Datenbank-E-Mail). Der Code in der Abbildung bietet ein Beispielskript, aus dem hervorgeht, wie sich der Prozentsatz an freiem Speicherplatz für die aktuelle Datenbank erfassen lässt.
Nach Generierung einer Warnung können Sie mit dem ALTER DATABASE-Befehl ein Skript für einmalige Dateivergrößerung erstellen, und Sie können mithilfe eines Auftrags an den SQL-Agent diese Aktion so planen, dass sie außerhalb der Spitzenzeiten stattfindet. Versuchen Sie, die Datei so weit zu vergrößern, dass sie auf absehbare Zeit ausreichen wird, um künftige kleine inkrementelle Dateierweiterungen zu vermeiden. Es empfiehlt sich auch sicherzustellen, dass auf keiner Datenbank die automatische Verkleinerung aktiviert ist, denn dies könnte dazu führen, dass die Datenbank unnötigerweise immer wieder verkleinert und vergrößert wird.
– Justin Langford
Bestimmung des freien Speicherplatzes in einer Datenbank
-- 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)

F: Mein Unternehmen speichert Dateien verschiedener Formate in unserer Datenbank und verwendet dabei varbinary- und image-Spalten. Ich habe gehört, dass es in SQL Server integrierte Funktionen gibt, mit denen ich diese verschiedenen Dateiformate durchsuchen kann. Wie kann ich SQL Server dafür konfigurieren?
A: Diese Funktionalität ist in den Volltextindizierungsdienst integriert. Der Dienst bietet die Flexibilität, IFilter-Schnittstellen zu verwenden, sodass sich Filter entwickeln und laden lassen, die nützliche Informationen aus proprietären Daten extrahieren können. Diese IFilter werden auch für andere Produkte wie z. B. Microsoft® Office SharePoint® Server verwendet, um Informationen zu gecrawlten Dateien zu sammeln.
Ein IFilter wird entweder vom Ersteller des Dateiformats oder von Drittanbietern bereitgestellt. SQL Server enthält bereits einige IFilter, die bei Installation des FulltextService (FTS) geladen werden. Diese enthalten Filter für HTML- und DOC-Dateien. Es können jedoch bei Bedarf weitere IFilter hinzugefügt werden. So sind zum Beispiel Filter für Adobe PDF auf der Adobe-Website zu finden, und ein neues Filterpaket für Erweiterungen von 2007 Office System wurde Ende 2007 veröffentlicht. Beachten Sie, dass Sie die erforderliche Version des IFilters kennen müssen. Beispielsweise funktioniert ein für 32-Bit-Systeme vorgesehener IFilter nicht mit 64-Bit-Installationen von SQL Server.
Nach dem Ausführen des Installationspakets auf dem Client wird der IFilter in der Regel im Ökosystem des Betriebssystems registriert. Mit den im Betriebssystem registrierten Bits müssen Sie einige Schritte durchführen, damit FTS die Filter laden kann. Geben Sie nach dem Starten Ihres Abfragetools die folgenden Befehle ein:
  • sp_fulltext_service 'load_os_resources',1. (Mit dieser Anweisung kann FTS die registrierten Bits zur Verarbeitung laden, einschließlich Komponenten wie Worteinheiten- und Wortstammerkennung.)
  • sp_fulltext_service 'verify_signature',0. (Hiermit wird SQL Server umgangen, um zu prüfen, ob die verwendeten Filter signiert sind, da viele Anbieter ihre Filter nicht gemäß dem Standard signieren.)
  • Starten Sie die SQL Server-Instanz und die Instanz von FTS neu.
  • Erstellen Sie Ihren Volltextindex für die Spalten, wobei die Binärspalte den zu crawlenden Inhalt für den IFilter enthält und die Erweiterungsspalte (d. h. die Spalte mit dem Erweiterungstyp wie z. B. DOCX) dem SQL Server dazu dient, den Filter auszuwählen, zu dem der Inhalt umgeleitet werden soll.
Weitere Informationen hierzu finden Sie unter go.microsoft.com/?linkid=7912971.
– Jens Süßmeyer

F: Ich schaffe es nicht, eine Remoteverbindung zu einem SQL-Server herzustellen. Muss ich die Firewall auf meinem Client- oder Servercomputer konfigurieren?
A: Remoteverbindungen zu SQL Server 2005 können aus vielen Gründen fehlschlagen, aber die Firewallkonfiguration ist eines der häufigsten Probleme. Der Blog zu SQL-Protokollen (blogs.msdn.com/sql_protocols) ist eine großartige Quelle für Informationen zur Herstellung einer SQL-Verbindung.
Die Standardinstallation von SQL Server 2005 lässt keine Remoteverbindungen zu. Wählen Sie auf dem Computer, der SQL ausführt, im Startmenü „Microsoft SQL Server 2005“ | „Konfigurationsprogramme“ | „SQL Server-Oberflächenkonfiguration“ aus. Gehen Sie von hier aus zu „Oberflächenkonfiguration für Dienste und Verbindungen“, wählen Sie „Remoteverbindungen“ und anschließend das Optionsfeld „TCP/IP und Named Pipes verwenden“ aus. Sie müssen SQL anschließend neu starten, damit die Änderungen wirksam werden.
Standardmäßig verwendet SQL Server Port 1433. Prüfen Sie mit dem folgenden Telnetbefehl, ob der Port offen ist. Ersetzen Sie dabei <ipaddress> durch die tatsächliche IP-Adresse des Computers, der SQL Server ausführt:
telnet <ipaddress> 1433
Wenn Sie die Antwort „Fehler beim Verbinden“ erhalten, öffnen Sie die Windows®-Firewall, gehen Sie zur Registerkarte „Ausnahmen“, wählen Sie „Anschluss hinzufügen“ aus, und fügen Sie TCP-Port 1433 hinzu. Telnet müsste jetzt funktionieren. (Beachten, dass Telnet unter Windows Vista® nicht standardmäßig installiert ist.)
– Rick Anderson
Unser Dank gilt den folgenden SQL Server-Experten für ihren Beitrag zu diesem Artikel:
Justin Langford arbeitet für Coeo Ltd., einen Systemintegrator und Microsoft Certified Partner mit Sitz in England. Jens Süßmeyer ist Datenbankberater bei Microsoft in Deutschland. Rick Anderson arbeitet in der Entwicklerschulung bei Microsoft. Saleem Hakani ist Senior Database Engineer und Leiter der SQL Server-Community bei Microsoft.


 Schwerpunkt Dienstprogramme: Web Capacity Analysis Tool
Schwerpunkt Dienstprogramme
Web Capacity Analysis Tool
Greg Steen

Weblogs und Verlaufsanalysen des Datenverkehrs können Ihnen Einblick darin gewähren, welche Art von Datenverkehr Sie im Laufe der Zeit erwarten können, aber wie können Sie herausfinden, was Ihre Infrastruktur wirklich bewältigen kann? Um dies herauszufinden, benötigen Sie ein Tool, das Ihre Infrastruktur und den zugehörigen Anwendungsstapel bis zum Äußersten belasten kann. Ein derartiges Tool ist das kostenlose Web Capacity Analysis Tool (WCAT), ein einfaches Dienstprogramm zur Lastgenerierung, das an einem Webserver (oder einer Serverfarm mit Lastenausgleich) HTTP-Anforderungsskripts ausführt und dabei Leistungsstatistiken für eine spätere Analyse erstellt. Die aktuelle Version (6.3.1 beim Verfassen dieses Artikels) ist sowohl für x86- als auch für x64-Windows-Systeme verfügbar (x86: iis.net/downloads/1466/ItemPermaLink.ashx; x64: iis.net/downloads/1467/ItemPermaLink.ashx) und bietet Unterstützung für IPv6-Netzwerke. Da WCAT außerdem eine Multithreadanwendung ist und mehrere von einer einzigen Quelle aus gesteuerte Auslastungstestclients unterstützt, können Sie damit Tausende gleichzeitiger Benutzer simulieren.
Dieses Dienstprogramm ermöglicht Ihnen, Ihre alten Computer zu Testclients umzufunktionieren, und jeder dieser Testclients kann mehrere virtuelle Clients erzeugen (die maximale Zahl hängt von den Netzwerkadaptern und sonstiger Hardware des Clientcomputers ab). Sie können entweder HTTP 1.0- oder HTTP 1.1-Anforderungen mit oder ohne SSL wählen. Falls Ihr Testszenario dies erfordert, können Sie auch Standard- oder NTLM-Skriptauthentifizierung verwenden, um Zugang zu den eingeschränkten Bereichen Ihrer Website zu erhalten. (Wenn Ihre Website eine auf Cookies, Formularen oder Sitzungen basierende Authentifizierung verwendet, können Sie die richtige GET- oder POST-Anforderung erstellen, um Ihren Testbenutzer zu authentifizieren.) Da WCAT auch alle Cookies verwaltet, die Ihre Website möglicherweise verwendet, werden Profil- und Sitzungsinformationen beibehalten.
WCAT kann Ihnen helfen, die Belastungsgrenzen Ihrer Website-Infrastruktur zu testen.
WCAT kann Ihnen helfen, die Belastungsgrenzen Ihrer Website-Infrastruktur zu testen.
WCAT wird von einem hervorragenden Benutzerhandbuch begleitet, das mir geholfen hat, schnell eine Microsoft® .NET Framework-Konsolenanwendung zu erstellen, die basierend auf Benutzerverkehrsdaten aus dem Verlauf des überwachten Websitedatenverkehrs ein Testclientskript generierte und mir dadurch ermöglichte, vor der Bereitstellung einen realen Datenverkehr mit einer neuen Codebasis zu simulieren. Wenn sich unter Ihren Mitarbeitern ein C-Programmierer befindet, können Sie benutzerdefinierte Funktionen und Antworthandler erstellen, die von Ihren Szenariodateien aufgerufen werden können, um die Funktionalität an Ihre Umgebung anzupassen.
Um WCAT verwenden zu können, müssen Sie zwei Dateien konfigurieren: eine Steuerdatei, in der die allgemeinen Testeinstellungen (z. B. die Anzahl der Clients, die Anzahl der virtuellen Clients pro Client, die nachzuverfolgenden Leistungsindikatoren und der Webserver, bei dem Sie den Test durchführen) enthalten sind, sowie eine Szenariodatei, die das Testszenario, die Standardanforderungsparameter und alle Verweise auf benutzerdefinierte Funktionen und Bibliotheken enthält.
Die Anwendung protokolliert die Testergebnisse in einer XML-Datei, auf die Sie das beiliegende XSL-Stylesheet anwenden können, um beim Anzeigen in Internet Explorer® eine organisierte tabellarische Aufstellung der Ergebnisse zu erhalten. Der Bericht enthält zusammengefasste Informationen wie z. B. die Anzahl der ausgeführten Transaktionen, die vorgenommenen Kontextwechsel, die prozentuale CPU-Auslastung (für alle CPUs) sowie die Gesamtanzahl der aufgetretenen Fehler. Sie erhalten auch eine Abschnittsliste mit den Ergebnissen der Leistungsindikatoren, die Sie in der Einstellungsdatei konfiguriert haben (ein Beispiel finden Sie im Bildschirmfoto), eine Antwortzeitanalyse, einen transaktionsspezifischen Statistikbericht, einen nach Clients aufgeschlüsselten Abschnitt sowie Informationen zur Konfiguration Ihres Testsetups. Darüber hinaus werden die Hardwarekonfiguration des getesteten Remotewebservers sowie eine Liste aller installierten Updates angezeigt. Dies ist eine hervorragende Methode, um zu ermitteln und nachzuverfolgen, ob ein Patch Auswirkungen auf die Leistungsfähigkeit Ihrer Website haben wird.
Wenn Sie eine Website-Infrastruktur verwalten, kann Ihnen das Dienstprogramm WCAT also vor der nächsten großen Codeversion helfen, einen Einblick darin zu gewinnen, was Ihre Plattform bei hoher Belastung leisten wird.

Greg Steen ist Technologieexperte, Unternehmer und Enthusiast. Er ist immer auf der Suche nach neuen Tools, um IT-Experten Betriebs-, Qualitätssicherungs- und Entwicklungsprozesse zu erleichtern.


 The Cable Guy: Problembehandlung bei der NAP-Erzwingung
The Cable Guy
Problembehandlung bei der NAP-Erzwingung
Joseph Davies

Die neue NAP-Plattform (Network Access Protection, Netzwerkzugriffsschutz), die in Windows Vista, Windows Server 2008 und Windows XP SP3 integriert ist, hilft Ihnen, Ihr privates Intranet zu schützen, indem sie die Einhaltung von Computerintegritätsanforderungen erzwingt. Hauptkomponenten von NAP sind NAP-Clients, NAP-Erzwingungspunkte und NAP-Integritätsrichtlinienserver.
Ein NAP-Client ist ein Computer, der Integritätsstatusinformationen für die Systemintegritätsevaluierung bereitstellen kann. Ein NAP-Erzwingungspunkt ist ein Computer oder ein Netzwerkzugriffsgerät, der bzw. das NAP verwendet oder mit NAP verwendet werden kann, um die Evaluierung des Integritätsstatus eines NAP-Client zu erzwingen und eingeschränkten Netzwerkzugriff bzw. Kommunikation bereitzustellen. Ein NAP-Integritätsrichtlinienserver ist ein Computer, auf dem Windows Server® 2008 und der NPS-Dienst (Network Policy Server, Netzwerkrichtlinienserver), der Richtlinien für Integritätsanforderungen speichert und Integritätsevaluierungen von NAP-Clients durchführt, ausgeführt werden. Der NAP-Integritätsrichtlinienserver und die NAP-Erzwingungspunkte tauschen Systemintegritätsinformationen und Anweisungen für eingeschränkten Zugriff mit dem RADIUS-Server (Remote Authentication Dial-In User Service) sowie Proxynachrichten aus.
In diesem Artikel beschreibe ich die Komponenten einer Richtlinie für Integritätsanforderungen, die Verarbeitung eingehender Anforderungen durch den NPS-Dienst für die NAP-Evaluierung sowie die Behandlung der häufigsten Probleme bei der NAP-Erzwingung.

Richtlinien für Integritätsanforderungen
Funktionsweise der NAP-Integritätsevaluierung
Der NPS-Dienst auf dem NAP-Integritätsrichtlinienserver verwendet den folgenden Prozess, um eine Integritätsevaluierung durchzuführen:
  1. Der NPS-Dienst vergleicht die eingehende Anforderungsnachricht mit seinem konfigurierten Satz von Verbindungsanforderungsrichtlinien. Bei NAP muss die Anforderungsnachricht einer Verbindungsanforderungsrichtlinie entsprechen, die festlegt, dass der NPS-Dienst die Authentifizierung und die Autorisierung lokal durchführt.
    2. Die Verbindungsanforderungsrichtlinie kann auch Verbindungsanforderungen vorschreiben. So erfordert beispielsweise die Verbindungsanforderungsrichtlinie zur 802.1X- und VPN-Erzwingung, dass ein auf PEAP (Protected Extensible Authentication Protocol) basierendes Authentifizierungsverfahren verwendet wird. Wenn der verbindende Client nicht PEAP verwendet, wird die Verbindungsanforderung zurückgewiesen.
  2. Der NPS-Dienst evaluiert die Integritätsinformationen in der Anforderungsnachricht, die aus einem SSoH (System Statement of Health) bestehen, in dem Integritätsstatusinformationen enthalten sind. Der NPS-Dienst übergibt die Integritätsstatusinformationen seinen installierten SHVs, die Integritätsevaluierungsinformationen an den NPS-Dienst zurückgeben.
  3. Der NPS-Dienst vergleicht die Anforderungsnachricht und die Integritätsevaluierungsinformationen von den SHVs mit dem entsprechenden Satz von Netzwerkrichtlinien. Die Integritätsevaluierungsinformationen werden mit der Integritätsrichtlinienbedingung NAP-basierter Netzwerkrichtlinien verglichen. Die Integritätsrichtlinienbedingung legt die Bedingungen für die Integritätskonformität oder -nichtkonformität fest. Der NPS-Dienst wendet die erste entsprechende Netzwerkrichtlinie auf die Anforderungsnachricht an.
  4. Auf Grundlage der entsprechenden NAP-basierten Netzwerkrichtlinie und der mit ihr verknüpften NAP-Einstellungen erstellt der NPS-Dienst eine SSoHR (System Statement of Health Response). Diese Antwort enthält die Integritätsevaluierungsinformationen von den SHVs und gibt an, ob der NAP-Client uneingeschränkten oder eingeschränkten Zugriff hat und ob der NAP-Client automatisch versuchen soll, seinen Integritätsstatus zu korrigieren.
  5. Der NPS-Dienst sendet eine RADIUS-Antwortnachricht mit der SSoHR zum NAP-Erzwingungspunkt. Wenn dem Client eingeschränkter Zugriff gewährt wurde, kann die Antwortnachricht auch Anweisungen enthalten, die festlegen, auf welche Weise der Zugriff des NAP-Clients eingeschränkt wird.
  6. Der NAP-Erzwingungspunkt sendet die SSoHR zum NAP-Client.

Eine Richtlinie für Integritätsanforderungen ist eine Kombination aus einer Verbindungsanforderungsrichtlinie, einer oder mehreren Netzwerkrichtlinien, einer oder mehreren Integritätsrichtlinien sowie NAP-Einstellungen für eine NAP-Erzwingungsmethode. Um eine Richtlinie für Integritätsanforderungen zu erstellen, verwenden Sie den NAP-Konfigurationsassistenten im Snap-In „Netzwerkrichtlinienserver“. (Weitere Informationen zum Evaluierungsprozess finden Sie in der Randleiste „Funktionsweise der NAP-Integritätsevaluierung“.)
Verbindungsanforderungsrichtlinien Dies sind sortierte Sätze von Regeln, die es dem NPS-Dienst ermöglichen zu bestimmen, ob eine eingehende Verbindungsanforderung lokal verarbeitet oder an einen anderen RADIUS-Server weitergeleitet werden soll. Ein NAP-Integritätsrichtlinienserver verarbeitet Verbindungsanforderungen lokal.
Eingehende RADIUS-Anforderungen von Windows®-basierten NAP-Erzwingungspunkten können ein Quelltag enthalten, das den Typ des NAP-Erzwingungspunkts wie z. B. einen DHCP-Server (Dynamic Host Configuration Protocol) oder einen VPN-Server (virtuelles privates Netzwerk) angibt.
Wenn die eingehende Anforderungsnachricht ein Quelltag enthält, versucht der NPS-Dienst auf dem NAP-Integritätsrichtlinienserver, die Anforderung nur den Verbindungsanforderungsrichtlinien mit einer passenden Quelle zuzuordnen. Alle anderen Verbindungsanforderungsrichtlinien werden ignoriert. Wenn die eingehende Anforderungsnachricht kein Quelltag enthält, versucht der NPS-Dienst, die Anforderung den Verbindungsanforderungsrichtlinien mit einer nicht angegebenen Quelle zuzuordnen. Alle anderen Verbindungsanforderungsrichtlinien, die Quellen angeben, werden ignoriert.
So geben beispielsweise eingehende Anforderungen von einem NAP-fähigen DHCP-Server ein DHCP-Quelltag an. Der NPS-Dienst versucht, die Anforderungen vom DHCP-Server Verbindungsanforderungsrichtlinien mit der DHCP-Quelle zuzuordnen. Eingehende Anforderungen von 802.1X-fähigen Switches und Drahtloszugriffspunkten geben kein Quelltag an. Der NPS-Dienst versucht, diese Anforderungen Verbindungsanforderungsrichtlinien ohne eine angegebene Quelle zuzuordnen.
Die Verbindungsanforderungsrichtlinie, die für eine lokale Evaluierungsverarbeitung oder eine Remoteverarbeitungsevaluierung verwendet wird, ist die erste übereinstimmende Verbindungsanforderungsrichtlinie in der sortierten Liste für die Teilmenge der Richtlinien, die auf die eingehende Anforderung zutreffen. Wenn die Anforderung keinen Verbindungsanforderungsrichtlinien entspricht, wird die Anforderung zurückgewiesen.
Netzwerkrichtlinien Dies sind sortierte Sätze von Regeln, die die Umstände angeben, unter denen Verbindungsversuche, die den eingehenden Anforderungsnachrichten entsprechen, entweder autorisiert oder zurückgewiesen werden. Für jede Regel gibt es eine Zugriffsberechtigung, die den Zugriff entweder gewährt oder verweigert, einen Satz von Bedingungen, einen Satz von Einschränkungen sowie Netzwerkrichtlinieneinstellungen. Wenn eine Verbindung autorisiert wird, können die Netzwerkrichtlinieneinschränkungen und -einstellungen einen Satz von Verbindungseinschränkungen festlegen. Bei NAP können Netzwerkrichtlinien eine Integritätsrichtlinienbedingung angeben, damit nach Integritätsanforderungen und Erzwingungsverhaltenseinstellungen gesucht wird.
Genau wie Verbindungsanforderungsrichtlinien verwenden Netzwerkrichtlinien ein Quelltag, um zu bestimmen, welche Netzwerkrichtlinien der eingehenden Anforderung zugeordnet werden sollen. Wenn die eingehende Anforderungsnachricht ein Quelltag enthält, versucht der NPS-Dienst, die Anforderung nur den Netzwerkrichtlinien mit einer passenden Quelle zuzuordnen. Alle anderen Netzwerkrichtlinien werden ignoriert. Wenn die eingehende Anforderungsnachricht kein Quelltag enthält, versucht der NPS-Dienst, die Anforderung den Netzwerkrichtlinien mit einer nicht angegebenen Quelle zuzuordnen. Alle anderen Netzwerkrichtlinien, die Quellen angeben, werden ignoriert.
Die Netzwerkrichtlinie, die für die Autorisierung oder Integritätsevaluierung verwendet wird, ist die erste übereinstimmende Netzwerkrichtlinie in der sortierten Liste der Teilmenge für Richtlinien, die auf den Verbindungsversuch zutreffen. Wenn der Versuch keinen Netzwerkrichtlinien entspricht, wird die Anforderung zurückgewiesen.
Integritätsrichtlinien Diese Richtlinien ermöglichen Ihnen, Integritätsanforderungen in Form der installierten SHVs (System Health Validators, Systemintegritätsprüfungen) anzugeben, die bei der Integritätsevaluierung verwendet werden, und festzulegen, ob NAP-Clients nur einige oder sämtliche der ausgewählten SHVs bestehen oder nicht bestehen müssen. So kann beispielsweise eine Integritätsrichtlinie für richtlinienkonforme NAP-Clients festlegen, dass der Client alle Integritätsüberprüfungen bestehen muss. Eine Integritätsrichtlinie für nicht richtlinienkonforme NAP-Clients kann festlegen, dass der Client mindestens eine Integritätsüberprüfung oder sämtliche Integritätsüberprüfungen nicht bestehen darf.
NAP-Einstellungen Diese Einstellungen bestehen aus der Konfiguration der auf dem NAP-Integritätsrichtlinienserver für Integritätsanforderungen und Fehlerbedingungen installierten SHVs sowie aus Wartungsservergruppen, die festlegen, auf welche Gruppen von Servern nicht richtlinienkonforme NAP-Clients mit eingeschränktem Netzwerkzugriff über die DHCP- und VPN-Erzwingungsverfahren zugreifen können.

Einordnen von NAP-Erzwingungsproblemen
Es wird empfohlen, bei einer Problembehandlung systematisch vorzugehen. Hierzu sollten die folgenden Fragen beantwortet werden: Welche Komponenten sind funktionsfähig? Welche Komponenten sind nicht funktionsfähig? Welcher Zusammenhang besteht zwischen den funktionsfähigen und den nicht funktionsfähigen Komponenten? Haben die nicht funktionsfähigen Komponenten in der Vergangenheit funktioniert? Wenn ja, was hat sich verändert, seit sie zum letzten Mal funktioniert haben?
Diese Fragen rücken deutlich stärker in den Vordergrund, wenn Sie sich mit NAP-Erzwingungsproblemen befassen. Hat die Verbindung oder die Konnektivität funktioniert, bevor die NAP-Erzwingungsmethode implementiert wurde? Hat beispielsweise die IPsec (Internet Protocol security, Internetprotokollsicherheit)-Serverisolierung oder -Domänenisolierung funktioniert, bevor IPsec-Erzwingung implementiert wurde? Hat die 802.1X-Authentifizierung funktioniert, bevor 802.1X-Erzwingung implementiert wurde? Hat der VPN-Remotezugriff funktioniert, bevor VPN-Erzwingung implementiert wurde? Hat DHCP funktioniert, bevor DHCP-Erzwingung implementiert wurde?
Hat eine bestimmte NAP-Erzwingungsmethode vorher funktioniert? Wenn ja, was hat sich am NAP-Client, am NAP-Erzwingungspunkt oder am NAP-Integritätsrichtlinienserver geändert? Die Antworten auf diese Fragen können einen Hinweis darauf geben, an welcher Stelle mit der Problembehandlung begonnen werden sollte. Auf diese Weise können Sie unter Umständen die Komponente, die Schicht oder die Konfiguration isolieren, durch die das Problem verursacht wird.
Zur allgemeinen Problembehandlung von NAP-Erzwingungsproblemen müssen Sie den Umfang des Problems ermitteln. Der erste Schritt besteht darin herauszufinden, ob das Problem tatsächlich von der NAP-Erzwingung verursacht wird. Ermitteln Sie bei der IPsec-Erzwingung, ob der NAP-Client den richtigen Satz an IPsec-Richtlinien für die IPsec-Peeraushandlung und den Schutz der Daten besitzt. Finden Sie bei der DHCP-Erzwingung heraus, ob der NAP-Client DHCP-Nachrichten mit einem DHCP-Server austauschen kann. Bestimmen Sie bei der 802.1X-Erzwingung und der VPN-Erzwingung, ob der NAP-Client erfolgreich authentifizieren kann. Wenn beispielsweise Ihre VPN-Clients für die VPN-Verbindung keine Authentifizierung durchführen können, überprüfen Sie die Authentifizierungseinstellungen und die Anmeldeinformationen der VPN-Clients.
Wenn Sie die NAP-Erzwingung als Ursache des Problems identifiziert haben, ermitteln Sie im nächsten Schritt den Umfang des Problems. Sind alle NAP-Clients und alle NAP-Erzwingungsmethoden betroffen? Sind alle NAP-Clients und eine bestimmte Erzwingungsmethode betroffen? Sind alle NAP-Clients und eine bestimmte Erzwingungsmethode sowie ein bestimmter NAP-Erzwingungspunkt betroffen? Sind alle NAP-Clients betroffen, die Mitglieder einer bestimmten Gruppe sind? Ist nur ein bestimmter NAP-Client von dem Problem betroffen?
Wenn beispielsweise bei allen Ihren NAP-Clients Probleme mit allen Arten von NAP-Erzwingungsmethoden auftreten, liegen unter Umständen Konfigurationsprobleme auf Ihren NAP-Integritätsrichtlinienservern vor. Wenn bei allen Ihren NAP-Clients Probleme mit einer bestimmten NAP-Erzwingungsmethode auftreten, liegen möglicherweise Konfigurationsprobleme bei den Gruppenrichtlinieneinstellungen für NAP-Clients oder bei den Richtlinien für Integritätsanforderungen für die betreffende NAP-Erzwingungsmethode auf Ihrem NAP-Integritätsrichtlinienserver vor. Wenn nur bei bestimmten NAP-Clients NAP-Erzwingungsprobleme auftreten, liegen bei diesen NAP-Clients evtl. Konfigurationsprobleme für die NAP-Erzwingung vor.

Häufige NAP-Erzwingungsprobleme
NAP-Ressourcen
  • Einführung in den Netzwerkzugriffsschutz
  • Architektur der NAP-Plattform
  • NAP-Richtlinien in Windows Server 2008
  • NPS-Netzwerkzugriffsschutz

Uneingeschränkter Zugriff Wenn ein NAP-Client uneingeschränkten Zugriff hat, kann dies daran liegen, dass der NAP-Client vom NAP-Integritätsrichtlinienserver als konform evaluiert wurde. Dies ist genau, was Sie wollen. Der uneingeschränkte Zugriff kann aber auch gewährt worden sein, weil der NAP-Client keine SSoHR erhalten hat, was in der Regel dann geschieht, wenn für den NAP-Client keine Integritätsevaluierung durchgeführt wird. Wenn keine NAP-Integritätsevaluierung erfolgt, wird keine SSoHR zum NAP-Client zurückgeschickt, und der NAP-Client erhält uneingeschränkten Zugriff.
Zum Beispiel sendet ein für DHCP-Erzwingung konfigurierter NAP-Client seine SSoHR an seinen DHCP-Server zurück. Wenn der DHCP-Server, auf dem Windows Server 2008 ausgeführt wird, nicht für NAP konfiguriert ist, sendet er keine Integritätsevaluierungs-Anforderungsnachrichten an einen NAP-Integritätsrichtlinienserver. Außerdem weist ein für NAP konfigurierter DHCP-Server, auf dem Windows Server 2008 ausgeführt wird und der keinen NAP-Integritätsrichtlinienserver erreichen kann, standardmäßig eine Adresskonfiguration für uneingeschränkten Zugriff zu.
Uneingeschränkter Zugriff kann auch dann gewährt werden, wenn der NAP-Integritätsrichtlinienserver keine Integritätsevaluierung durchführt, weil die eingehende Anforderung einer Netzwerkrichtlinie entsprach, die keine NAP-Integritätsevaluierung erfordert. Informationen zur Bestimmung der Netzwerkrichtlinie, die der Anforderung eines NAP-Clients entsprach, finden Sie in dem Abschnitt „Schrittweise Problembehandlung bei der NAP-Erzwingung“ in diesem Artikel.
Eingeschränkter Zugriff Ein NAP-Client, der eingeschränkten Zugriff hat, wurde vom NAP-Integritätsrichtlinienserver als nicht richtlinienkonform evaluiert. Wenn der NAP-Client eingeschränkten Zugriff hat, stattdessen aber uneingeschränkten Zugriff haben müsste, überprüfen Sie den Integritätsstatus des NAP-Clients anhand der Integritätsrichtlinieneinstellungen, die der Netzwerkrichtlinie entsprechen, die mit der Anforderung des NAP-Clients übereinstimmte.
Keine automatische Wartung Wenn NAP-Clients richtig konfiguriert sind, können sie eine automatische Wartung ihres Integritätsstatus durchführen. Wenn NAP-Clients keine automatische Wartung durchführen können, vergewissern Sie sich, dass in den NAP-Erzwingungseinstellungen der Netzwerkrichtlinie, die der Anforderung des NAP-Clients entsprach, das Kontrollkästchen „Automatische Wartung von Clientcomputern aktivieren“ aktiviert ist.
Ein anderes Problem, das sich auf die automatische Korrektur auswirken kann, liegt dann vor, wenn der eingeschränkte NAP-Client die Wartungsserver nicht erreichen kann, um Updates herunterzuladen. Vergewissern Sie sich bei der IPsec-Erzwingung, dass auf die Wartungsserver die richtige IPsec-Richtlinie angewendet wurde. Überprüfen Sie bei der 802.1X-Erzwingung die Einstellungen in der entsprechenden Netzwerkrichtlinie, von denen die ACL (Access Control List, Zugriffssteuerungsliste) oder die VLAN-ID (Virtual Local Area Network Identifier) zugewiesen wird, und prüfen Sie die Konfiguration der ACL oder des VLAN für Ihre Switches oder Drahtloszugriffspunkte. Überprüfen Sie bei der VPN- oder der DHCP-Erzwingung die Einstellungen für die Wartungsservergruppe in der entsprechenden Netzwerkrichtlinie, und stellen Sie sicher, dass alle Wartungsserver als Mitglieder der Gruppe konfiguriert sind. Stellen Sie bei der DHCP-Erzwingung sicher, dass die DHCP-Bereichsoptionen für NAP-Clients (z. B. der Wert der Option für das Standardgateway für die NAP-Benutzerklasse) richtig konfiguriert sind.
Evaluierung der Nicht-NAP-Fähigkeit Vergewissern Sie sich bei jeder NAP-Erzwingungsmethode, dass der entsprechende Erzwingungsclient auf dem NAP-Client aktiviert ist. Vergewissern Sie sich bei der 802.1X-Erzwingung und der VPN-Erzwingung, dass auf dem NAP-Client sowohl in der Verbindungsanforderungsrichtlinie als auch auf dem NAP-Client selbst (im Dialogfeld „Eigenschaften für geschütztes EAP“ muss das Kontrollkästchen „Quarantäneüberprüfungen aktivieren“ aktiviert sein) die Systemintegritätsprüfung für die PEAP-Authentifizierungsmethode aktiviert ist.
Der NAP-Client ist nicht eingeschränkt, kann aber das Intranet nicht erreichen. Vergewissern Sie sich bei der IPsec-Erzwingung, dass die IPsec-Richtlinie für richtlinienkonforme NAP-Clients und die IPsec-Richtlinie der Intranetcomputer einen gemeinsamen Satz von Aushandlungs- und Schutzeinstellungen besitzen. Stellen Sie bei der 802.1X-Erzwingung sicher, dass die Netzwerkrichtlinie für richtlinienkonforme NAP-Clients die ACLs oder die VLAN-IDs nicht für das eingeschränkte Netzwerk, sondern für das Intranet angibt. Überprüfen Sie auf Ihren Switches oder Drahtloszugriffspunkten die Konfiguration der ACL oder der VLAN-ID für das Intranet. Stellen Sie bei der VPN-Erzwingung sicher, dass in der Netzwerkrichtlinie für richtlinienkonforme NAP-Clients keine IP-Paketfilter konfiguriert sind, die den Datenverkehr von VPN-Clients einschränken.

Schrittweise Problembehandlung bei der NAP-Erzwingung
Eine Möglichkeit, die Problembehandlung für ein Problem mit der NAP-Erzwingung für einen bestimmten NAP-Client vollständig durchzuführen, besteht darin, mit der Konfiguration des NAP-Clients zu beginnen, das NAP-Clientereignisprotokoll zu überprüfen und danach zum NAP-Integritätsrichtlinienserver überzugehen, um herauszufinden, wie der NPS-Dienst die Anforderung des NAP-Clients verarbeitet hat.
Schritt 1: Überprüfen der NAP-Clientkonfiguration Die NAP-Clientkonfiguration besteht aus Windows-Diensten, Erzwingungsclients sowie für die NAP-Erzwingung spezifischen Einstellungen. Verwenden Sie zum Anzeigen von Status- und Konfigurationsinformationen für den NAP-Client die Befehle „netsh nap client show state“ und „netsh nap client show configuration“.
Beachten Sie, dass dann, wenn NAP-Clienteinstellungen durch Gruppenrichtlinien bereitgestellt werden, alle Ihre NAP-Clienteinstellungen durch Gruppenrichtlinien festgelegt und alle Ihre lokalen NAP-Clienteinstellungen ignoriert werden. Verwenden Sie in diesem Fall den Befehl „netsh nap client show grouppolicy“, um die auf Gruppenrichtlinien basierende NAP-Clientkonfiguration anzuzeigen, und nehmen Sie Änderungen über Gruppenrichtlinien vor.
Verwenden Sie bei der IPsec-Erzwingung auf einem Computer, auf dem Windows Vista® ausgeführt wird, den Befehl „net start“, um sich zu vergewissern, dass die Dienste „NAP-Agent (Network Access Protection)“, „IKE- und AuthIP IPsec-Schlüsselerstellungsmodule“ sowie „IPsec-Richtlinien-Agent“ gestartet wurden. Verwenden Sie den Befehl „netsh nap client show configuration“, um sich zu vergewissern, dass der Erzwingungsclient für die abhängige Seite von IPsec aktiviert ist. Verwenden Sie bei Bedarf das Snap-In „NAP-Clientkonfiguration“, um den Erzwingungsclient „Abhängige Seite von IPsec“ zu aktivieren, oder verwenden Sie den Befehl „netsh nap client set enforcement 79619 enabled“. „netsh nap client set enforcement“-Befehle müssen über eine Befehlszeile mit erweiterten Berechtigungen ausgeführt werden.
Verwenden Sie bei der 802.1X-Erzwingung auf einem Computer, auf dem Windows Vista ausgeführt wird, den Befehl „net start“, um sich zu vergewissern, dass die Dienste „Extensible Authentication-Protokoll“, „NAP-Agent (Network Access Protection)“, „Automatische Konfiguration (verkabelt)“ (bei der 802.1X-Erzwingung für Kabelverbindungen) und „Automatische WLAN-Konfiguration“ (bei der 802.1X-Erzwingung für Drahtlosverbindungen) gestartet wurden.
Verwenden Sie erneut den Befehl „netsh nap client show configuration“, um sich zu vergewissern, dass der EAP-Quarantäneerzwingungsclient aktiviert ist. Verwenden Sie bei Bedarf das Snap-In „NAP-Clientkonfiguration“, um den EAP-Quarantäneerzwingungsclient zu aktivieren, oder verwenden Sie den Befehl „netsh nap client set enforcement 79623 enabled“. Vergewissern Sie sich, dass für die Kabel- oder Drahtlosverbindung in den Eigenschaften der PEAP-Authentifizierungsmethode das Kontrollkästchen „Quarantäneüberprüfungen aktivieren“ aktiviert ist.
Verwenden Sie bei der VPN-Erzwingung auf einem Computer, auf dem Windows Vista ausgeführt wird, den Befehl „net start“, um sich zu vergewissern, dass die Dienste „Extensible Authentication-Protokoll“, „NAP-Agent (Network Access Protection)“ und „RAS-Verbindungsverwaltung“ gestartet wurden.
Verwenden Sie den Befehl „netsh nap client show configuration“, um sich zu vergewissern, dass der Remotezugriffs-Quarantäneerzwingungsclient aktiviert ist. Verwenden Sie bei Bedarf das Snap-In „NAP-Clientkonfiguration“, um den Remotezugriffs-Quarantäneerzwingungsclient zu aktivieren, oder verwenden Sie den Befehl „netsh nap client set enforcement 79618 enabled“. Vergewissern Sie sich, dass für die VPN-Verbindung in den Eigenschaften der PEAP-Authentifizierungsmethode das Kontrollkästchen „Quarantäneüberprüfungen aktivieren“ aktiviert ist.
Verwenden Sie bei der DHCP-Erzwingung auf einem Computer, auf dem Windows Vista ausgeführt wird, den Befehl „net start“, um sich zu vergewissern, dass die Dienste „NAP-Agent (Network Access Protection)“ und „DHCP-Client“ gestartet wurden. Verwenden Sie bei Bedarf das Snap-In „Dienste“ oder das Tool „Sc.exe“, um diese Dienste zu starten, und konfigurieren Sie sie für automatischen Start.
Verwenden Sie den Befehl „netsh nap client show configuration“, um sich zu vergewissern, dass der DHCP-Quarantäneerzwingungsclient aktiviert ist. Verwenden Sie bei Bedarf das Snap-In „NAP-Clientkonfiguration“, um den DHCP-Quarantäneerzwingungsclient zu aktivieren, oder verwenden Sie den Befehl „netsh nap client set enforcement 79617 enabled“.
Schritt 2: Überprüfen des NAP-Clientereignisprotokolls Verwenden Sie das Snap-In „Ereignisanzeige“, um die Ereignisse im Ereignisprotokoll zu überprüfen, das vom Dienst „NAP-Agent (Network Access Protection)“ erstellt wurde. Verwenden Sie bei Computern, auf denen Windows Vista ausgeführt wird, das Snap-In „Ereignisanzeige“, um Ereignisse in „Anwendungs- und Dienstprotokolle\Microsoft\Windows\Netzwerkzugriffsschutz\Betriebsbereit“ anzuzeigen. Verwenden Sie bei Computern, auf denen Windows XP mit SP3 ausgeführt wird, das Snap-In „Ereignisanzeige“, um NAP-Ereignisse im Systemereignisprotokoll anzuzeigen.
Beziehen Sie über die NAP-Clientereignisse die Korrelations-ID für die NAP-Clientintegritätsevaluierung. Sie können die Korrelations-ID oder den Computernamen des NAP-Clients verwenden, um das entsprechende Integritätsevaluierungsereignis auf dem NAP-Integritätsrichtlinienserver zu finden. Abbildung 1 zeigt ein Beispielereignis für einen nicht richtlinienkonformen NAP-Client mit der Korrelations-ID.
Abbildung 1 Beispiel eines Windows Vista-NAP-Clientereignisses
Abbildung 1 Beispiel eines Windows Vista-NAP-Clientereignisses
Schritt 3: Überprüfen des NPS-Ereignisprotokolls Verwenden Sie auf dem NAP-Integritätsrichtlinienserver das Snap-In „Ereignisanzeige“, um die Ereignisse im Protokoll „Windows-Protokolle\Sicherheit“ anzuzeigen, die vom NPS-Dienst erstellt wurden. Um NPS-Ereignisse anzuzeigen, öffnen Sie in der Ereignisanzeige „Benutzerdefinierte Ansichten“ und danach „Serverrollen“, und klicken Sie anschließend auf „Netzwerkrichtlinien- und Zugriffsdienste“. Um ein mit dem Ereignis verknüpftes Onlinehilfethema anzuzeigen, klicken Sie auf der Registerkarte „Allgemein“ des Ereignisses auf den Link „Onlinehilfe des Ereignisprotokolls“.
Typische NAP-Integritätsevaluierungsereignisse haben die Ereignis-ID 6278 (bei uneingeschränktem Zugriff) oder 6276 (bei eingeschränktem Zugriff). Finden Sie basierend auf dem Namen des NAP-Clients (das Feld „Kontoname“ im Abschnitt „Clientcomputer“ der Ereignisbeschreibung) oder der Korrelations-ID (dem Feld „Sitzungs-ID“ im Abschnitt zu Quarantäneinformationen in der Ereignisbeschreibung) das entsprechende NAP-Integritätsrichtlinienserver-Ereignis.
Die NPS-Ereignisprotokollereignisse 6278 und 6279 enthalten Informationen zur NAP-Integritätsevaluierung, wie z. B. den Namen der zugehörigen Verbindungsanforderungsrichtlinie (das Feld mit dem Namen der Proxyrichtlinie im Abschnitt „Authentifizierungsdetails“ der Ereignisbeschreibung) und der zugehörigen Netzwerkrichtlinie (das Feld mit dem Namen der Netzwerkrichtlinie im Abschnitt „Authentifizierungsdetails“ der Ereignisbeschreibung). Abbildung 2 zeigt ein Beispiel für die Registerkarte „Details“ der Ereignis-ID 6276 mit dem Namen der Präfixrichtlinie, dem Namen der Netzwerkrichtlinie und der Korrelations-ID (QuarantineSessionID). Dies ist das NAP-Integritätsrichtlinienereignis, das dem Windows Vista-NAP-Clientereignis in Abbildung 1 entspricht.
Abbildung 2 Beispiel eines NAP-Integritätsrichtlinienserver-Ereignisses
Abbildung 2 Beispiel eines NAP-Integritätsrichtlinienserver-Ereignisses
Wenn es kein Ereignis gibt, das dem NAP-Clientereignis entspricht, vergewissern Sie sich, dass der NPS-Dienst gestartet wurde und dass der NAP-Erzwingungspunkt korrekt für NAP und für die Verwendung des NAP-Integritätsrichtlinienservers als RADIUS-Server konfiguriert wurde. Vergewissern Sie sich, dass zwischen dem NAP-Erzwingungspunkt und dem NAP-Integritätsrichtlinienserver RADIUS-Nachrichten gesendet werden können.
Wenn Sie diese drei Schritte befolgen, werden Sie bald herausgefunden haben, warum Ihre NAP-Erzwingung nicht wie erwartet funktioniert. Weitere Informationen zu NAP finden Sie in der Randleiste „NAP-Ressourcen“.

Joseph Davies ist technischer Redakteur bei Microsoft und lehrt und schreibt seit 1992 über Windows-Netzwerkthemen. Er hat acht Bücher für Microsoft Press verfasst und ist Autor der monatlich erscheinenden TechNet-Rubrik „The Cable Guy“.


 Windows PowerShell: Hier signieren, bitte
Windows PowerShell
Hier signieren, bitte
Don Jones

Im Artikel vom Januar 2008 zu Windows PowerShell wurde hervorgehoben, wie wichtig das digitale Signieren Ihrer Windows PowerShell-Skripts ist. Außerdem wurden einige Szenarios beschrieben, in denen eine beliebige Ausführungsrichtlinie, außer AllSigned, zu erheblichen Sicherheitsrisiken in Ihrer Umgebung führen kann.
Ein Thema, das nicht ausführlich behandelt wurde, ist das Signieren Ihrer Skripts. Den Artikel vom Januar finden Sie unter technetmagazine.com/issues/2008/01/PowerShell. Erraten Sie, welches Thema in diesem Monat behandelt wird?

Mehr als nur eine Signatur
Das Wort „Signatur“ ist der richtige technische Begriff für das, was hier behandelt werden soll, obwohl das Wort selbst keine wirklich gute Beschreibung dafür ist, was dabei tatsächlich vor sich geht. Ein Skript zu signieren, heißt nicht, dass Sie es genehmigen oder autorisieren, wie das bei einem Vertrag oder einer Kreditkartenquittung der Fall ist. In der Welt der digitalen Sicherheit steht das Signieren für den Prozess, bei dem Ihre Identität an etwas angefügt wird, um sicherzustellen, dass der Status oder Zustand dieses „etwas“ in keiner Weise geändert wurde. All das beruht auf Kryptografie, und Kryptografie beginnt (zumindest in diesem Fall) mit einem Paar von Verschlüsselungsschlüsseln.
Diese Schlüssel werden als asymmetrische Schlüssel bezeichnet, weil sie sich voneinander unterscheiden. Das Paar besteht aus einem privaten Schlüssel, der nur Ihnen zugänglich ist, und einem öffentlichen Schlüssel, der allen zugänglich ist. Das ist etwas vereinfacht dargestellt, doch grundsätzlich kann etwas, was mit dem privaten Schlüssel verschlüsselt wurde, nur mit dem passenden öffentlichen Schlüssel entschlüsselt werden.
Das geschieht folgendermaßen. Der Einfachheit halber soll hier wieder etwas vereinfacht werden, um mit der Behandlung des Themas voranzukommen. Ich habe ein Windows PowerShell®-Skript, das ich signieren möchte, sowie ein Zertifikat, das meinen privaten Schlüssel enthält, den ich zum Signieren des Skripts verwenden will. Windows PowerShell selbst enthält ein Cmdlet (wird in Kürze besprochen), das mit dem Skript und dem Zertifikat das eigentliche Signieren durchführen kann. Dabei verschlüsselt Windows PowerShell das Skript mithilfe meines privaten Schlüssels. Die verschlüsselte Kopie wird als unverständlicher Text angezeigt, der unten im Skript als eine Reihe von Kommentaren hinzugefügt wird (siehe Abbildung 1). Meine Identität ist ebenfalls in die Kommentare eincodiert, aber nicht verschlüsselt. Die Identität selbst kann gelesen werden, ohne zur Kryptografie zu greifen.
Abbildung 1 Signaturblock, der unten in Ihrem Skript gespeichert ist
Abbildung 1 Signaturblock, der unten in Ihrem Skript gespeichert ist
Später, wenn Windows PowerShell die Signatur untersucht, decodiert es meine Identität und verwendet sie, um meinen öffentlichen Schlüssel zu erhalten. Da nur mein öffentlicher Schlüssel die restliche Signatur entschlüsseln kann, weiß Windows PowerShell: Wenn es die Signatur entschlüsseln kann, muss sie von mir stammen. Wenn jemand anderes signiert hätte, könnte mein öffentlicher Schlüssel die Signatur nicht entschlüsseln. Nachdem die Signatur entschlüsselt wurde, vergleicht Windows PowerShell das Skript mit der Kopie, die in die Signatur verschlüsselt wurde. Wenn sie übereinstimmen, wird die Signatur als unversehrt angesehen. Wenn die beiden Skripts voneinander abweichen, ist die Signatur nicht in Ordnung und wird als ungültig angesehen.
So schützt eine Signatur ein Klartextskript und verhindert, dass unbemerkt Änderungen daran vorgenommen werden. Denken Sie daran, dass das Skript selbst zwar leicht geändert werden kann, dass die Signatur aber ohne meinen privaten Schlüssel (den nur ich besitze) nicht so geändert werden kann, dass sie mit dem veränderten Skript übereinstimmt.
Dies ist sicherlich eine Vereinfachung des zugrunde liegenden technischen Prozesses. In der Realität können Signaturen mehr Informationen enthalten und enthalten sie auch, wie z. B. eine Kopie meines öffentlichen Schlüssels, Informationen zur Zertifizierungsstelle (certificate authority, CA), von der die Schlüssel veröffentlicht wurden, und so weiter. Die Beschreibung hier skizziert aber auf jeden Fall die wichtigen Teile des Prozesses und hebt die Tatsache hervor, dass eine Signatur Ihr Skript tatsächlich vor einer nicht autorisierten Änderung schützt.
Ein entscheidender Sicherheitsfaktor ist der absolute Schutz Ihres privaten Schlüssels. Er darf nicht in falsche Hände geraten. Wenn Sie Ihren Schlüssel in Windows installieren, sollten Sie ihn sofort mit einem Kennwortschutz versehen, damit Ihr Schlüssel nicht ohne Ihr Wissen von einem schädlichen Prozess verwendet werden kann. Smartcards bieten eine noch bessere Sicherheit, da sie Ihren privaten Schlüssel enthalten. Bei einer Smartcard bleibt Ihr privater Schlüssel immer auf der Karte. Stattdessen werden die Daten, die Sie verschlüsseln möchten, von der Kartenleserhardware an die Karte übermittelt, und die Schaltkreise der Karte selbst führen die Verschlüsselung durch und senden das Ergebnis zurück.

Erhalten eines Zertifikats
Cmdlet des Monats: Export-CSV
Die Teilnehmer in den Foren von PowerShellCommunity.org fragen oft, ob Windows PowerShell nach Microsoft Excel® exportieren kann. Selbstverständlich kann es das. Dies geschieht mithilfe des Export-CSV-Cmdlet, da Excel standardmäßig CSV-Dateien öffnen, bearbeiten und speichern kann. Wenn Sie zum Beispiel eine Liste von Diensten exportieren möchten, führen Sie einfach nur „Get-Service“ | „Export-CSV MyServices.csv“ aus. Eigentlich können Sie Export-CSV ans Ende einer beliebigen Pipeline setzen, und alle Objekte in dieser Pipeline landen in der angegebenen CSV-Datei. Standardmäßig fügt Export-CSV oben in der Datei eine Headerzeile hinzu, die sie dazu verwendet, den Typ des Objekts anzugeben, das exportiert wurde. Diese Zeile wird mit einem Kommentar versehen, um zu verhindern, dass Excel die Datei öffnet. Wenn Sie diese Typinformationen nicht exportieren möchten, können Sie einfach den Parameter „-notype“ der Export-CSV hinzufügen. Außerdem können Sie den Parameter „-force“ hinzufügen, um zu erzwingen, dass eine vorhandene CSV-Datei, die den gleichen Namen hat, überschrieben wird, ohne dass um eine Bestätigung gebeten wird (standardmäßig wird darum gebeten), oder Sie können den Parameter „-noClobber“ hinzufügen, um zu verhindern, dass eine vorhandene Datei überschrieben wird.

Zum Signieren von Skripts benötigen Sie eine bestimmte Art von Zertifikat, ein Authenticode-Codesignaturzertifikat der Klasse III, das Sie auf dreierlei Weise erhalten können. Die erste Möglichkeit besteht darin, die interne Public Key-Infrastruktur (PKI) Ihrer Organisation zu verwenden, falls vorhanden. In einer gut implementierten PKI wird die zugehörige Stammzertifizierungsstelle von allen Computern in Ihrer Organisation als vertrauenswürdig eingestuft. Das ist unerlässlich, damit die Zertifikate, die von der Zertifizierungsstelle ausgegeben werden, in der Organisation eingesetzt werden können.
Windows Server® wird seit Windows® 2000 mit seiner eigenen Zertifikatserversoftware geliefert, und Sie können diese Software verwenden, um Ihre eigene PKI zu erstellen. Eine vollständige PKI-Implementierung erfordert viel Planung, doch wenn Sie eine PKI nur für das Ausstellen von Codesignaturzertifikaten benötigen, erfordert dies nicht endlos viel Arbeit. Sie können einfach Gruppenrichtlinien verwenden, um das Stammzertifikat Ihrer CA mittels Push auf Ihre Computer zu übertragen, damit sie ihm vertrauen.
Die zweite Möglichkeit besteht darin, eine kommerzielle CA zu verwenden. Die Verwendung einer kommerziellen CA, die zu den führenden Zertifizierungsstellen gehört, bietet den Vorteil, dass die Computer in Ihrer Organisation wahrscheinlich bereits so konfiguriert sind, dass sie den Zertifikaten dieser CA vertrauen. (Beachten Sie, dass Windows XP viele CAs standardmäßig als vertrauenswürdig einstuft, während dies bei Windows Vista® standardmäßig bei einer weit geringeren Anzahl von CAs der Fall ist.) Eine beliebte kommerzielle Zertifizierungsstelle ist VeriSign (verisign.com). Es gibt andere, die ebenfalls in Erwägung gezogen werden sollten, wie z. B. CyberTrust (cybertrust.com) und Thawte (thawte.com).
Die dritte Möglichkeit, wie Sie ein Codesignaturzertifikat erhalten können, besteht im Erstellen eines eigenen selbstsignierten Zertifikats mithilfe eines Tools wie Makecert.exe. Es wird mit dem Windows Plattform-SDK geliefert, wird in einigen Editionen von Microsoft® Office installiert und kann an vielen anderen Orten gefunden werden. Der Vorteil eines selbstsignierten Zertifikats besteht darin, dass es kostenlos ist und keine Infrastruktur erfordert. Der Nachteil besteht jedoch darin, dass es wirklich nur auf Ihrem Computer eingesetzt werden kann. Wenn Sie es aber nur zur Skriptausführung auf Ihrem Computer benötigen, um die Codesignierung zu testen oder allgemein damit zu experimentieren, ist Makecert.exe eine hervorragende Option. Die Dokumentation zu diesem Tool finden Sie unter go.microsoft.com/fwlink/?LinkId=108538. Denken Sie aber daran, dass im Laufe der Jahre viele Versionen dieses Tools herausgegeben wurden. Es ist also möglich, dass Ihr Computer eine ältere Version ausführt, die nicht so funktioniert, wie in der Dokumentation beschrieben.
Mit Makecert.exe können Sie dann ein selbstsigniertes Zertifikat erstellen, indem Sie etwa Folgendes in der Windows PowerShell-Befehlszeile ausführen (ich hoffe, dass niemand, der diesen Artikel liest, womöglich cmd.exe verwendet):
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
Führen Sie anschließend den folgenden Befehl aus:
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 fordert Sie dann zur Kennworteingabe auf, um den Schlüssel zu schützen, und erstellt dann das Zertifikat. Sie können die Installation durch Ausführen dieses Codes in Windows PowerShell überprüfen:
gci cert:\CurrentUser\My -codesigning
Mit folgendem Befehl wird eine Liste aller Elemente im Laufwerk CERT: angezeigt (das ist Ihr Windows-Zertifikatspeicher), bei denen es sich um Codesignaturzertifikate handelt. Übrigens ist all dies auch in Windows PowerShell selbst dokumentiert. Sie finden diese Dokumentation, indem Sie einfach „help About_Signing" ausführen und einige Seiten nach unten blättern.

Signieren von Skripts
Sie verfügen jetzt über ein Zertifikat und ein Skript (zum Testen können Sie schnell ein einfaches Skript schreiben, wenn nötig), und sind bereit, das Skript zu signieren. Dies ist mit Windows PowerShell unglaublich einfach. Sie müssen einfach nur Folgendes eingeben:
$cert = @(gci cert:\currentuser\my
-codesigning)[0]
Set-AuthenticodeSignature myscript.ps1 $cert
Der erste Teil ruft das erste installierte Codesignaturzertifikat ab. (Wenn mehrere Zertifikate installiert wurden und Sie nicht das erste verwenden möchten, ändern Sie die „0“ einfach in die entsprechende Zahl). Der zweite Teil signiert die Datei (selbstverständlich müssen Sie den Dateinamen entsprechend ändern). Es ist wirklich so einfach. Aber meiner Meinung nach ist der Name des Set-AuthenticodeSignature-Cmdlet etwas zu lang. Deshalb habe ich ein Alias namens „Sign“ erstellt. Jetzt muss ich nur Folgendes ausführen:
Sign myscript.ps1 $cert
Wenn Sie dieses Skript jetzt öffnen, sehen Sie den unten eingefügten Signaturblock. Versuchen Sie, das Skript mit der Ausführungsrichtlinieneinstellung „AllSigned“ (Set-ExecutionPolicy AllSigned) auszuführen. Das müsste funktionieren. Jetzt werden Sie das Skript vermutlich ändern und speichern wollen. Stellen Sie dabei aber sicher, dass Sie es nicht erneut signieren. Windows PowerShell verweigert jetzt einfach die Ausführung der geänderten Version, weil die Signatur nicht mehr in Ordnung ist.

Lohnt sich der Aufwand?
Ist der ganze Aufwand wirklich gerechtfertigt? Ist es zuviel erwartet, ein Skript für einige administrative Aufgaben erstellen zu können, ohne 300 € für ein Zertifikat auszugeben oder ein ganz neues Infrastrukturelement implementieren zu müssen? Da ich selbst Administrator bin, verstehe ich Ihre Bedenken. Doch die Antwort ist schlicht und einfach ja. Es ist ganz sicher die Anstrengung wert.
Tatsache ist, dass Sicherheit immer bestimmte Umstände erfordert. Antivirussoftware kann große Umstände bereiten, doch Sie werden nicht darauf verzichten. Firewallsoftware bereitet ganz eindeutig Umstände, doch wie Sie wissen, ist es nicht sicher, ohne eine Firewall zu arbeiten. Auch die Windows Vista-Benutzerkontensteuerung kann Umstände bereiten, doch sie macht Ihren Computer sicherer. Ist diese verbesserte Sicherheit nicht das, wonach wir alle streben?
Windows PowerShell ist ein leistungsfähiges Tool, und wie bei jedem anderen Tool ist immer die Möglichkeit vorhanden, dass es durch einen böswilligen Benutzer in ein Sicherheitsrisiko verwandelt wird. Deshalb ist es für Sie wichtig, die böswilligen Benutzer abzufangen.
Die Codesignatur ist dabei der beste Schritt, und sie erfordert nicht viel Aufwand. Ich verwende zum Beispiel einen grafischen Skripteditor, der meine Skripts bei jedem Klick auf „Speichern“ automatisch signiert, sodass die Codesignatur für mich eine recht transparente Angelegenheit ist.
Sie können das Ganze selbst ohne solch einen Editor noch transparenter gestalten. Zum Beispiel können Sie ein Windows PowerShell-Profil für sich erstellen (erstellen Sie die Datei „Microsoft.PowerShell_profile.ps1“ in einem Ordner namens „WindowsPowerShell“, der sich in Ihrem Dokumentenordner befindet), und fügen Sie diese Funktion hinzu:
function sign ($filename) {
  $cert = @(gci cert:\currentuser\my
-codesigning)[0]
Set-AuthenticodeSignature $filename $cert
}
Jetzt können Sie Ihr Skript signieren, indem Sie einfach Folgendes eingeben:
Sign c:\scripts\myscript.ps1
Selbstverständlich muss das Profilskript das erste sein, was Sie signieren. Der Gedanke dabei ist, die Skriptsignierung so bequem wie möglich zu gestalten, sodass sie keinen großen Aufwand darstellt.
Eine Einserver-PKI bereitzustellen, nur um ein Codesignaturzertifikat auszustellen, ist nicht viel Arbeit. (Bedenken Sie jedoch, dass Sie Ihre PKI sorgfältig untersuchen und planen müssen. Dazu gehört auch der Schutz der Stammzertifizierungsstelle und das Bereitstellen einer Notfallwiederherstellung, vor allem wenn noch andere Verwendungszwecke vorgesehen sind.) Ihnen steht immer Makecert.exe zur Verfügung, wenn Sie der einzige sind, der in Ihrer Umgebung Skripts ausführen muss. Beachten Sie, dass das Windows PowerShell-Hilfethema zum Signieren auch Informationen zum Sichern des von Makecert.exe erstellten Zertifikats enthält.

Don Jones ist der Autor von Windows PowerShell: TFM and VBScript, WMI, and ADSI Unleashed. Sie können ihn über die Website PowerShellCommunity.org kontaktieren.


 Hey, Scripting Guy!: Die R&#252;ckkehr des Datenbankskripts
Hey, Scripting Guy!
Die Rückkehr des Datenbankskripts
Die Scripting Guys von Microsoft
Laden Sie den Code für diesen Artikel herunter: HeyScriptingGuy2008_04.exe (151KB)

Sie wissen ja, wenn die Scripting Guys eine Schwäche haben (mit Betonung auf „wenn“), dann ist es diese: Wir sorgen uns zu sehr um die möglichen Folgen unserer Aktionen bzw. Unterlassungen. Statt so zu handeln, wie es für uns am besten wäre, halten wir uns zurück und handeln so, wie wir denken, dass es für alle anderen am besten wäre. Wir tun dies ganz unabhängig davon, was diese Aktionen für uns bedeuten könnten.
Nehmen Sie zum Beispiel die Artikel zum Thema Datenbankskripterstellung. Um ehrlich zu sein, es fällt uns Scripting Guys schwer, Artikel über das Erstellen von Datenbankskripts zu verfassen. Das liegt nicht daran, dass das Erstellen von Datenbankskripts schwer wäre. Es ist eigentlich recht einfach. Das Problem ist vielmehr, dass die Scripting Guys nicht oft die Gelegenheit haben, mit Datenbanken zu arbeiten. Deshalb müssen wir jedes Mal, wenn wir über Datenbanken schreiben, alles genau überdenken. Wie Sie wahrscheinlich schon vor langer Zeit festgestellt haben, ist Denken definitiv keine Voraussetzung dafür, ein Scripting Guy zu werden.
Genau genommen, gäbe es wohl gar keine Scripting Guys, wenn sich einer von uns das am Anfang einmal genau überlegt hätte.
Wenn es also so schwer ist, Artikel über das Erstellen von Datenbankskripts zu schreiben, stellt sich die Frage, warum die Scripting Guys es trotzdem weiterhin tun. Die Antwort ist einfach: Wir sorgen uns darum, was mit allen anderen in der Welt wird, wenn wir damit aufhören, diese Artikel zu schreiben. Als Sir Arthur Conan Doyle entschied, Sherlock Holmes ein Ende zu machen (indem er ihn in der Kurzgeschichte „Das letzte Problem“ von den Klippen stürzen ließ), dachte er, dass er sich einfach einer Romanfigur entledigt, über die er nicht mehr schreiben wollte. Stattdessen ging ein großer Aufschrei der Empörung um die Welt. Einigen Berichten zufolge brachten Londoner Trauerbänder an ihren Hüten und Ärmeln an, als sie die Nachricht hörten. „Das letzte Problem“ wurde 1893 in The Strand Magazine veröffentlicht. Als Antwort darauf kündigten 20.000 Leser ihre Abonnements.
Autsch.
Die Scripting Guys sind besorgt, dass das Einstellen der Artikel zur Datenbankskripterstellung weltweit eine ähnliche Wirkung hätte. Wir wollen nicht so viel Kummer und Verzweiflung verursachen, und wir wollen sicher nicht, dass 20.000 von Ihnen ihr Abonnement für das TechNet Magazin kündigen. Deshalb möchten wir ankündigen, dass die Scripting Guys weiterhin Artikel über die Datenbankskripterstellung schreiben werden. Wann? Warum nicht sofort?

Hinzufügen von Datensätzen zu einer Datenbank
Wir dachten uns, dass wir diesen Monat einige raffinierte kleine Tricks für die Arbeit mit Datenbanken vorstellen. Das sind neue Tricks, die zu denen hinzukommen, die im Artikel vom September 2007 vorgestellt wurden (technetmagazine.com/issues/2007/09/HeyScriptingGuy). Nicht einmal die Scripting Guys würden sich erlauben, denselben Artikel zweimal zu veröffentlichen.
Es sei denn, wir wüssten, dass wir damit durchkommen.
Zunächst wird eine einfache Möglichkeit aufgezeigt, wie Sie einer Datenbank einen Datensatz hinzufügen können. Angenommen, es ist eine Datenbank namens „C:\Scripts\Inventory.mdb“ vorhanden, die eine Tabelle namens „Computers“ enthält. Die Tabelle „Computers“ enthält die folgenden Felder:
  • ComputerName
  • SerialNumber
  • UserName
  • Department
Wie fügen Sie dieser Datenbank einen neuen Computer hinzu? Betrachten Sie den Code in Abbildung 1.
Figure 1 Hinzufügen eines Datensatzes zur Tabelle „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
Die ersten Zeilen dieses Skripts werden hier nicht im Detail besprochen. Wenn Sie Hintergrundinformationen benötigen, können Sie sich einige der Ressourcen ansehen, die im Skriptcenter unter microsoft.com/technet/scriptcenter aufgeführt werden. Es soll nur angemerkt werden, dass die Konstanten „adOpenStatic“ und „adLockOptimistic“ verwendet werden, um den Cursortyp und die Datensatzsperre für das Recordset zu steuern. (Das klingt zwar beeindruckend, ist aber sehr leicht zu bewerkstelligen.) Nach dem Erstellen von Instanzen der ADODB.Connection- und ADODB.Recordset-Objekte wird die Datenbank mit dem folgenden Befehl geöffnet:
objConnection.Open _
"Provider = Microsoft.Jet.OLEDB.4.0; " & _
"Data Source = C:\Scripts\Inventory.mdb"
Dieser Befehl öffnet übrigens eine Microsoft® Access® 2003-Datenbank. Eine Access 2007-Datenbank öffnen Sie mit diesem Befehl:
objConnection.Open _
"Provider = Microsoft.ACE.OLEDB.12.0; " & _
"Data Source = C:\Scripts\Inventory.accdb"
Auch wenn dies etwas vom Hauptthema ablenkt: Sie können einen Befehl wie etwa den folgenden verwenden, um eine SQL Server®-Datenbank zu öffnen:
objConnection.Open _
"Provider=SQLOLEDB;" & _
"Data Source=atl-sql-01;" & _
"Trusted_Connection=Yes;" & _ "InitialCatalog=Inventory;" & _
"User ID=fabrikam\kenmyer;Password=34DE6t4G!;"
Bisher handelt es sich bei allem, was aufgeführt wurde, um häufig verwendeten Standardcode. Wie Sie bald feststellen werden, beginnen alle Datenbankskripts mit denselben Codezeilen. Der Teil, der hervorgehoben werden soll, ist eigentlich diese Zeile:
objRecordSet.Open _
  "INSERT INTO Computers " & _
  "(ComputerName, SerialNumber, " & _
  "UserName, Department) " & _
    "VALUES ('atl-ws-07', 'A14B1234', " & _
      "'Ken Myer', 'Finance')", _
        objConnection, adOpenStatic, _
        adLockOptimistic
Hier wird die Abfrage INSERT INTO verwendet, um einen neuen Datensatz in die Tabelle „Computers“ einzufügen. Beachten Sie, dass nach dem Tabellennamen die Namen aller Felder folgen, für die Werte vorliegen, dass die Feldnamen mit Kommas getrennt werden und dass alle Namen in Klammern angegeben werden.
Sie fragen sich vielleicht: Was meinen die Scripting Guys mit „alle Felder, für die Werte vorliegen“? Gute Frage. Angenommen, dieser neue Computer wurde noch keiner Abteilung (Department) zugewiesen. Vorausgesetzt, die Datenbank ermöglicht die Eingabe eines Null-Werts im Feld „Department“, so muss der Abteilung also kein Wert zugewiesen werden, sie kann in der Liste weggelassen werden. Anders gesagt, könnte eine Abfrage etwa so geschrieben werden:
objRecordSet.Open _
  "INSERT INTO Computers " & _
  "(ComputerName, SerialNumber, " & _
  "UserName) " & _
    "VALUES ('atl-ws-07', 'A14B1234', " & _
      "'Ken Myer')", _
        objConnection, adOpenStatic, _
        adLockOptimistic
Was das Zuweisen von Werten angeht, sehen Sie sich an, was den Feldnamen folgt: das VALUES-Schlüsselwort, an das sich die Werte anschließen, die wir den einzelnen Feldern zuweisen möchten (ebenfalls in Klammern eingeschlossen). Bedenken Sie, dass die Feldnamen beim Auflisten in beliebiger Reihenfolge angegeben werden können. Zum Beispiel kommt ComputerName zuerst, auch wenn es sich nicht unbedingt um das erste Feld in der Datenbank handelt. Das ist bei Feldnamen angebracht, aber nicht so sehr bei Werten. Werte müssen in genau derselben Reihenfolge wie die Felder aufgelistet werden. Wenn das erste aufgelistete Feld „ComputerName“ ist, muss der erste Wert der Computername sein. Andernfalls treten später Probleme auf. (Zum Beispiel würde dann womöglich der Benutzername oder die Seriennummer dem Feld „ComputerName“ zugewiesen werden.)
Wie Sie sehen können, ist das Zuweisen von Werten nicht kompliziert. Stellen Sie nur sicher, dass Sie die Werte gemäß dem Datentyp formatieren: Daten und Zeichenfolgewerte müssen in einfache Anführungszeichen gesetzt werden. Numerische und boolesche Werte dürfen nicht in einfache Anführungszeichen gesetzt werden.
Wenn Sie einen Wert haben, der tatsächlich sein eigenes einfaches Anführungszeichen enthält (wie der Name O'Brien), müssen Sie das einfache Anführungszeichen durch Verdoppeln „hinüberretten“:
'O''Brien'
Seltsam, aber wahr.

Löschen von Datensätzen aus einer Datenbank
Das war schon recht interessant: Sie können einer Datenbank einen Datensatz allein durch Ausführen einer einzigen SQL-Abfrage hinzufügen. Gibt es etwas Besseres? Uns ist nichts bekannt.
Außer, dass es schon gut wäre, mithilfe einer einzigen Abfrage mehrere Datensätze aus einer Datenbank löschen zu können.
Angenommen, Ihr Unternehmen beschließt, die Personalabteilung abzubauen. (Nein, das ist kein Witz. Wir haben meist schon genügend Schwierigkeiten mit der Microsoft-Personalabteilung, so wie sie ist.) Wie können Sie alle Computer der Personalabteilung aus Ihrer Inventardatenbank löschen? In Abbildung 2 wird eine Möglichkeit dafür gezeigt.
Figure 2 Löschen mehrerer Datensätze (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
Wie Sie sehen können, beginnt dieses Skript genau wie das Skript zum Hinzufügen eines neuen Datensatzes: mit dem Definieren einiger Konstanten, dem Erstellen einiger Objekte und dem anschließenden Herstellen der Verbindung mit der Inventory.mdb-Datenbank. Danach wird einfach eine DELETE-Abfrage verwendet, um alle Datensätze (*) aus der Tabelle „Computers“ zu löschen oder zumindest alle Datensätze zu löschen, bei denen das Feld „Department“ den Wert „Human Resources“ (Personalabteilung) besitzt:
objRecordSet.Open _
  "DELETE * FROM Computers " & _
   "Where Department='Human Resources'", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Es ist alles so einfach, wie das Stürzen von einer Klippe.
Nicht böse gemeint, Sherlock Holmes.

Aktualisieren von Datensätzen in einer Datenbank
Wem würde es keinen Spaß machen, alle Daten der Personalabteilung zu löschen? (Hinweis an die Microsoft-Personalabteilung: Wir meinen natürlich Spaß für andere und deren Personalabteilung. Nicht für uns. Uns würde das wirklich keine Freude bereiten.) Dennoch ist das Löschen aller Computer der Personalabteilung aus der Inventardatenbank möglicherweise nicht gerade das Beste, was Sie machen können. Warum nicht? Auch wenn die Mitarbeiter Ihrer Personalabteilung sich mit der gesamten Hardware davonstehlen, gehören die Computer nach wie vor Ihrem Unternehmen. Das heißt, dass die Computer dementsprechend in der Datenbank aufgelistet werden sollten. Also soll dies jetzt durchgeführt werden. Statt die Datensätze aus der Datenbank zu löschen, soll jeder Datensatz aktualisiert werden. Es wird nur der Abteilungsname für jeden Computer der Personalabteilung in „None“ (Kein) geändert. Kurz gesagt, es wird das Skript in Abbildung 3 ausgeführt.
Figure 3 Aktualisieren von Datensätzen (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
Der einzige Unterschied bei diesem Skript ist die SQL-Abfrage. In diesem Fall verwenden Sie eine UPDATE-Abfrage, um die Datensätze in der Tabelle „Computers“ zu aktualisieren. Zusätzlich zum UPDATE-Schlüsselwort müssen zwei Parameter hinzugefügt werden, die der Abfrage mitteilen, wie und welche Datensätze aktualisiert werden sollen:
  • Set Department = 'None'. Dies gibt einfach den neuen Wert für das Feld „Department“ an. Sie können genau genommen mehr als einen Feldwert auf einmal festlegen, indem Sie eine Syntax wie die folgende verwenden: Set Department = 'None', UserName = 'None'. Wie Sie sehen können, werden dadurch sowohl das Feld „Department“ als auch das Feld „UserName“ auf „None“ gesetzt.
  • Where Department = 'Human Resources'. Dies ist eine standardmäßige Where-Klausel, die angibt, welche Datensätze aktualisiert werden sollen. In diesem Fall sind es alle Datensätze, bei denen das Feld „Department“ den Wert „Human Resources“ hat. Dies wird aus einem einfachen Grund erwähnt: Es sollen nicht alle Datensätze in der Datenbank, sondern nur die Datensätze (Computer) geändert werden, die früher zur Personalabteilung gehörten.
Hier ist etwas Interessantes, was Sie mit UPDATE-Abfragen durchführen können: Angenommen, Ihr Unternehmen beschließt, angesichts der Lebenshaltungskosten allen Mitarbeitern eine Gehaltserhöhung von 10 Prozent zu gewähren. (Die Scripting Guys und Sir Arthur Conan Doyle sind sich zumindest in einem Punkt sehr ähnlich: Sie schreiben über fiktive Welten.) Hier ist ein Skript, das eine Tabelle namens „Employees“ (Mitarbeiter) öffnet und das Feld „Salary“ (Gehalt) für jeden Mitarbeiter ändert. Welcher Wert wird dabei für das Feld „Salary“ festgelegt? Die Abfrage setzt dieses Feld auf das aktuelle Gehalt des Mitarbeiters multipliziert mit 1,1. Anders gesagt, sie gewährt jedem Mitarbeiter eine Erhöhung von 10 Prozent. (Wenn es nur so leicht wäre!) Hier ist die Abfrage:
objRecordSet.Open _
  "Update Employees " & _
  "Set Salary = (Salary * 1.1)", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Was daran so interessant ist? Wie Sie sehen, können Sie in Ihren Update-Abfragen Berechnungen anstellen. Sie haben beschlossen, den Vertrag Ihrer Zeitarbeiter um weitere 60 Tage zu verlängern? In diesem Fall dürfte eine Abfrage ähnlich der folgenden nützlich sein:
objRecordSet.Open _
  "Update TempEmployees " & _
  "Set ContractExpirationDate = " & _
  "(ContractExpirationDate + 60)", _
    objConnection, adOpenStatic, _
    adLockOptimistic

Interessante Möglichkeiten zum Abrufen von Daten
Was nützliche Abfragen angeht, sollen abschließend noch einige interessante Möglichkeiten untersucht werden, um Daten aus einer Datenbank abzurufen. Hier ist z. B. ein einfaches, aber sehr nützliches Skript. Angenommen, die Inventardatenbank enthält ein Feld namens „Price“, ein Feld, das logischerweise den Preis des Computers angibt. Sie möchten wissen, welche Computer die fünf teuersten in Ihrer Organisation sind? Das erfahren Sie anhand des Beispielskripts in Abbildung 4.
Figure 4 Sortieren des Recordset (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
Wie Sie sehen können, wurden in dieser SQL-Abfrage zwei Dinge durchgeführt: Zum einen wurde das Recordset nach Preis sortiert (Order By Price), und es wurden nur die ersten fünf (d. h. die fünf teuersten) Computer abgefragt. Das ist die Aufgabe von „SELECT Top 5“. Wenn Sie eine Liste der 10 teuersten Computer wünschen, würden Sie diese Abfrage verwenden:
objRecordSet.Open _
  "SELECT Top 10 * FROM Computers " & _
  "Order By Price", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Hinweis: Es wurde außerdem etwas Code hinzugefügt, der das Recordset durchläuft und die Namen der einzelnen Computer anzeigt. Dieser Code wurde in früheren Skripts nicht benötigt, weil die Skripts keine Daten zurückgegeben und angezeigt haben.
Alternativ können Sie die ersten 10 Prozent mithilfe dieser Abfrage abrufen:
objRecordSet.Open _
  "SELECT Top 10 PERCENT * " & _
  "FROM Computers Order By Price", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Was ist, wenn Sie die kostengünstigsten Computer abrufen möchten? Kein Problem. Dazu verwenden Sie einfach den gleichen Ansatz, außer dass diesmal das Recordset in absteigender Reihenfolge sortiert wird (d. h. vom niedrigsten zum höchsten Preis). Anders gesagt, diese Abfrage wird mit DESC verwendet, was angibt, dass das Recordset in absteigender Reihenfolge (descending order) sortiert werden muss:
objRecordSet.Open _
  "SELECT Top 5 * FROM Computers " & _
  "Order By Price DESC", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Alles klar? Wir haben ja gesagt, dass das alles nützliche Skripts sind.
Hier sind noch zwei, die für Sie vielleicht interessant sind. Angenommen, Ihre Datenbank enthält ein Feld namens „Budgeted“, mit dem der Geldbetrag nachverfolgt wird, der ursprünglich für den Computer eingeplant war. Sie möchten die Ist-Kosten mit dem Sollbetrag vergleichen? Diese Abfrage gibt eine Liste der Computer zurück, die mehr kosten als der geplante Betrag:
objRecordSet.Open _
  "SELECT * FROM Computers " & _
  "Where (Budgeted < Price)", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Währenddessen berechnet diese Abfrage den Durchschnittspreis aller Computer (SELECT AVG(Price) FROM Computers), gibt dann eine Liste aller Computer zurück, die unter dem Durchschnittspreis liegen:
objRecordSet.Open _
  "SELECT * FROM Computers " & _
  "WHERE Price < " & _
  "(SELECT AVG(Price) FROM Computers)", _
    objConnection, adOpenStatic, _
    adLockOptimistic
Sie haben Recht, es wurde eine SELECT-Abfrage in einer Where-Klausel verwendet. Wie funktioniert das? Das ist eine lange Geschichte. Doch wie Sie sehen können, eröffnet dies Möglichkeiten zum Abrufen aller Arten von interessanten Informationen mit Ihren SQL-Abfragen.

Die Moral der Geschichte
Wie am Anfang dieses Artikels für diesen Monat schon angemerkt, waren wir nicht sicher, ob wir überhaupt einen weiteren Artikel zur Datenbankskripterstellung schreiben wollten. Wir sind jedoch froh, dass wir es getan haben, zum Teil deshalb, weil wir denken, dass Sie einige dieser Abfragen für nützlich halten werden, aber auch aus folgendem Grund: Wenn wir diesen Artikel jetzt nicht verfasst hätten, müssten wir dies früher oder später nachholen. Denn letzten Endes wurde sogar Sir Arthur Conan Doyle dazu gezwungen, Sherlock Holmes wieder ins Leben zurückzurufen. Sir Arthur hat die ersten vorsichtigen Schritte in diese Richtung genommen, indem er eine neue Sherlock Holmes-Kurzgeschichte schrieb, die angeblich vor dem Tod des Detektivs spielte. Danach hat er allerdings einfach dem Druck seiner Leser nachgegeben und eine etwas zweifelhafte Geschichte erfunden, der zufolge Sherlock Holmes seinen eigenen Tod vorgetäuscht hatte. Letzten Endes waren alle glücklich, und damit war alles in bester Ordnung.
Interessanterweise abonnierten 30.000 neue Leser The Strand Magazine, als die neue Sherlock Holmes-Kurzgeschichte veröffentlicht wurde. Sir Arthurs dankbare Herausgeber in Großbritannien und den USA reagierten darauf, indem sie ihn zum höchstbezahlten Schriftsteller der Welt machten.
Hmmm. Sir Arthur Conan Doyle rief einen sehr beliebten Helden ins Leben zurück und wurde der höchstbezahlte Schriftsteller der Welt. Die Scripting Guys haben jetzt ein sehr beliebtes Thema wiederbelebt, und zwar ohne irgendwelche Tode vortäuschen zu müssen. Ob dies von den Leuten beim TechNet Magazin bemerkt wird?

Der Scripting Perplexer von Dr. Scripto
Die monatliche Herausforderung, die nicht nur Ihr Talent zum Rätsellösen testet, sondern auch Ihre Skriptingfähigkeiten.

April 2008: Wählen Sie einen Buchstaben
Im Rätsel dieses Monats müssen Sie die Buchstaben A bis O in die blauen Felder eintragen, um den Namen einer VBScript-Funktion zu erhalten. Jeder Buchstabe (A bis O) darf nur einmal verwendet werden, und die Buchstaben erscheinen nicht in alphabetischer Reihenfolge. Der eingefügte Buchstabe könnte der Anfang oder das Ende eines Funktionsnamens sein oder sich irgendwo in der Mitte eines Funktionsnamens befinden. In der folgenden Zeile würden Sie zum Beispiel den Buchstaben D eintragen, um den Funktionsnamen IsDate zu erhalten:
Jetzt versuchen Sie es selbst. Fügen Sie die Buchstaben A bis O ein, um in diesem Raster VBScript-Funktionsnamen zu enthüllen:

Der Scripting Perplexer von Dr. Scripto
Antwort: Wählen Sie einen Buchstaben, April 2008

Die Scripting Guys von Microsoft arbeiten für Microsoft (oder sind zumindest dort angestellt). Wenn sie nicht gerade ihrem Hobby, dem Baseball (oder verschiedenen anderen Aktivitäten) nachgehen, betreiben sie das TechNet-Skriptcenter. Besuchen Sie es unter www.scriptingguys.com.


 Sicherheit auf dem Pr&#252;fstand: Wo sind meine personenbezogenen Informationen?
Sicherheit auf dem Prüfstand
Wo sind meine personenbezogenen Informationen?
Frank Simorjay

Alle Welt redet darüber, dass personenbezogene Informationen (Personally Identifiable Information, PII) die wichtigsten Informationen sind, die es zu schützen gilt. Doch bevor Sie sie schützen können, müssen Sie genau wissen, welche PII Sie auf Ihrem PC gesammelt haben. Es ist leicht zu sagen, dass alles auf Ihrem Computer vertraulich ist, doch was genau ist mit „alles“ gemeint?
Um etwas mehr Aufschluss darüber zu erhalten, begann ich, das Problem genauer zu untersuchen. Dabei untersuchte ich die Datentypen, die vertraulich sein könnten, um herauszufinden, wo die Daten auf Ihrem Computer möglicherweise landen. Erstens ist es oft eine Frage der persönlichen Auffassung, wie vertraulich Informationen sind. Manche Leute fühlen sich zum Beispiel bedroht, wenn ihr Name in einem Suchergebnis erscheint. Falls Sie bislang nicht vollkommen zurückgezogen gelebt haben, wurde Ihr Name mit großer Wahrscheinlichkeit bereits in irgendeiner Form im Internet veröffentlicht. Um dies zu untersuchen, verwenden Sie Ihre bevorzugte Suchmaschine, um Ihren Namen online zu suchen. Bedenken Sie dabei, dass es umso schwieriger wird, auf Sie verweisende Instanzen zu finden, je häufiger Ihr Name ist. Es kann sein, dass Sie dies als einen Vorteil betrachten.
Wenn Sie sich selbst im Internet suchen, überprüfen Sie auch beliebte Websites für soziale Netzwerke, wie z. B. LinkedIn, Facebook und YouTube. Die Möglichkeiten des Internets, private Informationen, die früher nur mit sorgfältigen Suchbemühungen aufzudecken waren, zu speichern und zu verteilen, ist schon bemerkenswert.
Zu wissen, welche Informationen Sie schützen müssen, ist heutzutage schon eine Wissenschaft für sich. Als Hilfestellung wäre es nützlich herauszufinden, ob Ihr Computer möglicherweise private Informationen enthält, die Sie zwar schützen möchten, über die Sie sich aber im Unklaren sind. Es ist zwar richtig, dass alle persönlichen Informationen, die zum Stehlen Ihrer Identität herangezogen werden können, vertraulich sind. Doch Informationen können grundsätzlich in zwei Ebenen unterteilt werden. Es gibt Informationen, die leicht verfügbar sind, und Informationen, die mehr privater Natur sind und in der Regel für Ihre persönliche Identität als kritisch angesehen werden.
Informationen, die leicht verfügbar sind, werden in der Regel nicht als PII angesehen. Dazu gehören Ihr Name und möglicherweise auch Ihre Telefonnummer, Adresse, E-Mail-Adresse, Ihr Geschlecht, und in vielen Fällen Ihre Arbeitsadresse und einige Informationen zu Ihrer Ausbildung. Diese Elemente sind im Internet und in öffentlichen Verzeichnissen wie Telefonbüchern leicht verfügbar. Die Offenlegung dieser Informationen, wie etwa die Ermittlung Ihrer E-Mail-Adresse durch einen Spammer, ist zwar ärgerlich, das allein würde jedoch noch nicht zu einem Identitätsdiebstahl führen.
Vertrauliche Informationen bestehen aus privateren Daten, die eine Verbindung zu Ihrer Identität herstellen. Daten, die Sie nicht öffentlich preisgeben würden, umfassen Ihre Sozialversicherungsnummer (oder jede ähnliche eindeutige Nummer, die Ihnen von einer amtlichen Behörde zugewiesen wurde), Bankkontonummern, Kreditkartennummern (vor allem in Kombination mit dem Ablaufdatum), Ihre Führerscheinnummer und Ihr Fingerabdruck (oder andere biometrische Informationen). Wenn diese Informationen in die falschen Hände gelangen, kann damit großer Schaden angerichtet werden. Es ist wichtig, dass Sie kontrollieren, wo und wie diese Informationen im Internet und auf Ihrem PC aufgezeichnet und gespeichert werden. Dazu sollen im Folgenden einige einfache Methoden behandelt werden, mit denen Sie personenbezogene Informationen finden, die auf der Festplatte Ihres Systems gespeichert sein könnten.

Suchen nach PII-Daten auf Ihrem Computer
Personenbezogene Informationen sind überall verstreut. Wenn Sie Ihren Papierkorb überprüfen, werden Sie wahrscheinlich problemlos einige PII finden. Der Schutz dieser Informationen erfordert Sorgfalt und Umsicht. Ich empfehle, dass jeder in einen guten Aktenvernichter investiert und alles vernichtet, was persönliche Informationen enthält.
Doch was ist mit all den personenbezogenen Informationen auf Ihrem PC? Diese Daten zu finden, kann genauso schwierig sein, wie sie sicher zu speichern. Windows Vista® und einige andere Desktopsuchprogramme können Ihnen helfen, die Informationen auf Ihrem System zu finden. Sie müssen aber wissen, welche Informationen Sie suchen.
Um das Problem zu illustrieren, verwende ich einige einfache Tools, mit denen ich schnell praktische Beispiele dafür anführen kann. Ich verwende Skripts mit Windows PowerShell®. Zu den vielen Dingen, die Windows PowerShell bietet, gehören leistungsfähige Funktionen für den Zeichenfolgenabgleich. Für den vorliegenden Zweck werde ich mich auf seine Fähigkeit konzentrieren, reguläre Ausdrücke zu vergleichen. Windows PowerShell (verfügbar unter microsoft.com/powershell) ist ein leistungsfähiges Tool, das sich schnell zu einem Standardtool für administrative Aufgaben entwickelt hat.
Darüber hinaus werde ich findstr.exe verwenden, um eine Möglichkeit zu bieten, falsch positive Ergebnisse zu behandeln, also die Fähigkeit, Dateien zu ignorieren, die interessant aussehende Zeichenfolgen enthalten (aufgrund der Zufälligkeit der Datenzeichenfolgen in Binärdateien), hier jedoch nicht relevant sind. Kurz gesagt, Nichttextdateien können bei dieser Übung ignoriert werden.
Ich habe zwei geeignete PII-Datentypen ausgewählt: Sozialversicherungsnummern und Kreditkarteninformationen. Diese Daten müssten leicht auffindbar sein, wenn sie tatsächlich auf Ihrer Festplatte als Klartext gespeichert sind. Die Struktur und das Muster der beiden Datentypen sind eindeutig genug, damit ein einfaches Skript die Informationen finden kann. Diese Daten sind so vertraulich, dass ich fragen würde, warum sie auf Ihrem PC gespeichert werden. Wenn Sie dazu neigen, diese Informationen zu speichern, sollten Sie sicherstellen, dass sie geschützt sind. Ich werde gleich Möglichkeiten anführen, wie Sie Ihre PII schützen können. Diese Untersuchung ist zugegebenermaßen begrenzt, denn es gibt andere wichtige PII-Datentypen, die hier nicht enthalten sind, wie z. B. Benutzernamen und Kennwörter.

Suchen nach einer Sozialversicherungsnummer
Hier ist eine einfache Zeichenfolge, die in Dateien nach Informationen sucht, die aus einer standardmäßigen US-Sozialversicherungsnummer mit dem Format XXX XX XXXX oder XXX-XX-XXXX bestehen. Mithilfe von Windows PowerShell können Sie einfach die folgenden Zeilen eingeben:
Get-ChildItem  -rec -exclude *.exe,*.dll |
select-string " [0-9]{3}[-| ][0-9]{2}[-| ]
[0-9]{4}"
Oder Sie können findstr.exe verwenden, um sicherzustellen, dass Binärdateien für die Suche nicht gelesen werden, und folgenden Befehl eingeben:
Get-ChildItem  -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
" [0-9]{3}[-| ][0-9]{2}[-| ][0-9]{4}"
In diesem Beispiel wird durch „Get-ChildItem –rec“ eine rekursive Verzeichnissuche für Dateien durchgeführt, beginnend mit dem Verzeichnis, in dem der Befehl ausgeführt wurde. Das Programm „findstr.exe“ sucht Zeichenfolgen in Dateien. Die Select-Zeichenfolge ist die Windows PowerShell-Zeichenfolgensuchfunktion. (Von findstr.exe wird eine ähnliche Funktionalität geboten, auf die hier nicht eingegangen wird.) Beachten Sie außerdem, dass das einleitende Leerzeichen im regulären Ausdruck beabsichtigt ist. Dadurch können falsch positive Ergebnisse durch Beseitigen unnötiger Informationen verringert werden, wie z. B. Registrierungszeichenfolgen wie „HKLM\SOFTWARE\tool\XXX-XX-XXXX“.
In meinem Beispiel gab das Suchmuster eine Testbeispieldatei zurück, die ich in einem Unterverzeichnis platziert hatte. Außerdem fand es Beispiele in einer XML-Datei, die den Dateimustern für Kreditkarten- und Sozialversicherungsnummern entsprechen (siehe Abbildung 1).
Abbildung 1 Ergebnisse der Suche nach einem Zahlenmuster
Abbildung 1 Ergebnisse der Suche nach einem Zahlenmuster
Ich verwende die Ausschlussfunktion im ersten Beispiel, um alle EXE- und DLL-Dateien außer Acht zu lassen, da sie unnötige Daten generieren können. Sie stellen vielleicht noch andere Dateitypen fest, die ebenfalls zu falsch positiven Ergebnissen führen. In diesem Fall können Sie die Ausschlussfunktion verwenden, um den Suchvorgang anzupassen.
Wenn Sie nur eine bestimmte Sozialversicherungsnummer suchen, können Sie wie folgt vorgehen (ersetzen Sie „123 45 6789“ durch Ihre Sozialversicherungsnummer):
Get-ChildItem  -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
"123 45 6789","123-45-6789"
Die Ergebnisse dieser Suche sind in Abbildung 2 aufgeführt.
Abbildung 2 Suchen nach einer bestimmten Nummer
Abbildung 2 Suchen nach einer bestimmten Nummer

Suchen nach Kreditkarteninformationen
Kreditkarteninformationen sind etwas schwieriger, da die Formate sich unterscheiden. Zudem sollen falsch positive Ergebnisse begrenzt werden (d. h. Ergebnisse, die rein zufällig wie eine Kreditkartennummer aussehen). Trotzdem wird die Suche wahrscheinlich einige zufällige Abfolgen zurückgeben, die Kreditkartennummern nur ähneln.
Ich verwende Informationen aus der Abhandlung „Anatomy of Credit Card Numbers“ von Michael Gilleland als Referenz beim Erstellen dieser Zeichenfolgen (siehe merriampark.com/anatomycc.htm). Zum Beispiel gibt die Suchzeichenfolge an, dass die erste Zahl eine 4, 5 oder 6 sein muss, da dies als der Hauptbranchenbezeichner der Kreditkarte definiert ist.
Hier werden einfache Zeichenfolgen erstellt, die nach den Kreditkarten der Anbieter Discover, MasterCard und Visa suchen werden. In Windows PowerShell sieht die Suchzeichenfolge etwa so aus:
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}"
Im Beispiel in Abbildung 3 wird die Ausschlussfunktion verwendet, um unnötige von den .rtf-, .rbl- und .h-Dateitypen generierte Daten zu vermeiden. Außerdem sucht der Beispielcode Kreditkartenzeichenfolgen, die keine Leerzeichen oder Bindestriche enthalten. Dies könnte allerdings Ihre Anzeige überfordern. Deshalb folgt ein alternativer Befehl für die gleiche Funktion, doch dieser erkennt keine Kreditkartennummern ohne Leerzeichen oder Bindestriche.
Abbildung 3 Verwenden der Ausschlussfunktion zur Vermeidung unnötiger Daten in den Ergebnissen
Abbildung 3 Verwenden der Ausschlussfunktion zur Vermeidung unnötiger Daten in den Ergebnissen
Get-ChildItem  -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
"[456][0-9]{3}[-| ][0-9]{4}[-| ][0-9]{4}
[-| ][0-9]{4}"
Da die von American Express ausgegebenen Kreditkarten stark abweichen, habe ich eine andere Suchzeichenfolge erstellt, um das Muster dieser Karte zu suchen. In Windows PowerShell sieht die Suchzeichenfolge etwa so aus:
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}"
Eine Überladung mit Daten kann sich auch auf dieses Ergebnis auswirken. Bei diesem alternativen Befehl handelt es sich um die gleiche Funktion, er erkennt aber keine Kreditkartennummern ohne Leerzeichen oder Bindestriche.
Get-childitem -rec | ?{ findstr.exe
/mprc:. $_.FullName } | select-string
"3[47][0-9]{2}[-| ][0-9]{6}[-| ][0-9]{5}"
Beim Schreiben dieses Artikels habe ich diese Suchvorgänge auf meinem eigenen System ausgeführt und war ziemlich überrascht, mehrere Instanzen meiner Sozialversicherungsnummer zu finden, die an Orten gespeichert waren, an denen sie nicht hätten gespeichert sein sollen. Es stellte sich heraus, dass sich diese Information in einer Mitteilung befand, die ich vor einiger Zeit geschrieben und dann vergessen hatte. Das hat mir zu denken gegeben, was ich niederschreiben sollte und was nicht.
Wenn Sie solche Informationen speichern möchten, und zwar auf eine sichere Weise, verwenden Sie ein Tool wie Password Safe (verfügbar unter passwordsafe.sourceforge.net). Oder verschlüsseln Sie Ihre Festplatte mit einem Tool wie BitLockerTM Drive Encryption. Das Data Encryption Toolkit for Mobile PCs bietet einen geprüften Leitfaden für den Schutz von Daten auf einem mobilen PC. Zumindest erschweren diese Lösungen die Arbeit für jemanden, der Ihren PC nach persönlichen Informationen durchsucht.

Zusammenfassung
Das Auffinden personenbezogener Informationen ist ziemlich einfach. Es kommt darauf an, dass Sie wissen, wo sich diese Informationen befinden. Bedenken Sie jedoch, dass Malware oder ein böswilliger Benutzer, der Zugang zu Ihrem System hat, ähnliche Ermittlungsverfahren nutzen kann, um ebenso leicht an Informationen auf Ihrem System heranzukommen. Seien Sie vorsichtig, wann und wo Sie personenbezogene Informationen eingeben, und wenn Sie dazu neigen, solche Informationen zu speichern, stellen Sie sicher, dass Sie sie verschlüsseln.
Ich möchte Matt Hainje für seine Hilfe bei der Behandlung von Problemen mit meinen Windows PowerShell-Skripts danken.

Frank Simorjay ist ein technischer Programmmanager im Microsoft Solution Accelerator-Team für Sicherheit- und Kompatibilität. Er entwirft Sicherheitslösungen für Microsoft-Kunden, hält Vorträge bei Veranstaltungen wie der Secure World Exposition (er ist einer der Mitbegründer), bietet Sicherheitsschulungen an und hat zu verschiedenen Artikeln und Büchern zum Thema Sicherheit beigetragen. Sein neuestes Werk ist das „Malware Removal Starter Kit“.


 Die Desktopdateien: Bereitstellen von Windows&#160;XP mit dem WAIK
Die Desktopdateien
Bereitstellen von Windows XP mit dem WAIK
Wes Miller

Es ist erstaunlich, wie unterschiedlich Kunden sein können. In einer idealen Welt befänden sich alle Kunden immer in derselben Bereitstellungsphase für dieselbe Windows-Version. Dies würde das Testen sicher erleichtern. Aber selbstverständlich ist das nicht der Fall. Während einige von Ihnen bereits mit der Bereitstellung
von Windows Vista® kämpfen – oder damit vielleicht sogar schon fertig sind – oder sich begeistert darauf vorbereiten, den ersten schreibgeschützten Windows Server® 2008-Domänencontroller in die Produktion zu übernehmen, erinnern mich genauso viele andere regelmäßig daran, dass sie noch mitten in lange geplanten Bereitstellungen von Windows® XP und/oder Windows Server 2003 R2 stecken.
Neulich erhielt ich eine E-Mail-Nachricht von einem Leser mit der Frage: „Wie ist mit dem Windows Automated Installation Kit (WAIK) und Windows XP? Wie verwende ich das WAIK bei der Bereitstellung von Windows XP?“ Nun, ich werde versuchen, das zu beantworten.

Ein weiterer Blick auf das WAIK
Noch vor über einem Jahr habe ich in einem Artikel das WAIK als eine Reihe leistungsfähiger Tools beschrieben, die Ihnen bei der Bereitstellung von Windows Vista helfen sollen (technetmagazine.com/issues/2007/01/DesktopFiles). Das WAIK ermöglicht jetzt auch die Bereitstellung von Windows Server 2008. Die beiden Betriebssysteme besitzen eine neue Installationsinfrastruktur, und die Tools im WAIK sind größtenteils dafür vorgesehen, sie zu nutzen. Bei Windows-Versionen jedoch, die älter als Windows Vista sind und die entweder eine unbeaufsichtigte Installation oder Sysprep verwenden, müssen Sie speziell für diese Versionen entworfene Tools verwenden. Ich möchte aber einen weiteren Blick auf das WAIK werfen, um die Tools hervorzuheben, die Sie als Hilfe bei der Bereitstellung von Windows XP verwenden können.
Windows PE 2.0 Um eine gemeinsame Basis zu schaffen, schauen wir uns zu Beginn meinen Artikel vom Februar 2008 (technetmagazine.com/issues/2008/02/DesktopFiles) über das duale Starten mit Windows PE 2.0 und Windows XP an. Wenn Windows PE 2.0 für Sie in jenem Szenario funktioniert, funktioniert es auch hier. Die Frage ist, ob Sie Windows XP auf Systemen bereitstellen wollen, die weniger als 512 MB RAM besitzen oder die ACPI (Advanced Configuration and Power Interface) mit Windows Vista nicht unterstützen. Wenn Sie die Frage mit „Ja“ beantworten, benötigen Sie Windows PE 1.6, und Sie müssen überprüfen, ob Sie im Rahmen der Software Assurance darauf Zugriff haben. Nur Windows PE 2.0 und 2.1 sind heute frei verfügbar. Version 1.6 und frühere Versionen erfordern immer noch eine Software Assurance-Mitgliedschaft.
ImageX/WIM ImageX und das Windows Imaging-Format (WIM) wurden dafür entwickelt, dass sie mit allen Windows-Versionen ab Windows 2000 funktionieren, ob auf NTFS- oder FAT-Volumes. Sie können sie also uneingeschränkt verwenden, um Windows XP (oder Windows Server 2003) bereitzustellen.
Windows-Bereitstellungsdienste Die Windows Bereitstellungsdienste (Windows Deployment Services, WDS), die die Remoteinstallationsdienste (Remote Installation Services, RIS) ersetzen, wurden ursprünglich als Out-of-Band-Version (OOB) im WAIK 1.0 geliefert und dann aktualisiert und in Windows Server 2003 SP2 integriert. Jetzt werden sie mit verbesserter Funktionalität in Windows Server 2008 bereitgestellt, lassen sich aber immer noch gut für die Bereitstellung von Windows XP verwenden.
Wenn Sie einen RIS-Server oder einen WDS-Server besitzen, der im Legacymodus ausgeführt wird, trifft dies jedoch für Sie nicht zu. Aber wenn Sie begonnen haben, dazu überzugehen, WDS im gemischten oder einheitlichen Modus auszuführen, sollten Sie WDS als möglichen Teil Ihres Windows XP-Bereitstellungsszenarios in Erwägung ziehen.
Windows System Image Manager (WSIM) WSIM ist wirklich nur für die Bereitstellung von Windows Vista und Windows Server 2008 geeignet. Wenn Sie Windows Server 2003 oder eine frühere Version bereitstellen, hilft Ihnen WSIM nicht viel.

Windows XP- Bereitstellungstools
Windows XP (wie alle Windows-Versionen von Windows NT® 4.0 bis Windows Server 2003) kann sowohl durch eine unattend.txt-Datei als auch durch ein Abbild bereitgestellt werden. Für den Zweck dieses Artikels übergehe ich die unbeaufsichtigte Installation, da sie jetzt wirklich der Vergangenheit angehört. Wenn Sie das WAIK nutzen möchten, insbesondere ImageX, führen Sie eine abbildbasierte Bereitstellung durch. Daher benötigen Sie anstelle einer unattend.txt-Datei eine sysprep.inf-Datei – das Antwortdateiformat für Sysprep.
Wenn ich hier den Begriff „Abbild“ verwende, rede ich nebenbei darüber, wie das Betriebssystemabbild extrahiert wird. Früher hätten Sie höchstwahrscheinlich Ghost, PQDI oder andere Abbilderstellungstools verwendet. Vor ImageX bot Microsoft keinerlei Möglichkeit, das Betriebssystem und die Anwendungen zu extrahieren, für die Sie ein Sysprep erstellt hatten, und sie dann auf einen oder mehrere Zielcomputern zu kopieren.
Zwei wichtige Punkte sind zu beachten, wenn Sie ein Abbild von Windows erstellen:
  • Sie können die Hardwareabstraktionsschicht (Hardware Abstraction Layer, HAL) nicht ändern, außer wenn Sie zwischen Einprozessor- und Mehrprozessorsystemen wechseln. Wie ich in früher veröffentlichten Artikeln erwähnte, können Sie ein Abbild nicht sicher ändern, wenn Sie zwischen ACPI- und Nicht-ACPI-Architekturen wechseln.
  • Massenspeichercontroller können geändert werden. Die Vorstellung, dass dies nicht ginge, ist ein häufiges Missverständnis. Aber zu diesem Zweck müssen Sie Sysprep verwenden, um alle potenziellen Massenspeichercontroller zu installieren, die die Zielcomputer möglicherweise benötigen. Nach der Bereitstellung verwenden Sie Sysprep, um alle außer dem Treiber zu entfernen, der auf dem Zielsystem verbleiben musste. Dazu komme ich gleich.
Unter Beachtung dieser zwei Punkte sollten Sie in der Lage sein, ein Abbild auf einem System vorzubereiten und auf jedem beliebigen Zielsystem laufen zu lassen, das dieselbe oder eine kompatible HAL verwendet.

Das Handwerkszeug
Wenn Sie mit Windows XP in einem abbildbasierten Bereitstellungsszenario arbeiten, benötigen Sie Zugriff auf drei Dinge:
Ref.chm Die Textdateireferenz für die unbeaufsichtigte Installation. Denken Sie daran, dass der optimale Zeitpunkt für die Konfiguration optionaler Komponenten in Windows-Versionen, die älter als Windows Vista sind, vor der Abbilderstellung liegt. Wenn Sie aber optionale Komponenten nach der Installation installieren müssen, können Sie dies durch Ausführen von sysocmgr.exe tun, wie unter support.microsoft.com/kb/222444 dargestellt. Wenn Sie Windows XP Tablet PC Edition bereitstellen, befolgen Sie die Schritte unter go.microsoft.com/fwlink/?LinkId=108589, um ein einzelnes Abbild zu erstellen, das die Tablet PC-Komponenten auf entsprechenden Systemen installiert.
Sysprep Die von Microsoft unterstützte Möglichkeit, bei Systemen eine Datenträgerduplizierung vorzunehmen. Ich sehe immer noch gelegentlich Empfehlungen für Drittanbietertools zum Ändern der Sicherheits-ID (SID). Wie immer empfehle ich, nur Sysprep zu verwenden, da die anderen Tools dazu neigen, kritische Windows-SID-Speicherorte zu übersehen.
Installations-Manager Die schnellste und einfachste Möglichkeit, eine sysprep.inf-Datei zu erstellen. Stellen Sie wie immer sicher, dass Sie die richtige Version zur Hand haben: Im Allgemeinen muss sie mit der von Ihnen bereitgestellten Windows-Version identisch sein (zum Beispiel Windows XP SP2 mit Windows XP SP2-Bereitstellungstools).
Alle diese drei Elemente finden Sie auf der Windows XP-CD. Aktualisierte Versionen sind unter go.microsoft.com/fwlink/?LinkId=107541 verfügbar.
Halten Sie auch tap.exe“ griffbereit. Dieses Dienstprogramm ist in den Windows XP Embedded-Tools enthalten (go.microsoft.com/fwlink/?LinkId=108590), sogar in der kostenlosen Evaluierungsversion. Unter Windows PE gibt tap.exe Informationen zu allen Plug & Play-Geräten zurück, die Windows PE gefunden hat. Am interessantesten ist jedoch, dass es Ihnen die HAL mitteilt, die Windows PE für das Gerät ausgewählt hat (siehe Abbildung 1). Dies ist vor allem deshalb von Bedeutung, weil die Logik, die Windows PE verwendet, um die HAL auszuwählen, dieselbe ist wie die Logik, die ein vollständiges Windows-Setup benutzen würde, um die zu verwendende HAL zu bestimmen. Daher ist tap.exe unter Windows PE eine praktische Möglichkeit festzustellen, welche HAL Windows für ein bestimmtes System empfehlen würde.
Abbildung 1 Das Dienstprogramm „tap.exe“ kann Ihnen die HAL mitteilen, die Windows PE für ein bestimmtes System ausgewählt hat
Abbildung 1 Das Dienstprogramm „tap.exe“ kann Ihnen die HAL mitteilen, die Windows PE für ein bestimmtes System ausgewählt hat

Erstellen des Abbilds
Sie können die folgenden Schritte durchführen, um damit zu beginnen, Ihr eigenes Windows XP-Abbild mithilfe von ImageX bereitzustellen. (Ja, Sie könnten auch ein anderes Abbilderstellungstool verwenden, aber Sie werden bald verstehen, warum ImageX das ideale Tool für diesen speziellen Workflow ist.)
Der erste Schritt besteht darin, alle notwendigen Tools und Komponenten zu sammeln, einschließlich Sysprep, Installations-Manager, ImageX und Windows PE (Version 2.0 oder 1.6, entsprechend Ihren Anforderungen und je nachdem, worauf Sie Zugriff haben. Denken Sie daran, dass Sie bei Verwendung von Version 2.0 mit ImageX bootsect.exe mit dem /nt52-Schalter verwenden müssen, wenn Sie Ihre Partition erstellen, um sicherzustellen, dass Ihr Startcode mit Windows XP kompatibel ist.)
Selbstverständlich benötigen Sie auch einen PC, auf dem Windows XP (beliebige SKU) installiert ist, sowie die aktuellen Updates für Windows und sonstige installierte Software. Im Idealfall sollte dieses System nie zuvor an eine Domäne angeschlossen gewesen sein. Dadurch wird die Wahrscheinlichkeit späterer Domänen-/Netzwerkprobleme verringert. Auf dem System dürfen nur Anwendungen installiert sein, die für die Erstellung von Abbildern sicher sind: nichts, was Computernamen, SID, Domäne oder benutzerbezogene Informationen privat speichert, die Sysprep dann vermisst und nicht ersetzen, wenn die Sicherheits-ID geändert wird. Außerdem muss es die HAL verwenden, von der Sie erwarten, dass Sie sie am häufigsten bereitstellen werden. Auf neuerer Hardware ist dies gewöhnlich die ACPI-Mehrprozessor-HAL, aufgrund der Dominanz von ACPI und Mehrkerncomputern (und vorher Hyperthreading, das ebenfalls eine MP-HAL verwendete).
Konfigurieren Sie jetzt Ihr Windows XP-System so, wie Sie es sich für Ihre Endbenutzer wünschen. Installieren Sie alle Anwendungen, die der Mehrheit der Benutzer zur Verfügung stehen soll (und solche, die nicht unbeaufsichtigt installiert werden können). Installieren oder entfernen Sie in Windows optionale Komponenten, damit das System so eingerichtet wird, wie Sie es sich für Ihre Endbenutzer wünschen. Konfigurieren Sie dann den Desktop. Melden Sie sich als Administrator an, und nehmen Sie am Profil die gewünschten Änderungen vor, einschließlich Desktophintergrund, Bildschirmschoner, Startmenüs und so weiter. Standardmäßig (ab Windows XP SP2) kopiert Sysprep für Sie die Einstellungen vom Administratorkonto zum Standardbenutzerkonto.
Führen Sie als Nächstes den Setup-Manager aus (siehe Abbildung 2), und geben Sie dabei an, dass Sie eine neue Sysprep-unattend-Datei erstellen und die Installation vollständig automatisieren möchten. Beachten Sie, dass Sie beim Ausführen des Setup-Managers einen Product Key eingeben müssen. Wenn Sie keinen zur Hand haben oder das Skript dafür später erstellen wollen (und Sie keinen Volumenlizenzschlüssel besitzen), können Sie den Schlüssel angeben, der in der standardmäßigen unattend.txt-Datei auf der Windows XP- oder Windows Server 2003-CD bereitgestellt wird (dies ermöglicht den Abschluss der Installation, nicht aber die Aktivierung).
Abbildung 2 Erstellen einer Sysprep-Antwortdatei mit dem Setup-Manager
Abbildung 2 Erstellen einer Sysprep-Antwortdatei mit dem Setup-Manager
Sie müssen auch einen Computernamen bereitstellen. Sie möchte diesen möglicherweise später mit SQL oder einem anderen Mechanismus automatisieren. Geben Sie aber vorläufig einfach irgendeinen Wert ein, und ersetzen Sie dann den Computernamen vor dem Ausführen von Sysprep mittels Skripts, nachdem auf dem Computer ein WIM bereitgestellt wurde.
Denken Sie daran, dass, wenn Sie ein Kennwort für das Administratorkonto bereitstellen, dieses nur angewendet wird, wenn das vorhandene Administratorkonto im Abbild keines besitzt. Beachten Sie auch, dass der Abschnitt für den Beitritt zur Domäne Ihnen nicht ermöglicht, die Anmeldeinformationen für den Beitritt zur Domäne zu verschlüsseln. Sie sollten ein Benutzerkonto mit so minimalen Berechtigungen verwenden, wie es zum Einrichten des Computerkontos möglich ist. Schließlich empfehle ich noch, mit der Option „Versionszeichenfolge“ im Setup-Manager die „Version“ des Abbilds nachzuverfolgen, das Sie gerade erstellt haben.
Nehmen Sie jetzt die sysprep.inf-Datei, speichern Sie sie mit sysprep.exe und setupcl.exe im Verzeichnis „C:\Sysprep“, und fügen Sie der .inf-Datei Folgendes hinzu:
[Sysprep]
BuildMassStorageSection = Yes

[SysprepMassStorage]
Führen Sie dann „Sysprep –bmsd“ aus. Dies ändert Ihre sysprep.inf-Datei und fügt alle Massenspeicher-IDs hinzu, die Ihrer Windows-Installation bekannt sind, wie in Abbildung 3 dargestellt. Wenn Sie andere Geräte hinzufügen möchten, können Sie das tun, oder Sie können sie Ihrer Windows-Installation hinzufügen und erneut „Sysprep –bmsd“ ausführen.
Abbildung 3 Hinzufügen von Massenspeicher-IDs zu sysprep.inf
Abbildung 3 Hinzufügen von Massenspeicher-IDs zu sysprep.inf
Kopieren Sie als Nächstes Ihre sysprep.inf-Datei auf eine Freigabe, führen Sie dann „sysprep.exe –factory“ aus, und fahren Sie Ihr System herunter. Starten Sie Windows PE neu, und stellen Sie eine Verbindung zu einer UNC-Freigabe (empfohlen) mithilfe des folgenden Befehls her:
NET USE Y: \\myserver\myshare
/USER:DOMAIN\USER password
Zeichnen Sie jetzt das Abbild mithilfe des folgenden Befehls:
ImageX /capture C: Y:\NewImage.wim
"Factory Mode capture from 4/1/2008"
Fahren Sie dann das System herunter.
Sie haben jetzt ein Abbild, das über den Herstellermodus aktualisiert werden kann. Ich will hier nicht in die Einzelheiten gehen, aber zusammengefasst lässt sich sagen, dass der Herstellermodus der sicherste Modus ist, um Ihre Abbilder aufzubewahren, bis sie bereit sind, für die Bereitstellung verwendet zu werden. Weitere Informationen hierzu finden Sie in der erwähnten Dokumentation zu Windows XP-deploy.cab.
Wenn Sie bereit sind, die Abbilder für die Bereitstellung vorzubereiten – also sobald Sie für eine Implementierung bereit sind –, starten Sie Windows PE, und erstellen Sie mit Diskpart die gewünschten Partitionen. Formatieren Sie die Partitionen mithilfe des Formatierungsbefehls, und verwenden Sie nach Bedarf bootsect.exe, um den Startcode für Systeme anzuwenden, die älter als Windows Vista sind (/nt52). Stellen Sie jetzt mithilfe des folgenden Befehls eine Verbindung zu einer UNC-Freigabe her (oder wechseln Sie zu dem Verzeichnis, in dem sich Ihre Abbilder befinden):
NET USE Y: \\myserver\myshare
/USER:DOMAIN\USER password
Wenden Sie dann das Abbild folgendermaßen an:
ImageX /apply Y:\NewImage.wim C: 1
Starten Sie zum Schluss den Windows-Herstellermodus neu, und nehmen Sie alle notwendigen Aktualisierungen an Ihrem Abbild vor. (Sie müssen dazu eine winbom.ini-Datei verwenden. Weitere Informationen finden Sie unter ref.chm in deploy.cab.) Winbom.ini muss immer die folgenden Zeilen enthalten, damit das Abbild erneut versiegelt wird, um beim nächsten Neustart für die Ausführung der Miniinstallation bereit zu sein:
[FACTORY]
ResealMode = Mini
Wenn Sie fertig sind, fahren Sie den Computer herunter. Wiederholen Sie die früheren Schritte, mit denen Sie Ihr Abbild erfasst hatten, aber ändern Sie jetzt den Aufzeichnungsbefehl in:
ImageX /append C: Y:\NewImage.wim "Resealed
and ready for deployment – captured 4/4/2008"
Mithilfe von „/append“ können Sie viel Speicherplatz sparen. Sie haben gerade Ihren Herstellermodus und erneut versiegelte Abbilder miteinander kombiniert, sodass Sie problemlos zwischen ihnen hin- und herschalten können. Sie können bei dieser Gelegenheit auch mithilfe von „/delete“ jene Abbilder entfernen, die Sie nicht verwenden möchten. Bedenken Sie aber, dass Sie dadurch keinen Speicherplatz sparen. Es wird nur der Verweis zum angegebenen Volumenabbild gelöscht. Sie müssen alle Volumenabbilder exportieren, die Sie behalten möchten, wenn Sie den ungenutzten Speicherplatz aufräumen wollen.
Jetzt können Sie sehen, wie das WAIK Ihnen bei der Bereitstellung aktueller oder auch früherer Windows-Versionen helfen kann, obwohl es in erster Linie für Windows Vista und Windows Server 2008 entwickelt wurde und unterstützt wird. Obwohl Sie eine Kombination aus Windows XP-Tools und den WAIK-Tools verwenden müssen (hauptsächlich ImageX und eventuell Windows PE 2.0), bietet Microsoft jetzt alles, was Sie für die ersten Schritte bei einer beliebigen Windows-Version benötigen.

Wes Miller ist Senior Technical Product Manager bei CoreTrace (www.CoreTrace.com) in Austin, Texas. Zuvor war er bei Winternals Software und als Programmmanager bei Microsoft tätig. Sie können Wes Miller unter technet@getwired.com erreichen.


 Berichte aus der Praxis: MAR&#160;– Eine gro&#223;artige Initiative
Berichte aus der Praxis
MAR – Eine großartige Initiative
Neil Fawcett

Stellen Sie sich vor, Sie haben 5.000 PCs in Ihrem Keller, die instand gesetzt wurden, und haben bereits Kunden für diese Computer. Die Lebensdauer der Hardware wurde verlängert, aber wie steht es mit dem Betriebssystem? Das ist ein ganz anderes Problem. Ist es eine legale Kopie? Hat überhaupt jeder PC ein Betriebssystem? Können Sie es weiterverkaufen?
Das neue kommerzielle MAR-Programm hat für all diese Probleme eine Lösung parat. Oberflächlich gesehen hat dieses neue Schema ein ziemlich einfaches Konzept: Es hilft kommerziellen Unternehmen, auf alten PCs ein legales Betriebssystem zu installieren und die PCs zu verkaufen.
Doch das MAR-Programm hat weitergehende Ziele. Von einem pragmatischen Blickwinkel aus betrachtet, stellt es eine Geschäftsmöglichkeit sowohl für Microsoft als auch für kommerzielle Anbieter instand gesetzter PCs dar. Von einem gesetzlichen Blickwinkel aus betrachtet, hilft es, Softwarepiraterie (sowohl absichtliche als auch unabsichtliche) zu verhindern. Was die Umwelt angeht, verhindert es, dass noch funktionstüchtige Hardware auf Mülldeponien landet. Und schließlich hilft es Unternehmen, besser zu verstehen, wie die Lizenzierung innerhalb von Microsoft funktioniert, vor allem wenn es um PCs geht, die den Besitzer gewechselt haben.
Dieses Programm ist nicht nur für Microsoft und Anbieter instand gesetzter PCs von Vorteil. Es bietet auch für Kunden viele wichtige Vorteile: Sie erhalten einen PC, der einer professionellen Datenbereinigung unterzogen wurde und auf dem eine Originalversion von Windows® XP Home Edition oder Windows XP Professional vorinstalliert wurde. Sie haben Zugriff auf Downloads, Updates und verbesserte Features. Außerdem können Sie auf zukünftige Veröffentlichungen von Windows zugreifen. All das findet auf einem Computer statt, der ansonsten allzu leicht auf einer Mülldeponie hätte landen können und nur ein Problem im Kampf gegen Giftmüll dargestellt hätte.
MAR zielt auf Unternehmen mit einer Instandsetzungskapazität von durchschnittlich 5.000 PCs pro Monat ab. Vor der Zulassung zu diesem Programm müssen sie belegen, dass sie in der Vergangenheit diese Menge an PCs instand gesetzt haben. MAR ist ein weltweites Programm, das den Anbietern instand gesetzter PCs führender Originalgerätehersteller sowie anderen qualifizierten Anbietern instand gesetzter PCs zugänglich ist, deren Hauptsitz sich in den USA oder in Kanada befindet. Redemtech, Techturn und Apto Solutions sind drei der Teilnehmer in diesem Programm.
Die Lizenzierung neuer Softwareprodukte kann manchmal sowohl Verkäufer als auch Käufer verwirren, doch der Markt für instand gesetzte Computer führt zu einer neuen Ebene der Komplexität, wenn es darum geht, was Sie mit einer älteren Windows-Version anstellen dürfen und was nicht. MAR räumt hier auf und schafft für die Anbieter instand gesetzter PCs Klarheit. Es bietet eine Reihe von Installationstools, einschließlich des RPK (Refurbisher Preinstallation Kit), das die Vorinstallation von Windows XP auf ganz unterschiedlichen instand gesetzten PCs erleichtert. Jede Lizenz erhält ein Echtheitszertifikat (Certificate of Authenticity, COA) von Microsoft. Wenn ein PC instand gesetzt wurde und weiterhin sein COA besitzt und das Unternehmen über die ursprünglichen Wiederherstellungsmedien oder das datenträgerbasierte Wiederherstellungsabbild verfügt, ist keine neue Windows-Lizenz notwendig. MAR wurde jedoch entworfen, um den Prozess zu optimieren, falls keine Wiederherstellungsmedien bzw. kein Abbild für kommerzielle Anbieter instand gesetzter PCs vorhanden sind.
Die Wiederverwendung von Computern – durch Spenden, Instandsetzung oder Wiederverkauf – bietet ein enormes Potenzial für einen verstärkten Zugang zur Technologie, besonders für Personen, denen die Technologie bislang kaum zur Verfügung stand. Sie kann zudem helfen, von der Technologiebranche verursachte Umweltprobleme zu begrenzen. In der Tat spielt der Markt für gebrauchte PCs, auch der „sekundäre PC-Markt“ genannt, bereits eine wichtige Rolle in der Ausbreitung der Technologie in vielen sich entwickelnden Volkswirtschaften.
Der Markt für instand gesetzte PCs wächst, und die Prognosen zeigen an, dass den Mülldeponien Millionen von Geräten erspart werden können, wenn Unternehmen sich Alternativen zuwenden. MAR erfüllt nicht nur eine strategische Rolle innerhalb von Microsoft, sondern unterstützt auf entscheidende Weise große Firmen beim Bereitstellen einer preiswerten Hardwarelösung, die anderen große Vorteile bietet. Mit dem zunehmenden Fokus auf die globalen Umweltprobleme ist die ordnungsgemäße Entsorgung von PCs so wichtig wie nie zuvor. Initiativen wie das MAR-Programm tragen dazu bei, dass ein älterer PC instand gesetzt und weiter genutzt wird. So kann jemand davon profitieren, der nach einer preiswerten Technologie sucht, und gebrauchte PCs werden von Giftmülldeponien ferngehalten. Einfach dadurch, dass die Klarstellung der Softwarelizenzierung unterstützt wird, trägt das Programm deutlich dazu bei, dass ein instand gesetzter PC attraktiver wird. Weitere Informationen zum MAR-Programm erhalten Sie unter microsoft.com/oem/mar.

Neil Fawcett trägt seit 20 Jahren als Autor und Herausgeber zu zahlreichen Veröffentlichungen im IT-Sektor bei. Er hat außerdem Vorträge auf Veranstaltungen gehalten und 13 Bücher zu IT-Themen veröffentlicht. Vor seiner Tätigkeit als Autor hat Neil Fawcett im Silicon Valley als Softwareentwickler und Hardwareingenieur gearbeitet.


 Windows Confidential: Gemeinsam genutzte Dateien
Windows Confidential
Gemeinsam genutzte Dateien
Raymond Chen

Haben Sie sich jemals gefragt, woran es liegt, dass Sie beim Deinstallieren eines Programms von Windows® gefragt werden, ob eine Datei gelöscht werden soll, wenn dies andere Anwendungen an der ordnungsgemäßen Ausführung hindern könnte? Die im Bildschirmfoto abgebildete Meldung wird nicht von Windows, sondern vom Deinstallationsprogramm ausgegeben. Die richtige Frage muss daher lauten: „Weshalb zeigt das Anwendungsdeinstallationsprogramm dieses Dialogfeld an?“ Dies ist ein hervorragendes Beispiel dafür, wie einem Benutzer eine Frage gestellt wird, die er nicht beantworten kann. Was hat zu dieser bedauerlichen Lage geführt?
Um Verweiszähler für Dateien zu verwalten, die von mehreren Anwendungen verwendet werden (z. B. die MFC-Laufzeitbibliotheken, die von mehreren nicht miteinander zusammenhängenden Programmen verwendet werden), erstellt das Installationsprogramm einen Eintrag unter dem Registrierungsschlüssel „SharedDLLs“. In diesem Eintrag werden die Datei und ihr Verweiszähler aufgeführt. Wenn für diese Datei bereits ein Eintrag existiert, wird der Verweiszähler erhöht. Wenn der Eintrag noch nicht existiert, wird der Verweiszähler auf 1 gesetzt. Umgekehrt wird bei der Deinstallation des Programms der Verweiszähler verringert, und wenn er 0 erreicht, wird die Datei gelöscht, weil sie von keinem Programm mehr verwendet wird. So lautet jedenfalls die Theorie.
Soll ich sie nun löschen oder nicht?
Soll ich sie nun löschen oder nicht?
Ein ernsthaftes Problem bei diesem Modell besteht darin, dass es davon ausgeht, dass sich jeder an die Regeln hält. Doch die Versuchung zu betrügen ist gewaltig, da die Folgen des Betrugs in der Regel nicht der Betrüger selbst zu spüren bekommt.
Nehmen Sie beispielsweise einmal an, dass es ein Programm gibt, das die MFC-Laufzeitbibliotheken verwendet und dessen Installationsprogramm diese Bibliotheken einfach ins Systemverzeichnis kopiert, ohne den Verweiszähler zu aktualisieren. Wenn dieses Programm später deinstalliert wird, löscht es lediglich die Bibliotheken. Bedenken Sie jetzt, was geschieht, wenn dieses Programm versucht, gemeinsam mit einem Programm zu existieren, das sich an die Regeln hält. Die Ereignisse laufen im Wesentlichen folgendermaßen ab:
  1. Sie installieren das „gute“ Programm: Die Bibliotheken werden installiert, und der Verweiszähler wird auf 1 gesetzt.
  2. Sie installieren das „schlechte“ Programm: Die Bibliotheken werden installiert, aber der Verweiszähler wird nicht geändert.
  3. Sie deinstallieren das „schlechte“ Programm: Die Bibliotheken werden gelöscht.
Dies führt zu dem Ergebnis, dass das „gute“ Programm aufhört zu funktionieren, weil die Bibliotheken nicht mehr vorhanden sind.
Hier ein weiteres Szenario:
  1. Sie installieren das „gute“ Programm: Die Bibliotheken werden installiert, und der Verweiszähler wird auf 1 gesetzt.
  2. Sie installieren das „schlechte“ Programm: Die Bibliotheken werden installiert, aber der Verweiszähler wird nicht geändert.
  3. Sie deinstallieren das „gute“ Programm: Der Verweiszähler wird auf 0 verringert, und die Bibliotheken werden gelöscht.
Dieses Szenario führt zu dem Ergebnis, dass das „schlechte“ Programm aufhört zu funktionieren.
Die Personen, die das „gute“ Programm geschrieben haben, haben sich Folgendes gedacht: „Wir können zwar nicht verhindern, dass uns das „schlechte“ Programm Ärger macht, aber wir können wenigstens versuchen, dem „schlechten“ Programm keinen Ärger zu machen“. Deshalb halten sie an, wenn sie dabei sind, eine Datei zu löschen, und lassen die Warnmeldung anzeigen: „Ich habe vor, eine Datei zu löschen. Ist das in Ordnung?“ Wenn auf dem Rechner ein „schlechtes“ Programm vorhanden ist, das diese Datei verwendet, bekommt dieses „schlechte“ Programm jetzt Ärger. Wenn Sie ein solches „schlechtes“ Programm besitzen, sollten Sie an dieser Stelle auf „Nicht löschen“ klicken. Gut, das ist nicht der genaue Wortlaut der Warnmeldung, aber Sie wissen, von welchem Dialogfeld ich rede. Selbst der legendäre Jeffrey Richter hat 1996 in einem Artikel des Microsoft Systems Journal diese Vorgehensweise empfohlen.
Leider wird durch diesen Ansatz dem Benutzer eine Frage gestellt, die er einfach nicht beantworten kann.
Natürlich müssten alle Kontrollfanatiker, die verlangen, dass Windows ihnen die Möglichkeit bietet, einfach alles außer Kraft setzen zu können, angesichts dieses Dialogfelds in tosenden Beifall ausbrechen. Die Deinstallationsprogramme der Welt bieten Ihnen Datei für Datei Kontrolle über den Deinstallationsprozess. Seien Sie also vorsichtig, worum Sie bitten – Ihr Wunsch könnte in Erfüllung gehen.

Raymond Chen befasst sich auf seiner Website „The Old New Thing“ und in seinem gleichnamigen Buch mit der Geschichte von Windows und mit der Win32-Programmierung. Er fragt sich, ob er es noch miterleben wird, dass die Kernfusion genutzt wird.