SQL Server, Internet Information Server und die ASP.NET-Engine bieten alle solide Sicherheitsmodelle, die gut zusammenarbeiten. Um die Sicherheit von Benutzerdaten und Anwendungen zu gewährleisten, legt Microsoft außerdem die Standardeinstellungen für jeden Dienst auf relativ niedrige Werte fest.
Die Herausforderung für die meisten Entwickler besteht darin, mithilfe von SQL Server, IIS und ASP.NET das richtige Maß an Vertrauen zwischen Anwendungen und Daten festzulegen, ohne Sicherheitslücken zu hinterlassen, die von anderen leicht kompromittiert werden können. Da drei Arten von Diensten beteiligt sind (SQL Server, IIS und ASP.NET), müssen drei wichtige Schritte unternommen werden, um die Sicherheit der Lösung zu gewährleisten. In diesem Abschnitt wird eine der gebräuchlicheren (und zuverlässigeren) Methoden zum Festlegen angemessener Berechtigungen und Vertrauensstufen für Webanwendungen erläutert.
Definieren Sie ein benutzerdefiniertes IIS-Benutzerkonto für DotNetKB
Der sicherste Weg, Ihre Webanwendung zu sichern, besteht darin, einen benutzerdefinierten Benutzer mit eingeschränkten Berechtigungen zu definieren und dann IIS so zu konfigurieren, dass es beim Ausführen Ihrer Webanwendung als benutzerdefinierter Benutzer ausgeführt wird. Dies ist relativ einfach zu implementieren und stellt sicher, dass jeder Besucher Ihrer Webanwendung nur die Berechtigungen hat, die Sie ihm wünschen.
Der erste Schritt besteht darin, einen neuen Windows-Benutzer zu generieren (in diesem Beispiel DotNetKB genannt), ein sicheres Passwort dafür festzulegen und ihn dann der Windows-Gastgruppe (Gast-Windows-Gruppe) hinzuzufügen. Stellen Sie außerdem sicher, dass das Kennwort niemals abläuft und die Kontrollkästchen „Benutzer kann Kennwort nicht ändern“ aktiviert sind. Dadurch wird ein Benutzer mit eingeschränkten Berechtigungen generiert, den Sie als Identität verwenden können, wenn Sie Ihre Webanwendung in IIS ausführen (siehe Abbildung 1).
Rufen Sie dann den Internet Information Server Administrator an und wählen Sie die Webanwendung aus, die diese Seiten hostet. In diesem Beispiel können Sie die Webanwendung (DotNetKB_WebSite) auswählen, die die zuvor generierte Testseite hostet. Klicken Sie mit der rechten Maustaste auf die Webanwendung in der Baumansicht und wählen Sie im Kontextmenü Eigenschaften... aus. Wählen Sie dann „Verzeichnissicherheit“ und klicken Sie im Abschnitt „Anonyme Zugriffs- und Authentifizierungssteuerung“ des Dialogfelds auf die Schaltfläche „Bearbeiten“. Geben Sie abschließend einen benutzerdefinierten Benutzernamen (DotNetKB) ein, deaktivieren Sie das Kontrollkästchen IIS darf das Kennwort steuern und geben Sie ein Kennwort für das benutzerdefinierte Benutzerkonto ein. Nachdem Sie alle diese Arbeiten abgeschlossen haben, klicken Sie auf die Schaltfläche „OK“, um diese Änderungen in der IIS-Konfigurationsdatenbank zu speichern (siehe Abbildung 2).
[Seite ausschneiden]
Zu diesem Zeitpunkt wird IIS unter einem benutzerdefinierten Konto mit eingeschränkten Berechtigungen ausgeführt. Jeder Besucher, der die Webseiten Ihrer Anwendung besucht, wird als dieser benutzerdefinierte Benutzer ausgeführt und verfügt nur über Authentifizierungsberechtigungen für diesen benutzerdefinierten Benutzer.
Autorisieren Sie das DotNetKB-Benutzerkonto für den Zugriff auf SQL Server
Anschließend müssen Sie dem benutzerdefinierten Benutzer die entsprechenden Berechtigungen für den Zugriff auf die Datenbank (DotNetKB) erteilen. Dazu können Sie Microsoft SQL Server Enterprise Manager verwenden oder ein benutzerdefiniertes Skript schreiben, um einen solchen Benutzer zu erstellen und ihm Zugriff auf bestimmte Objekte zu gewähren. In diesem Artikel wird beschrieben, wie Sie dies mit SQL Server Enterprise Manager tun.
Hinweis: Obwohl Visual Studio .NET 2003 über viele leistungsstarke integrierte Funktionen verfügt, die mit SQL Server kompatibel sind, ist eine einfache Verwaltung von Benutzern und Benutzerberechtigungen in Visual Studio .NET 2003 nicht möglich. In großen Organisationen und Teams werden diese erweiterten Aufgaben typischerweise von Datenbankadministratoren ausgeführt. Daher können Sie nach dem Starten von SQL Server Enterprise Manager die folgenden Schritte ausführen, um der Datenbank einen benutzerdefinierten Benutzer (DotNetKB) hinzuzufügen.
·Erweitern Sie in der Baumansicht auf der linken Seite den Knoten, um die DotNetKB-Datenbank anzuzeigen. Auf meinem Computer ist die Baumansicht wie folgt aufgebaut: Console Root SQL Server Group (LOCAL) (Windows NT) Databases DotNetKB.
·Klicken Sie dann mit der rechten Maustaste auf den Knoten Benutzer unter der Datenbank und wählen Sie Neuer Datenbankbenutzer... (Neuer Datenbankbenutzer...). Wenn das Dialogfeld „Datenbankbenutzereigenschaften – Neuer Benutzer“ angezeigt wird, wählen Sie (<Neu>) aus dem Dropdown-Feld „Anmeldename“ aus.
·Wenn das Dialogfeld „SQL Server-Anmeldeeigenschaften – Neue Anmeldung“ angezeigt wird, wählen Sie die Registerkarte „Allgemein“ und geben Sie „DotNetKB“ in das Eingabefeld „Name“ ein. Stellen Sie sicher, dass das Optionsfeld „Windows-Authentifizierung“ ausgewählt ist, und wählen Sie im Dropdown-Feld „Domäne“ den Namen des Computers aus, auf dem sich das benutzerdefinierte Benutzerkonto befindet. Wählen Sie dann DotNetKB aus dem Dropdown-Feld Datenbank aus.
·Wählen Sie nun die Registerkarte „Datenbanken“, suchen Sie in der Liste oben im Dialogfeld nach der Datenbank „DotNetKB“ und wählen Sie sie aus. Stellen Sie dann sicher, dass die öffentliche Rolle in der Liste unten im Dialogfeld ausgewählt ist. Klicken Sie abschließend unten im Dialogfeld auf die Schaltfläche „OK“, um Ihre Änderungen zu speichern.
Anschließend müssen Sie allen gespeicherten Prozeduren und benutzerdefinierten Funktionen in der DotNetKB-Datenbank Ausführungsberechtigungen hinzufügen. Dazu müssen Sie lediglich der öffentlichen Rolle Berechtigungen erteilen. Sie können DotNetKB-Benutzern Berechtigungen erteilen, was es bei zukünftigen Anmeldungen (wenn diese Benutzer Zugriff auf DotNetKB erhalten) einfacher macht, gespeicherte Prozeduren auszuführen, ohne dass für jeden Benutzer neue Berechtigungen hinzugefügt werden müssen.
Im Folgenden sind die Schritte zum Erteilen von Ausführungsberechtigungen für gespeicherte Prozeduren und Funktionen in der DotNetKB-Datenbank aufgeführt:
· Markieren Sie den Knoten „Benutzer“ unter der DotNetKB-Datenbank in der Baumansicht, um eine Liste der Benutzer für diese Datenbank anzuzeigen. Suchen Sie den DotNetKB-Benutzer und doppelklicken Sie darauf, um das Dialogfeld „Datenbankbenutzereigenschaften“ zu öffnen.
· Klicken Sie bei hervorgehobener (ausgewählter) öffentlicher Rolle auf die Schaltfläche „Eigenschaften...“, um das Dialogfeld „Eigenschaften der Datenbankrolle“ zu öffnen. Klicken Sie dann auf die Schaltfläche „Berechtigungen...“, um eine Liste der Datenbankobjekte und Berechtigungseinstellungen anzuzeigen.
Wenn die öffentliche Rolle in der Dropdown-Liste „Datenbankrolle“ oben im Dialogfeld ausgewählt ist, suchen Sie alle für diese Datenbank definierten gespeicherten Prozeduren und benutzerdefinierten Funktionen (möglicherweise müssen Sie das Dialogfeld erweitern, um die vollständigen Namen anzuzeigen) und stellen Sie sicher, dass dies der Fall ist Aktivieren Sie das Kontrollkästchen AUSFÜHREN neben jedem Element. Möglicherweise stellen Sie fest, dass bei einigen Systemobjekten andere Kontrollkästchen aktiviert sind. Bitte ändern Sie diese Optionen nicht.
·Klicken Sie abschließend nach dem Festlegen aller AUSFÜHREN-Berechtigungen auf die Schaltfläche „OK“, um die Änderungen zu speichern und das Dialogfeld zu schließen. Klicken Sie nacheinander auf die Schaltfläche „OK“, bis alle Dialogfelder geschlossen sind.
Zu diesem Zeitpunkt haben Sie einen benutzerdefinierten Benutzer für IIS erstellt und die entsprechenden Berechtigungen des Benutzers in SQL Server festgelegt. Jetzt müssen Sie eine Konfigurationsänderung im ASP.NET-Webprojekt vornehmen, um sicherzustellen, dass ASP.NET für alle Aufrufe an SQL Server dasselbe Benutzerkonto verwendet.
Richten Sie Ihre ASP.NET-Anwendung so ein, dass sie sich als DotNetKB-Benutzer ausgibt
Der letzte Schritt beim Generieren einer soliden und zuverlässigen Konfiguration für eine ASP.NET-Webanwendung, die unter IIS ausgeführt wird, besteht darin, die ASP.NET-Webanwendung so zu konfigurieren, dass sie eine Windows-Benutzer-ID von IIS akzeptieren und für den Zugriff auf andere Betriebssystemressourcen verwendet werden kann . Dazu müssen Sie lediglich eine Codezeile in die Root-Datei web.config eingeben.
Die geänderte web.config-Datei sieht folgendermaßen aus:
<Konfiguration>
<system.web>
...andere Elemente...
<identity impersonate="true"/> <!-- IIS-Benutzer-ID vorausgesetzt-->
...andere Elemente...
</system.web>
</configuration>
Beachten Sie, dass Sie einfach das Element hinzufügen und das Mock-Attribut auf true setzen. Sie müssen kein Benutzerkonto oder Passwort eingeben, da diese Informationen von IIS bereitgestellt werden. Das heißt, selbst wenn andere Ihre Konfigurationsdatei lesen können, können sie nicht feststellen, welche Identitätsanmeldeinformationen zum Ausführen Ihrer Webanwendung verwendet werden.
Zu diesem Zeitpunkt haben Sie einen benutzerdefinierten Benutzer erstellt und die entsprechenden Berechtigungen für den Zugriff auf SQL Server und IIS festgelegt.
Zu diesem Zeitpunkt wird IIS unter einem benutzerdefinierten Konto mit eingeschränkten Berechtigungen ausgeführt. Jeder Besucher, der die Webseiten Ihrer Anwendung besucht, wird als dieser benutzerdefinierte Benutzer ausgeführt und verfügt nur über Authentifizierungsberechtigungen für diesen benutzerdefinierten Benutzer.
Autorisieren Sie das DotNetKB-Benutzerkonto für den Zugriff auf SQL Server
Anschließend müssen Sie dem benutzerdefinierten Benutzer die entsprechenden Berechtigungen für den Zugriff auf die Datenbank (DotNetKB) erteilen. Dazu können Sie Microsoft SQL Server Enterprise Manager verwenden oder ein benutzerdefiniertes Skript schreiben, um einen solchen Benutzer zu erstellen und ihm Zugriff auf bestimmte Objekte zu gewähren. In diesem Artikel wird beschrieben, wie Sie dies mit SQL Server Enterprise Manager tun.
Hinweis: Obwohl Visual Studio .NET 2003 über viele leistungsstarke integrierte Funktionen verfügt, die mit SQL Server kompatibel sind, ist eine einfache Verwaltung von Benutzern und Benutzerberechtigungen in Visual Studio .NET 2003 nicht möglich. In großen Organisationen und Teams werden diese erweiterten Aufgaben typischerweise von Datenbankadministratoren ausgeführt. Daher können Sie nach dem Starten von SQL Server Enterprise Manager die folgenden Schritte ausführen, um der Datenbank einen benutzerdefinierten Benutzer (DotNetKB) hinzuzufügen.
·Erweitern Sie in der Baumansicht auf der linken Seite den Knoten, um die DotNetKB-Datenbank anzuzeigen. Auf meinem Computer ist die Baumansicht wie folgt aufgebaut: Console Root SQL Server Group (LOCAL) (Windows NT) Databases DotNetKB.
·Klicken Sie dann mit der rechten Maustaste auf den Knoten Benutzer unter der Datenbank und wählen Sie Neuer Datenbankbenutzer... (Neuer Datenbankbenutzer...). Wenn das Dialogfeld „Datenbankbenutzereigenschaften – Neuer Benutzer“ angezeigt wird, wählen Sie (<Neu>) aus dem Dropdown-Feld „Anmeldename“ aus.
·Wenn das Dialogfeld „SQL Server-Anmeldeeigenschaften – Neue Anmeldung“ angezeigt wird, wählen Sie die Registerkarte „Allgemein“ und geben Sie „DotNetKB“ in das Eingabefeld „Name“ ein. Stellen Sie sicher, dass das Optionsfeld „Windows-Authentifizierung“ ausgewählt ist, und wählen Sie im Dropdown-Feld „Domäne“ den Namen des Computers aus, auf dem sich das benutzerdefinierte Benutzerkonto befindet. Wählen Sie dann DotNetKB aus dem Dropdown-Feld Datenbank aus.
·Wählen Sie nun die Registerkarte „Datenbanken“, suchen Sie in der Liste oben im Dialogfeld nach der Datenbank „DotNetKB“ und wählen Sie sie aus. Stellen Sie dann sicher, dass die öffentliche Rolle in der Liste unten im Dialogfeld ausgewählt ist. Klicken Sie abschließend unten im Dialogfeld auf die Schaltfläche „OK“, um Ihre Änderungen zu speichern.
Anschließend müssen Sie allen gespeicherten Prozeduren und benutzerdefinierten Funktionen in der DotNetKB-Datenbank Ausführungsberechtigungen hinzufügen. Dazu müssen Sie lediglich der öffentlichen Rolle Berechtigungen erteilen. Sie können DotNetKB-Benutzern Berechtigungen erteilen, was es bei zukünftigen Anmeldungen (wenn diese Benutzer Zugriff auf DotNetKB erhalten) einfacher macht, gespeicherte Prozeduren auszuführen, ohne dass für jeden Benutzer neue Berechtigungen hinzugefügt werden müssen.
Im Folgenden sind die Schritte zum Erteilen von Ausführungsberechtigungen für gespeicherte Prozeduren und Funktionen in der DotNetKB-Datenbank aufgeführt:
· Markieren Sie den Knoten „Benutzer“ unter der DotNetKB-Datenbank in der Baumansicht, um eine Liste der Benutzer für diese Datenbank anzuzeigen. Suchen Sie den DotNetKB-Benutzer und doppelklicken Sie darauf, um das Dialogfeld „Datenbankbenutzereigenschaften“ zu öffnen.
· Klicken Sie bei hervorgehobener (ausgewählter) öffentlicher Rolle auf die Schaltfläche „Eigenschaften...“, um das Dialogfeld „Eigenschaften der Datenbankrolle“ zu öffnen. Klicken Sie dann auf die Schaltfläche „Berechtigungen...“, um eine Liste der Datenbankobjekte und Berechtigungseinstellungen anzuzeigen.
Wenn die öffentliche Rolle in der Dropdown-Liste „Datenbankrolle“ oben im Dialogfeld ausgewählt ist, suchen Sie alle für diese Datenbank definierten gespeicherten Prozeduren und benutzerdefinierten Funktionen (möglicherweise müssen Sie das Dialogfeld erweitern, um die vollständigen Namen anzuzeigen) und stellen Sie sicher, dass dies der Fall ist Aktivieren Sie das Kontrollkästchen AUSFÜHREN neben jedem Element. Möglicherweise stellen Sie fest, dass bei einigen Systemobjekten andere Kontrollkästchen aktiviert sind. Bitte ändern Sie diese Optionen nicht.
·Klicken Sie abschließend nach dem Festlegen aller AUSFÜHREN-Berechtigungen auf die Schaltfläche „OK“, um die Änderungen zu speichern und das Dialogfeld zu schließen. Klicken Sie nacheinander auf die Schaltfläche „OK“, bis alle Dialogfelder geschlossen sind.
Zu diesem Zeitpunkt haben Sie einen benutzerdefinierten Benutzer für IIS erstellt und die entsprechenden Berechtigungen des Benutzers in SQL Server festgelegt. Jetzt müssen Sie eine Konfigurationsänderung im ASP.NET-Webprojekt vornehmen, um sicherzustellen, dass ASP.NET für alle Aufrufe an SQL Server dasselbe Benutzerkonto verwendet.
Richten Sie Ihre ASP.NET-Anwendung so ein, dass sie sich als DotNetKB-Benutzer ausgibt
Der letzte Schritt beim Generieren einer soliden und zuverlässigen Konfiguration für eine ASP.NET-Webanwendung, die unter IIS ausgeführt wird, besteht darin, die ASP.NET-Webanwendung so zu konfigurieren, dass sie eine Windows-Benutzer-ID von IIS akzeptieren und für den Zugriff auf andere Betriebssystemressourcen verwendet werden kann . Dazu müssen Sie lediglich eine Codezeile in die Root-Datei web.config eingeben.
Die geänderte web.config-Datei sieht folgendermaßen aus:
<Konfiguration>
<system.web>
...andere Elemente...
<identity impersonate="true"/> <!-- IIS-Benutzer-ID vorausgesetzt-->
...andere Elemente...
</system.web>
</configuration>
Beachten Sie, dass Sie einfach das Element hinzufügen und das Mock-Attribut auf true setzen. Sie müssen kein Benutzerkonto oder Passwort eingeben, da diese Informationen von IIS bereitgestellt werden. Das heißt, selbst wenn andere Ihre Konfigurationsdatei lesen können, können sie nicht feststellen, welche Identitätsanmeldeinformationen zum Ausführen Ihrer Webanwendung verwendet werden.
Zu diesem Zeitpunkt haben Sie einen benutzerdefinierten Benutzer erstellt und die entsprechenden Berechtigungen für den Zugriff auf SQL Server und IIS festgelegt.