Share via


Erstellen des Mitgliedschaftsschemas unter SQL Server (VB)

von Scott Mitchell

Hinweis

Seit diesem Artikel wurden die ASP.NET-Mitgliedschaftsanbieter von ASP.NET Identity abgelöst. Es wird dringend empfohlen, Apps so zu aktualisieren, dass sie die ASP.NET Identity Platform anstelle der Mitgliedschaftsanbieter verwenden, die zum Zeitpunkt der Veröffentlichung dieses Artikels vorgestellt wurden. ASP.NET Identity hat eine Reihe von Vorteilen gegenüber dem ASP.NET Mitgliedschaftssystem, darunter :

  • Bessere Leistung
  • Verbesserte Erweiterbarkeit und Testbarkeit
  • Unterstützung für OAuth, OpenID Connect und zweistufige Authentifizierung
  • Unterstützung für anspruchsbasierte Identitäten
  • Bessere Interoperabilität mit ASP.Net Core

Code herunterladen oder PDF herunterladen

Dieses Tutorial beginnt mit den Techniken zum Hinzufügen des erforderlichen Schemas zur Datenbank, um sqlMembershipProvider zu verwenden. Anschließend untersuchen wir die wichtigsten Tabellen im Schema und besprechen deren Zweck und Wichtigkeit. Dieses Tutorial endet mit einer Übersicht darüber, wie Sie einer ASP.NET Anwendung mitteilen, welchen Anbieter das Mitgliedschaftsframework verwenden soll.

Einführung

In den vorherigen beiden Tutorials wurde die Verwendung der Formularauthentifizierung zum Identifizieren von Websitebesuchern untersucht. Das Framework für die Formularauthentifizierung erleichtert Es Entwicklern, einen Benutzer auf einer Website anzumelden und ihn über Seitenbesuche durch die Verwendung von Authentifizierungstickets zu speichern. Die FormsAuthentication -Klasse enthält Methoden zum Generieren des Tickets und zum Hinzufügen zu den Cookies des Besuchers. Der FormsAuthenticationModule überprüft alle eingehenden Anforderungen und erstellt und ordnet der aktuellen Anforderung ein GenericPrincipal - und ein FormsIdentity -Objekt für personen mit einem gültigen Authentifizierungsticket zu. Die Formularauthentifizierung ist lediglich ein Mechanismus zum Gewähren eines Authentifizierungstickets für einen Besucher bei der Anmeldung und, bei nachfolgenden Anforderungen, zum Analysieren dieses Tickets, um die Identität des Benutzers zu ermitteln. Damit eine Webanwendung Benutzerkonten unterstützt, müssen wir weiterhin einen Benutzerspeicher implementieren und Funktionen hinzufügen, um Anmeldeinformationen zu überprüfen, neue Benutzer zu registrieren und die Vielzahl anderer Aufgaben im Zusammenhang mit Benutzerkonten zu verwenden.

Vor ASP.NET 2.0 waren Entwickler bei der Implementierung all dieser Aufgaben im Zusammenhang mit benutzerkontenbezogenen Aufgaben am Haken. Glücklicherweise erkannte das ASP.NET Team diesen Mangel und führte das Mitgliedschaftsframework mit ASP.NET 2.0 ein. Das Mitgliedschaftsframework besteht aus einer Reihe von Klassen im .NET Framework, die eine programmgesteuerte Benutzeroberfläche zum Ausführen von wichtigsten Aufgaben im Zusammenhang mit Benutzerkonten bereitstellen. Dieses Framework basiert auf dem Anbietermodell, mit dem Entwickler eine angepasste Implementierung in eine standardisierte API einbinden können.

Wie im Tutorial "Security Basics and ASP.NET Support" erläutert, ist die .NET Framework mit zwei integrierten Mitgliedschaftsanbietern enthalten: ActiveDirectoryMembershipProvider und SqlMembershipProvider. Wie der Name schon sagt, verwendet eine SqlMembershipProvider Microsoft SQL Server-Datenbank als Benutzerspeicher. Um diesen Anbieter in einer Anwendung verwenden zu können, müssen wir dem Anbieter mitteilen, welche Datenbank als Speicher verwendet werden soll. Wie Sie sich vorstellen können, erwartet die SqlMembershipProvider Benutzerspeicherdatenbank bestimmte Datenbanktabellen, Sichten und gespeicherte Prozeduren. Wir müssen dieses erwartete Schema der ausgewählten Datenbank hinzufügen.

Dieses Tutorial beginnt mit den Techniken zum Hinzufügen des erforderlichen Schemas zur Datenbank, um die SqlMembershipProviderzu verwenden. Anschließend untersuchen wir die wichtigsten Tabellen im Schema und besprechen deren Zweck und Wichtigkeit. Dieses Tutorial endet mit einer Übersicht darüber, wie Sie einer ASP.NET Anwendung mitteilen, welchen Anbieter das Mitgliedschaftsframework verwenden soll.

Jetzt geht‘s los!

Schritt 1: Entscheiden, wo der Benutzerspeicher platziert werden soll

Die Daten einer ASP.NET Anwendung werden häufig in einer Reihe von Tabellen in einer Datenbank gespeichert. Bei der Implementierung des SqlMembershipProvider Datenbankschemas müssen wir entscheiden, ob das Mitgliedschaftsschema in derselben Datenbank wie die Anwendungsdaten oder in einer alternativen Datenbank platziert werden soll.

Ich empfehle aus den folgenden Gründen, das Mitgliedschaftsschema in derselben Datenbank wie die Anwendungsdaten zu suchen:

Das Entkoppeln des Benutzerspeichers und der Anwendungsdaten in separate Datenbanken ist nur sinnvoll, wenn Sie über mehrere Anwendungen verfügen, die jeweils separate Datenbanken verwenden, aber einen gemeinsamen Benutzerspeicher verwenden müssen.

Erstellen einer Datenbank

Die Anwendung, die wir seit dem zweiten Tutorial erstellt haben, hat noch keine Datenbank benötigt. Wir benötigen jedoch jetzt eine für den Benutzerspeicher. Erstellen sie eins, und fügen Sie ihr dann das vom SqlMembershipProvider Anbieter erforderliche Schema hinzu (siehe Schritt 2).

Hinweis

In dieser Tutorialreihe verwenden wir eine Microsoft SQL Server 2005 Express Edition-Datenbank, um die Anwendungstabellen und das SqlMembershipProvider Schema zu speichern. Diese Entscheidung wurde aus zwei Gründen getroffen: Erstens ist die Express Edition aufgrund ihrer Kosten - kostenlos - die am besten zugängliche Version von SQL Server 2005; zweitens können SQL Server 2005 Express Edition Datenbanken direkt in der Webanwendung App_Data platziert werden. ordner, sodass es ein cinch ist, die Datenbank und Webanwendung in einer ZIP-Datei zusammenzupacken und ohne spezielle Setupanweisungen oder Konfigurationsoptionen erneut bereitzustellen. Wenn Sie es vorziehen, eine Nicht-Express Edition-Version von SQL Server zu verwenden, fühlen Sie sich frei. Die Schritte sind nahezu identisch. Das SqlMembershipProvider Schema funktioniert mit jeder Version von Microsoft SQL Server 2000 und höher.

Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den App_Data Ordner, und wählen Sie Neues Element hinzufügen aus. (Wenn in Ihrem Projekt kein Ordner angezeigt wirdApp_Data, klicken Sie mit der rechten Maustaste auf das Projekt in Projektmappen-Explorer, wählen Sie ASP.NET Ordner hinzufügen aus, und wählen Sie .App_Data) Wählen Sie im Dialogfeld Neues Element hinzufügen aus, um eine neue SQL-Datenbank namens SecurityTutorials.mdfhinzuzufügen. In diesem Tutorial fügen wir das SqlMembershipProvider Schema zu dieser Datenbank hinzu. In den nachfolgenden Tutorials erstellen wir zusätzliche Tabellen, um unsere Anwendungsdaten zu erfassen.

Hinzufügen einer neuen SQL-Datenbank namens SecurityTutorials.mdf-Datenbank zum ordner

Abbildung 1: Hinzufügen einer neuen SQL-Datenbank benannten SecurityTutorials.mdfApp_Data Datenbank zum Ordner (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Wenn Sie dem App_Data Ordner eine Datenbank hinzufügen, wird sie automatisch in die Ansicht Datenbank Explorer eingeschlossen. (In der Nicht-Express Edition-Version von Visual Studio wird die Datenbank Explorer als Server Explorer bezeichnet.) Wechseln Sie zum Explorer Datenbank, und erweitern Sie die gerade hinzugefügte SecurityTutorials Datenbank. Wenn die Datenbank-Explorer auf dem Bildschirm nicht angezeigt wird, wechseln Sie zum Menü Ansicht, und wählen Sie Datenbank Explorer aus, oder drücken Sie STRG+ALT+S. Wie Abbildung 2 zeigt, ist die SecurityTutorials Datenbank leer. Sie enthält keine Tabellen, keine Sichten und keine gespeicherten Prozeduren.

Die SecurityTutorials-Datenbank ist derzeit leer.

Abbildung 2: Die SecurityTutorials Datenbank ist derzeit leer (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)

Schritt 2: Hinzufügen desSqlMembershipProviderSchemas zur Datenbank

Die SqlMembershipProvider erfordert, dass ein bestimmter Satz von Tabellen, Sichten und gespeicherten Prozeduren in der Benutzerspeicherdatenbank installiert werden muss. Diese erforderlichen Datenbankobjekte können mit dem aspnet_regsql.exe Tool hinzugefügt werden. Diese Datei befindet sich im %WINDIR%\Microsoft.Net\Framework\v2.0.50727\ Ordner.

Hinweis

Das aspnet_regsql.exe Tool bietet sowohl Befehlszeilenfunktionen als auch eine grafische Benutzeroberfläche. Die grafische Benutzeroberfläche ist benutzerfreundlicher und wird in diesem Tutorial untersucht. Die Befehlszeilenschnittstelle ist nützlich, wenn das Hinzufügen des SqlMembershipProvider Schemas automatisiert werden muss, z. B. in Buildskripts oder automatisierten Testszenarien.

Das aspnet_regsql.exe Tool wird verwendet, um einer angegebenen SQL Server-Datenbank ASP.NET-Anwendungsdienste hinzuzufügen oder zu entfernen. Die ASP.NET-Anwendungsdienste umfassen die Schemas für und SqlMembershipProviderSqlRoleProvidersowie die Schemas für die SQL-basierten Anbieter für andere ASP.NET 2.0-Frameworks. Wir müssen dem aspnet_regsql.exe Tool zwei Informationsbits bereitstellen:

  • Ob Wir Anwendungsdienste hinzufügen oder entfernen möchten, und
  • Die Datenbank, aus der das Anwendungsdienstschema hinzugefügt oder entfernt werden soll

Bei der Aufforderung zur Verwendung der Datenbank fordert das aspnet_regsql.exe Tool uns auf, den Namen des Servers, auf dem sich die Datenbank befindet, die Sicherheitsanmeldeinformationen für die Verbindung mit der Datenbank und den Datenbanknamen anzugeben. Wenn Sie die Nicht-Express Edition von SQL Server verwenden, sollten Sie diese Informationen bereits kennen, da es sich um dieselben Informationen handelt, die Sie über eine Verbindungszeichenfolge bereitstellen müssen, wenn Sie mit der Datenbank über eine ASP.NET Webseite arbeiten. Die Ermittlung des Server- und Datenbanknamens bei Verwendung einer SQL Server 2005 Express Edition Datenbank im App_Data Ordner ist jedoch etwas komplizierter.

Im folgenden Abschnitt wird eine einfache Möglichkeit zum Angeben des Server- und Datenbanknamens für eine SQL Server 2005 Express Edition Datenbank im App_Data Ordner untersucht. Wenn Sie nicht SQL Server 2005 Express Edition können Sie mit dem Abschnitt Installieren der Anwendungsdienste fortfahren.

Ermitteln des Server- und Datenbanknamens für eine SQL Server 2005 Express Edition-Datenbank imApp_DataOrdner

Um das aspnet_regsql.exe Tool verwenden zu können, müssen wir die Server- und Datenbanknamen kennen. Der Servername lautet localhost\InstanceName. Höchstwahrscheinlich ist SQLExpressinstanceName . Wenn Sie SQL Server 2005 Express Edition jedoch manuell installiert haben (d. h., Sie haben es bei der Installation von Visual Studio nicht automatisch installiert), ist es möglich, dass Sie einen anderen instance Namen ausgewählt haben.

Der Datenbankname ist etwas schwieriger zu bestimmen. Datenbanken im Ordner verfügen in der App_Data Regel über einen Datenbanknamen, der einen global eindeutigen Bezeichner zusammen mit dem Pfad zur Datenbankdatei enthält. Wir müssen diesen Datenbanknamen ermitteln, um das Anwendungsdienstschema über aspnet_regsql.exehinzuzufügen.

Die einfachste Möglichkeit, den Datenbanknamen zu ermitteln, besteht darin, ihn über SQL Server Management Studio zu untersuchen. SQL Server Management Studio bietet eine grafische Benutzeroberfläche zum Verwalten SQL Server 2005-Datenbanken, ist aber nicht mit der Express Edition von SQL Server 2005 enthalten. Die gute Nachricht ist, dass Sie die kostenlose Express Edition von SQL Server Management Studio herunterladen können.

Hinweis

Wenn Sie auch eine Nicht-Express Edition-Version von SQL Server 2005 auf Ihrem Desktop installiert haben, ist wahrscheinlich die Vollversion von Management Studio installiert. Sie können die Vollversion verwenden, um den Datenbanknamen zu bestimmen, indem Sie die gleichen Schritte ausführen, die unten für die Express Edition beschrieben sind.

Schließen Sie zunächst Visual Studio, um sicherzustellen, dass von Visual Studio für die Datenbankdatei verhängte Sperren geschlossen werden. Starten Sie als Nächstes SQL Server Management Studio, und stellen Sie für SQL Server 2005 Express Edition eine Verbindung mit der localhost\InstanceName Datenbank her. Wie bereits erwähnt, besteht die Wahrscheinlichkeit, dass der instance Name lautetSQLExpress. Wählen Sie für die Option Authentifizierung die Option Windows-Authentifizierung aus.

Herstellen einer Verbindung mit der SQL Server 2005 Express Edition-Instanz

Abbildung 3: Herstellen einer Verbindung mit der SQL Server 2005 Express Edition-Instanz (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Nach dem Herstellen einer Verbindung mit dem SQL Server 2005 Express Edition instance zeigt Management Studio Ordner für die Datenbanken, die Sicherheitseinstellungen, die Serverobjekte usw. an. Wenn Sie die Registerkarte Datenbanken erweitern, sehen Sie, dass die SecurityTutorials.mdf Datenbank nicht im Datenbank-instance registriert ist. Die Datenbank muss zuerst angefügt werden.

Klicken Sie mit der rechten Maustaste auf den Ordner Datenbanken, und wählen Sie im Kontextmenü Anfügen aus. Dadurch wird das Dialogfeld Datenbanken anfügen angezeigt. Klicken Sie hier auf die Schaltfläche Hinzufügen, navigieren Sie zur SecurityTutorials.mdf Datenbank, und klicken Sie auf OK. Abbildung 4 zeigt das Dialogfeld Datenbanken anfügen, nachdem die SecurityTutorials.mdf Datenbank ausgewählt wurde. Abbildung 5 zeigt die Objekt-Explorer von Management Studio, nachdem die Datenbank erfolgreich angefügt wurde.

Anfügen der SecurityTutorials.mdf-Datenbank

Abbildung 4: Anfügen der SecurityTutorials.mdf Datenbank (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Die SecurityTutorials.mdf-Datenbank wird im Ordner

Abbildung 5: Die SecurityTutorials.mdf Datenbank wird im Ordner "Datenbanken" angezeigt (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Wie Abbildung 5 zeigt, weist die SecurityTutorials.mdf Datenbank einen eher abstruse Namen auf. Ändern Wir es in einen einprägsameren (und einfacher zu gebenden) Namen. Klicken Sie mit der rechten Maustaste auf die Datenbank, wählen Sie im Kontextmenü Umbenennen aus, und benennen Sie sie SecurityTutorialsDatabaseum. Dadurch wird der Dateiname nicht geändert, nur der Name, den die Datenbank verwendet, um sich SQL Server zu identifizieren.

Umbenennen der Datenbank in SecurityTutorialsDatabase

Abbildung 6: Umbenennen der Datenbank in SecurityTutorialsDatabase(Klicken Sie hier, um das bild in voller Größe anzuzeigen)

An diesem Punkt kennen wir die Server- und Datenbanknamen für die SecurityTutorials.mdf Datenbankdatei: localhost\InstanceName bzw SecurityTutorialsDatabase. . Wir sind jetzt bereit, die Anwendungsdienste über das aspnet_regsql.exe Tool zu installieren.

Installieren der Application Services

Um das aspnet_regsql.exe Tool zu starten, wechseln Sie zum Startmenü, und wählen Sie Ausführen aus. Geben Sie %WINDIR%\Microsoft.Net\Framework\v2.0.50727\aspnet_regsql.exe in das Textfeld ein, und klicken Sie auf OK. Alternativ können Sie windows Explorer verwenden, um einen Drilldown zum entsprechenden Ordner zu erstellen und auf die aspnet_regsql.exe Datei zu doppelklicken. Bei beiden Ansätzen werden die gleichen Ergebnisse erzielt.

Wenn Sie das aspnet_regsql.exe Tool ohne Befehlszeilenargumente ausführen, wird die grafische Benutzeroberfläche des ASP.NET SQL Server Setup-Assistenten gestartet. Der Assistent erleichtert das Hinzufügen oder Entfernen der ASP.NET-Anwendungsdienste für eine angegebene Datenbank. Der erste Bildschirm des Assistenten in Abbildung 7 beschreibt den Zweck des Tools.

Verwenden Des ASP.NET SQL Server Setup-Assistenten zum Hinzufügen des Mitgliedschaftsschemas

Abbildung 7: Verwenden des ASP.NET SQL Server Setup-Assistenten zum Hinzufügen des Mitgliedschaftsschemas (Klicken, um das vollständige Bild anzuzeigen)

Im zweiten Schritt des Assistenten werden wir gefragt, ob wir die Anwendungsdienste hinzufügen oder entfernen möchten. Da wir die für SqlMembershipProviderdie erforderlichen Tabellen, Ansichten und gespeicherten Prozeduren hinzufügen möchten, wählen Sie die Option SQL Server für Anwendungsdienste konfigurieren aus. Wenn Sie dieses Schema später aus Ihrer Datenbank entfernen möchten, führen Sie diesen Assistenten erneut aus, wählen Sie aber stattdessen die Option Anwendungsdiensteinformationen aus einer vorhandenen Datenbank entfernen aus.

Wählen Sie die Option SQL Server für Application Services konfigurieren aus.

Abbildung 8: Wählen Sie die Option SQL Server für Application Services konfigurieren aus (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Im dritten Schritt werden die Datenbankinformationen zur Eingabe des Servernamens, der Authentifizierungsinformationen und des Datenbanknamens aufgefordert. Wenn Sie dieses Tutorial ausgeführt und die SecurityTutorials.mdf Datenbank hinzugefügt App_Datahaben, sie an localhost\InstanceNameangefügt und in umbenannt SecurityTutorialsDatabasehaben, verwenden Sie die folgenden Werte:

  • Server: localhost\InstanceName
  • Windows-Authentifizierung
  • Datenbank: SecurityTutorialsDatabase

Geben Sie die Datenbankinformationen ein.

Abbildung 9: Eingeben der Datenbankinformationen (Klicken Sie hier, um das bild in voller Größe anzuzeigen)

Klicken Sie nach der Eingabe der Datenbankinformationen auf Weiter. Im letzten Schritt werden die schritte zusammengefasst. Klicken Sie auf Weiter, um die Anwendungsdienste zu installieren, und klicken Sie dann auf Fertig stellen, um den Assistenten abzuschließen.

Hinweis

Wenn Sie Management Studio verwendet haben, um die Datenbank anzufügen und die Datenbankdatei umzubenennen, müssen Sie die Datenbank trennen und Management Studio schließen, bevor Sie Visual Studio erneut öffnen. Klicken Sie zum Trennen der Datenbank mit der SecurityTutorialsDatabase rechten Maustaste auf den Datenbanknamen, und wählen Sie im Menü Aufgaben die Option Trennen aus.

Kehren Sie nach Abschluss des Assistenten zu Visual Studio zurück, und navigieren Sie zum Explorer Datenbank. Erweitern Sie den Ordner Tabellen. Es sollte eine Reihe von Tabellen angezeigt werden, deren Namen mit dem Präfix aspnet_beginnen. Ebenso finden Sie eine Vielzahl von Ansichten und gespeicherten Prozeduren unter den Ordnern Ansichten und gespeicherte Prozeduren. Diese Datenbankobjekte bilden das Anwendungsdienstschema. Die mitgliedschafts- und rollenspezifischen Datenbankobjekte werden in Schritt 3 untersucht.

Der Datenbank wurden eine Vielzahl von Tabellen, Ansichten und gespeicherten Prozeduren hinzugefügt.

Abbildung 10: Eine Vielzahl von Tabellen, Ansichten und gespeicherten Prozeduren wurden der Datenbank hinzugefügt (Klicken Sie, um das bild in voller Größe anzuzeigen)

Hinweis

Die aspnet_regsql.exe grafische Benutzeroberfläche des Tools installiert das gesamte Anwendungsdienstschema. Beim Ausführen aspnet_regsql.exe über die Befehlszeile können Sie jedoch angeben, welche bestimmten Anwendungsdienstekomponenten installiert (oder entfernt werden sollen). Wenn Sie daher nur die Tabellen, Ansichten und gespeicherten Prozeduren hinzufügen möchten, die für die SqlMembershipProvider Anbieter und SqlRoleProvider erforderlich sind, führen Sie aspnet_regsql.exe über die Befehlszeile aus. Alternativ können Sie die entsprechende Teilmenge von T-SQL-Erstellungsskripts manuell ausführen, die von aspnet_regsql.exeverwendet werden. Diese Skripts befinden sich im WINDIR%\Microsoft.Net\Framework\v2.0.50727\ Ordner mit Namen wie InstallCommon.sql, , InstallRoles.sqlInstallMembership.sql, InstallProfile.sql, InstallSqlState.sql, usw.

An diesem Punkt haben wir die Datenbankobjekte erstellt, die SqlMembershipProvidervon benötigt werden. Allerdings müssen wir das Mitgliedschaftsframework dennoch anweisen, dass es die SqlMembershipProvider (im Gegensatz zum Beispiel) ActiveDirectoryMembershipProviderverwenden soll und dass die SqlMembershipProvider Datenbank SecurityTutorials verwenden soll. In Schritt 4 erfahren Sie, wie Sie angeben, welcher Anbieter verwendet werden soll und wie Sie die Einstellungen des ausgewählten Anbieters anpassen. Zunächst werfen wir jedoch einen genaueren Blick auf die soeben erstellten Datenbankobjekte.

Schritt 3: Ein Blick auf die Kerntabellen des Schemas

Wenn Sie mit den Frameworks "Mitgliedschaft" und "Rollen" in einer ASP.NET-Anwendung arbeiten, werden die Implementierungsdetails vom Anbieter gekapselt. In zukünftigen Tutorials werden wir über die .NET Framework und Roles Klassen mit diesen Frameworks Membership zusammenarbeiten. Bei der Verwendung dieser allgemeinen APIs müssen wir uns nicht mit den Details auf niedriger Ebene befassen, z. B. welche Abfragen ausgeführt werden oder welche Tabellen von und SqlMembershipProviderSqlRoleProvidergeändert werden.

Vor diesem Hintergrund könnten wir sicher die Frameworks Mitgliedschaft und Rollen verwenden, ohne das in Schritt 2 erstellte Datenbankschema untersucht zu haben. Beim Erstellen der Tabellen zum Speichern von Anwendungsdaten müssen wir jedoch möglicherweise Entitäten erstellen, die sich auf Benutzer oder Rollen beziehen. Beim Einrichten von Fremdschlüsseleinschränkungen zwischen den Anwendungsdatentabellen und den in Schritt 2 erstellten Tabellen ist es hilfreich, sich mit den SqlMembershipProvider Schemas und SqlRoleProvider den Schemas vertraut zu machen. Darüber hinaus müssen wir in bestimmten seltenen Fällen möglicherweise eine Schnittstelle mit den Benutzer- und Rollenspeichern direkt auf Datenbankebene (anstelle der Membership Klassen oder Roles ) herstellen.

Partitionieren des Benutzerspeichers in Anwendungen

Die Mitgliedschafts- und Rollenframeworks sind so konzipiert, dass ein einzelner Benutzer und rollenspeicher für viele verschiedene Anwendungen freigegeben werden kann. Eine ASP.NET Anwendung, die das Membership- oder Roles-Framework verwendet, muss angeben, welche Anwendungspartition verwendet werden soll. Kurz gesagt, mehrere Webanwendungen können denselben Benutzer- und Rollenspeicher verwenden. Abbildung 11 zeigt Benutzer- und Rollenspeicher, die in drei Anwendungen unterteilt sind: HRSite, CustomerSite und SalesSite. Diese drei Webanwendungen verfügen jeweils über eigene eindeutige Benutzer und Rollen, speichern aber alle ihre Benutzerkonto- und Rolleninformationen physisch in den gleichen Datenbanktabellen.

Benutzerkonten können über mehrere Anwendungen partitioniert werden.

Abbildung 11: Benutzerkonten können über mehrere Anwendungen partitioniert werden (Klicken Sie hier, um ein vollständiges Bild anzuzeigen)

Die aspnet_Applications Tabelle definiert diese Partitionen. Jede Anwendung, die die Datenbank zum Speichern von Benutzerkontoinformationen verwendet, wird durch eine Zeile in dieser Tabelle dargestellt. Die aspnet_Applications Tabelle enthält vier Spalten: ApplicationId, ApplicationName, LoweredApplicationNameund Description.ApplicationId ist vom Typ uniqueidentifier und ist der Primärschlüssel der Tabelle. ApplicationName Stellt einen eindeutigen menschlichen Anzeigenamen für jede Anwendung bereit.

Die anderen Mitgliedschafts- und Rollentabellen sind mit dem ApplicationId Feld in aspnet_Applicationsverknüpft. Beispielsweise enthält die aspnet_Users Tabelle, die einen Datensatz für jedes Benutzerkonto enthält, ein ApplicationId Fremdschlüsselfeld; ditto für die aspnet_Roles Tabelle. Das ApplicationId Feld in diesen Tabellen gibt die Anwendungspartition an, zu der das Benutzerkonto oder die Rolle gehört.

Speichern von Benutzerkontoinformationen

Benutzerkontoinformationen sind in zwei Tabellen enthalten: aspnet_Users und aspnet_Membership. Die aspnet_Users Tabelle enthält Felder, die die wesentlichen Benutzerkontoinformationen enthalten. Die drei relevantesten Spalten sind:

  • UserId
  • UserName
  • ApplicationId

UserId ist der Primärschlüssel (und vom Typ uniqueidentifier). UserName ist vom Typ nvarchar(256) und bildet zusammen mit dem Kennwort die Anmeldeinformationen des Benutzers. (Das Kennwort eines Benutzers wird in der aspnet_Membership Tabelle gespeichert.) ApplicationId verknüpft das Benutzerkonto mit einer bestimmten Anwendung in aspnet_Applications. Es gibt eine zusammengesetzte UNIQUE Einschränkung für die UserName Spalten und ApplicationId . Dadurch wird sichergestellt, dass in einer bestimmten Anwendung jeder UserName eindeutig ist, aber derselbe UserName in verschiedenen Anwendungen verwendet werden kann.

Die aspnet_Membership Tabelle enthält zusätzliche Benutzerkontoinformationen, z. B. das Kennwort, die E-Mail-Adresse des Benutzers, das Datum und die Uhrzeit der letzten Anmeldung usw. Es besteht eine 1:1-Korrespondenz zwischen Datensätzen in den aspnet_Users Tabellen und aspnet_Membership . Diese Beziehung wird durch das UserId Feld in aspnet_Membershipsichergestellt, das als Primärschlüssel der Tabelle dient. Enthält wie die aspnet_Users Tabelle ein ApplicationId Feld, aspnet_Membership das diese Informationen mit einer bestimmten Anwendungspartition verknüpft.

Schützen von Kennwörtern

Kennwortinformationen werden in der aspnet_Membership Tabelle gespeichert. Die SqlMembershipProvider ermöglicht das Speichern von Kennwörtern in der Datenbank mithilfe einer der folgenden drei Techniken:

  • Löschen : Das Kennwort wird als Nur-Text in der Datenbank gespeichert. Ich rate dringend davon ab, diese Option zu verwenden. Wenn die Datenbank kompromittiert wird - sei es durch einen Hacker, der eine Hintertür findet oder ein verärgerter Mitarbeiter, der Datenbankzugriff hat - sind die Anmeldeinformationen jedes einzelnen Benutzers für die Nutzung da.
  • Hashed : Kennwörter werden mithilfe eines unidirektionalen Hashalgorithmus und eines zufällig generierten Salzwerts gehasht. Dieser Hashwert (zusammen mit dem Salt) wird in der Datenbank gespeichert.
  • Verschlüsselt : Eine verschlüsselte Version des Kennworts wird in der Datenbank gespeichert.

Das verwendete Kennwortspeicherverfahren hängt von den SqlMembershipProvider in Web.configangegebenen Einstellungen ab. Wir untersuchen das Anpassen der SqlMembershipProvider Einstellungen in Schritt 4. Das Standardverhalten besteht darin, den Hash des Kennworts zu speichern.

Die Spalten, die für das Speichern des Kennworts verantwortlich sind Password, sind , PasswordFormatund PasswordSalt. PasswordFormat ist ein Feld vom Typ int , dessen Wert die Zum Speichern des Kennworts verwendete Technik angibt: 0 für Clear; 1 für Hashed; 2 für Encrypted. PasswordSalt eine zufällig generierte Zeichenfolge zugewiesen wird, unabhängig von der verwendeten Kennwortspeichermethode; der Wert von PasswordSalt wird nur verwendet, wenn der Hash des Kennworts berechnet wird. Schließlich enthält die Password Spalte die tatsächlichen Kennwortdaten, sei es das Klartextkennwort, der Hash des Kennworts oder das verschlüsselte Kennwort.

Tabelle 1 veranschaulicht, wie diese drei Spalten für die verschiedenen Speichertechniken beim Speichern des Kennworts MySecret! .

Speichertechnik<_o3a_p /> Kennwort<_o3a_p /> PasswordFormat<_o3a_p /> PasswordSalt<_o3a_p />
Clear MySecret! 0 tTnkPlesqissc2y2SMEygA.
Hash 2oXm6sZHWbTHFgjgkGQsc2Ec9ZM= 1 wFgjUfhdUFOCKQiI61vtiQ.
Verschlüsselt 62RZgDvhxykkqsMchZ0Yly7HS6onhpaoCYaRxV8g0F4CW56OXUU3e7Inza9j9BKp 2 LSRzhGS/aa/oqAXGLHJNBw.

Tabelle 1: Beispielwerte für die Password-Related Felder beim Speichern des Kennworts MySecret!

Hinweis

Der bestimmte Verschlüsselungs- oder Hashalgorithmus, der von verwendet wird, SqlMembershipProvider wird durch die Einstellungen im <machineKey> -Element bestimmt.

Speichern von Rollen und Rollenzuordnungen

Mit dem Rollenframework können Entwickler eine Reihe von Rollen definieren und angeben, welche Benutzer zu welchen Rollen gehören. Diese Informationen werden in der Datenbank über zwei Tabellen erfasst: aspnet_Roles und aspnet_UsersInRoles. Jeder Datensatz in der aspnet_Roles Tabelle stellt eine Rolle für eine bestimmte Anwendung dar. Ähnlich wie die aspnet_Users Tabelle enthält die Tabelle drei Spalten, die aspnet_Roles für unsere Diskussion relevant sind:

  • RoleId
  • RoleName
  • ApplicationId

RoleId ist der Primärschlüssel (und vom Typ uniqueidentifier). RoleName ist vom Typ nvarchar(256). Und ApplicationId verknüpft das Benutzerkonto mit einer bestimmten Anwendung in aspnet_Applications. Es gibt eine zusammengesetzte UNIQUE Einschränkung für die RoleName Spalten und ApplicationId , die sicherstellen, dass in einer bestimmten Anwendung jeder Rollenname eindeutig ist.

Die aspnet_UsersInRoles Tabelle dient als Zuordnung zwischen Benutzern und Rollen. Es gibt nur zwei Spalten - UserId und RoleId - und zusammen bilden sie einen zusammengesetzten Primärschlüssel.

Schritt 4: Angeben des Anbieters und Anpassen seiner Einstellungen

Allen Frameworks, die das Anbietermodell unterstützen ( z. B. die Frameworks für Mitgliedschaft und Rollen ) fehlen die Implementierungsdetails selbst und delegieren diese Verantwortung stattdessen an eine Anbieterklasse. Im Fall des Membership-Frameworks definiert die Membership -Klasse die API zum Verwalten von Benutzerkonten, interagiert jedoch nicht direkt mit einem Benutzerspeicher. Stattdessen übergeben die Methoden der Membership -Klasse die Anforderung an den konfigurierten Anbieter. Wir verwenden den SqlMembershipProvider. Wenn wir eine der Methoden in der Membership -Klasse aufrufen, wie weiß das Membership-Framework, den Aufruf an das SqlMembershipProviderzu delegieren?

Die Membership -Klasse verfügt über eine Providers -Eigenschaft , die einen Verweis auf alle registrierten Anbieterklassen enthält, die für die Verwendung durch das Membership-Framework verfügbar sind. Jeder registrierte Anbieter verfügt über einen zugeordneten Namen und Typ. Der Name bietet eine benutzerfreundliche Möglichkeit, auf einen bestimmten Anbieter in der Providers Auflistung zu verweisen, während der Typ die Anbieterklasse identifiziert. Darüber hinaus kann jeder registrierte Anbieter Konfigurationseinstellungen enthalten. Zu den Konfigurationseinstellungen für das Mitgliedschaftsframework gehören PasswordFormat u. a. und requiresUniqueEmail. Eine vollständige Liste der Konfigurationseinstellungen, die von SqlMembershipProviderverwendet werden, finden Sie in Tabelle 2.

Der Providers Inhalt der Eigenschaft wird über die Konfigurationseinstellungen der Webanwendung angegeben. Standardmäßig verfügen alle Webanwendungen über einen Anbieter vom AspNetSqlMembershipProvider Typ SqlMembershipProvider. Dieser Standardmitgliedschaftsanbieter ist in machine.config registriert (befindet sich unter %WINDIR%\Microsoft.Net\Framework\v2.0.50727\CONFIG):

<membership> 
 <providers>
 <add name="AspNetSqlMembershipProvider"
 type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 
 connectionStringName="LocalSqlServer"
 enablePasswordRetrieval="false"
 enablePasswordReset="true"
 requiresQuestionAndAnswer="true"
 applicationName="/"
 requiresUniqueEmail="false"
 passwordFormat="Hashed"
 maxInvalidPasswordAttempts="5"
 minRequiredPasswordLength="7"
 minRequiredNonalphanumericCharacters="1"
 passwordAttemptWindow="10"
 passwordStrengthRegularExpression=""/>
 </providers> 
</membership>

Wie das Markup oben zeigt, definiert das <membership> -Element die Konfigurationseinstellungen für das Membership-Framework, während das <providers> untergeordnete Element die registrierten Anbieter angibt. Anbieter können mithilfe der <add> -Elemente oder <remove> hinzugefügt oder entfernt werden. Verwenden Sie das <clear> -Element, um alle derzeit registrierten Anbieter zu entfernen. Wie das markup oben zeigt, machine.config fügt einen Anbieter mit dem Namen vom AspNetSqlMembershipProvider Typ SqlMembershipProviderhinzu.

Zusätzlich zu den name Attributen und type enthält das <add> Element Attribute, die die Werte für verschiedene Konfigurationseinstellungen definieren. Tabelle 2 enthält die verfügbaren SqlMembershipProviderspezifischen Konfigurationseinstellungen zusammen mit einer Beschreibung der einzelnen Einstellungen.

Hinweis

Alle in Tabelle 2 notierten Standardwerte beziehen sich auf die in der -Klasse definierten Standardwerte SqlMembershipProvider . Beachten Sie, dass nicht alle Konfigurationseinstellungen den Standardwerten AspNetSqlMembershipProvider der SqlMembershipProvider Klasse entsprechen. Wenn sie beispielsweise in einem Mitgliedschaftsanbieter nicht angegeben ist, wird die requiresUniqueEmail Einstellung standardmäßig auf true festgelegt. Dieser Standardwert wird jedoch außer Kraft gesetzt, AspNetSqlMembershipProvider indem explizit der Wert angegeben wird false.

Einstellung<_o3a_p /> Beschreibung<_o3a_p />
ApplicationName Denken Sie daran, dass das Mitgliedschaftsframework die Partitionierung eines einzelnen Benutzerspeichers über mehrere Anwendungen ermöglicht. Diese Einstellung gibt den Namen der Anwendungspartition an, die vom Mitgliedschaftsanbieter verwendet wird. Wenn dieser Wert nicht explizit angegeben wird, wird er zur Laufzeit auf den Wert des virtuellen Stammpfads der Anwendung festgelegt.
commandTimeout Gibt den Wert des SQL-Befehlstimeouts (in Sekunden) an. Der Standardwert ist 30.
connectionStringName Der Name des Verbindungszeichenfolge im Element, das zum Herstellen einer <connectionStrings> Verbindung mit der Benutzerspeicherdatenbank verwendet werden soll. Dieser Wert ist erforderlich.
description Stellt eine menschenfreundliche Beschreibung des registrierten Anbieters bereit.
enablePasswordRetrieval Gibt an, ob Benutzer ihr vergessenes Kennwort abrufen dürfen. Standardwert: false.
enablePasswordReset Gibt an, ob Benutzer ihr Kennwort zurücksetzen dürfen. Wird standardmäßig auf true festgelegt.
maxInvalidPasswordAttempts Die maximale Anzahl von fehlgeschlagenen Anmeldeversuchen, die für einen bestimmten Benutzer während des angegebenen passwordAttemptWindow Zeitraums auftreten können, bevor der Benutzer gesperrt wird. Der Standardwert ist 5.
minRequiredNonalphanumericCharacters Die Mindestanzahl nicht alphanumerischer Zeichen, die im Kennwort eines Benutzers angezeigt werden müssen. Dieser Wert muss zwischen 0 und 128 sein. der Standardwert ist 1.
minRequiredPasswordLength Die Mindestanzahl von Zeichen, die in einem Kennwort erforderlich sind. Dieser Wert muss zwischen 0 und 128 sein. der Standardwert ist 7.
name Der Name des registrierten Anbieters. Dieser Wert ist erforderlich.
passwordAttemptWindow Die Anzahl der Minuten, in denen fehlgeschlagene Anmeldeversuche nachverfolgt werden. Wenn ein Benutzer in diesem angegebenen Fenster ungültige Anmeldeinformationen maxInvalidPasswordAttempts angibt, wird er gesperrt. Der Standardwert ist 10.
PasswordFormat Das Kennwortspeicherformat: Clear, Hashedoder Encrypted. Der Standardwert lautet Hashed.
passwordStrengthRegularExpression Sofern angegeben, wird dieser reguläre Ausdruck verwendet, um die Stärke des ausgewählten Kennworts des Benutzers beim Erstellen eines neuen Kontos oder beim Ändern des Kennworts auszuwerten. Der Standardwert ist eine leere Zeichenfolge.
requiresQuestionAndAnswer Gibt an, ob ein Benutzer beim Abrufen oder Zurücksetzen seines Kennworts seine Sicherheitsfrage beantworten muss. Standardwert: true.
requiresUniqueEmail Gibt an, ob alle Benutzerkonten in einer bestimmten Anwendungspartition über eine eindeutige E-Mail-Adresse verfügen müssen. Standardwert: true.
type Gibt den Typ des Anbieters an. Dieser Wert ist erforderlich.

Tabelle 2: Mitgliedschafts- und SqlMembershipProvider Konfigurationseinstellungen

Zusätzlich zu AspNetSqlMembershipProviderkönnen andere Mitgliedschaftsanbieter anwendungsbezogen registriert werden, indem der Datei ein ähnliches Markup Web.config hinzugefügt wird.

Hinweis

Das Rollenframework funktioniert auf die gleiche Weise: Es gibt einen standardmäßig registrierten Rollenanbieter in machine.config , und die registrierten Anbieter können anwendungsbezogen in Web.configangepasst werden. In einem zukünftigen Tutorial werden wir das Rollenframework und dessen Konfigurationsmarkup ausführlich untersuchen.

Anpassen derSqlMembershipProviderEinstellungen

Der Standardwert SqlMembershipProvider (AspNetSqlMembershipProvider) hat sein connectionStringName Attribut auf LocalSqlServerfestgelegt. Wie der AspNetSqlMembershipProvider Anbieter wird auch der Verbindungszeichenfolge Name LocalSqlServer in machine.configdefiniert.

<connectionStrings> 
 <add name="LocalSqlServer" 
 connectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" 
 providerName="System.Data.SqlClient"/> 
</connectionStrings>

Wie Sie sehen, definiert diese Verbindungszeichenfolge eine SQL 2005 Express Edition-Datenbank unter |DataDirectory|aspnetdb.mdf. Die Zeichenfolge |DataDirectory| wird zur Laufzeit übersetzt, um auf das ~/App_Data/ Verzeichnis zu verweisen, sodass der Datenbankpfad |DataDirectory|aspnetdb.mdf übersetzt in ~/App_Data/aspnet.mdf.

Wenn wir in der Datei unserer Anwendung keine Informationen zum Mitgliedschaftsanbieter Web.config angegeben haben, verwendet die Anwendung den standardmäßig registrierten Mitgliedschaftsanbieter. AspNetSqlMembershipProvider Wenn die ~/App_Data/aspnet.mdf Datenbank nicht vorhanden ist, erstellt die ASP.NET Runtime sie automatisch und fügt das Anwendungsdienstschema hinzu. Wir möchten jedoch nicht die aspnet.mdf Datenbank verwenden, sondern die Datenbank verwenden, die SecurityTutorials.mdf wir in Schritt 2 erstellt haben. Diese Änderung kann auf zwei Arten durchgeführt werden:

  • Geben Sie einen Wert für dieLocalSqlServerVerbindungszeichenfolge Name inWeb.configein. Durch Überschreiben des LocalSqlServer Verbindungszeichenfolge Name-Werts in Web.configkönnen wir den standardmäßig registrierten Mitgliedschaftsanbieter (AspNetSqlMembershipProvider) verwenden und ordnungsgemäß mit der SecurityTutorials.mdf Datenbank arbeiten lassen. Dieser Ansatz ist in Ordnung, wenn Sie mit den von AspNetSqlMembershipProviderangegebenen Konfigurationseinstellungen zufrieden sind. Weitere Informationen zu diesem Verfahren finden Sie im Blogbeitrag von Scott Guthrie, Configuring ASP.NET 2.0 Application Services to Use SQL Server 2000 or SQL Server 2005.
  • Hinzufügen eines neuen registrierten Anbieters vom TypSqlMembershipProviderund konfigurierenconnectionStringNamefestlegen, um auf dieSecurityTutorials.mdfDatenbank. Dieser Ansatz ist in Szenarien nützlich, in denen Sie zusätzlich zur Datenbank-Verbindungszeichenfolge andere Konfigurationseigenschaften anpassen möchten. In meinen eigenen Projekten verwende ich diesen Ansatz aufgrund seiner Flexibilität und Lesbarkeit immer.

Bevor wir einen neuen registrierten Anbieter hinzufügen können, der auf die SecurityTutorials.mdf Datenbank verweist, müssen wir zunächst einen entsprechenden Verbindungszeichenfolge Wert im <connectionStrings> Abschnitt in Web.confighinzufügen. Das folgende Markup fügt eine neue Verbindungszeichenfolge namens hinzuSecurityTutorialsConnectionString, die auf die SQL Server 2005 Express Edition-Datenbank SecurityTutorials.mdf im App_Data Ordner verweist.

<configuration>
 <connectionStrings>
 <add name="SecurityTutorialsConnectionString" 
 connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\SecurityTutorials.mdf;Integrated Security=True;User Instance=True" 
 providerName="System.Data.SqlClient"/>
 </connectionStrings> 
 <system.web>
 ... Configuration markup removed for brevity ...  </system.web>
</configuration>

Hinweis

Wenn Sie eine alternative Datenbankdatei verwenden, aktualisieren Sie die Verbindungszeichenfolge nach Bedarf. Weitere Informationen zum Erstellen der richtigen Verbindungszeichenfolge finden Sie unter ConnectionStrings.com.

Fügen Sie als Nächstes das folgende Mitgliedschaftskonfigurationsmarkup zur Web.config Datei hinzu. Dieses Markup registriert einen neuen Anbieter mit dem Namen SecurityTutorialsSqlMembershipProvider.

<configuration>
 <connectionStrings>
 <add name="SecurityTutorialsConnectionString" 
 connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\SecurityTutorials.mdf;Integrated Security=True;User Instance=True" 
 providerName="System.Data.SqlClient"/>
 </connectionStrings> 
 <system.web>
 <membership defaultProvider="SecurityTutorialsSqlMembershipProvider">
 <providers>
 <!-- Add a customized SqlMembershipProvider --> 
 <add name="SecurityTutorialsSqlMembershipProvider" 
 type="System.Web.Security.SqlMembershipProvider"
 connectionStringName="SecurityTutorialsConnectionString"
 enablePasswordRetrieval="false"
 enablePasswordReset="true"
 requiresQuestionAndAnswer="true"
 applicationName="SecurityTutorials"
 requiresUniqueEmail="true"
 passwordFormat="Hashed"
 maxInvalidPasswordAttempts="5"
 minRequiredPasswordLength="7"
 minRequiredNonalphanumericCharacters="1"
 passwordAttemptWindow="10"
 passwordStrengthRegularExpression=""/>
 </providers>
 </membership>
 ... Configuration markup removed for brevity ... 
 </system.web>
</configuration>

Neben der Registrierung des SecurityTutorialsSqlMembershipProvider Anbieters definiert das obige Markup den SecurityTutorialsSqlMembershipProvider als Standardanbieter (über das defaultProvider -Attribut im <membership> -Element). Denken Sie daran, dass das Mitgliedschaftsframework mehrere registrierte Anbieter haben kann. Da AspNetSqlMembershipProvider als erster Anbieter in machine.configregistriert ist, dient er als Standardanbieter, sofern nicht anders angegeben.

Derzeit hat unsere Anwendung zwei registrierte Anbieter: AspNetSqlMembershipProvider und SecurityTutorialsSqlMembershipProvider. Vor der Registrierung des SecurityTutorialsSqlMembershipProvider Anbieters hätten wir jedoch alle zuvor registrierten Anbieter löschen können, indem wir direkt vor unserem <add> Element ein <clear /> Element hinzufügen. Dadurch würde der AspNetSqlMembershipProvider aus der Liste der registrierten Anbieter gelöscht, was bedeutet, dass der SecurityTutorialsSqlMembershipProvider einzige registrierte Mitgliedschaftsanbieter wäre. Wenn wir diesen Ansatz verwendet haben, müssten wir den SecurityTutorialsSqlMembershipProvider nicht als Standardanbieter markieren, da es sich um den einzigen registrierten Mitgliedschaftsanbieter handelt. Weitere Informationen zur Verwendung <clear />finden Sie unter Verwenden beim <clear /> Hinzufügen von Anbietern.

Beachten Sie, dass die SecurityTutorialsSqlMembershipProviderEinstellung "sconnectionStringName" auf den gerade hinzugefügten SecurityTutorialsConnectionString Verbindungszeichenfolge Namen verweist und dass ihre applicationName Einstellung auf einen Wert von SecurityTutorials festgelegt wurde. Darüber hinaus wurde die requiresUniqueEmail Einstellung auf truefestgelegt. Alle anderen Konfigurationsoptionen sind mit den Werten in AspNetSqlMembershipProvideridentisch. Wenn Sie möchten, können Sie hier änderungen an der Konfiguration vornehmen. Beispielsweise können Sie die Kennwortstärke erhöhen, indem Sie zwei nicht alphanumerische Zeichen anstelle eines benötigen, oder indem Sie die Kennwortlänge auf acht Zeichen anstelle von sieben Zeichen erhöhen.

Hinweis

Denken Sie daran, dass das Mitgliedschaftsframework die Partitionierung eines einzelnen Benutzerspeichers über mehrere Anwendungen ermöglicht. Die Einstellung des Mitgliedschaftsanbieters applicationName gibt an, welche Anwendung der Anbieter beim Arbeiten mit dem Benutzerspeicher verwendet. Es ist wichtig, dass Sie explizit einen Wert für die applicationName Konfigurationseinstellung festlegen, denn wenn der applicationName nicht explizit festgelegt ist, wird er zur Laufzeit dem virtuellen Stammpfad der Webanwendung zugewiesen. Dies funktioniert gut, solange sich der virtuelle Stammpfad der Anwendung nicht ändert, aber wenn Sie die Anwendung in einen anderen Pfad verschieben, ändert sich auch die applicationName Einstellung. In diesem Fall beginnt der Mitgliedschaftsanbieter mit der Arbeit mit einer anderen Anwendungspartition als zuvor. Benutzerkonten, die vor der Verschiebung erstellt wurden, befinden sich in einer anderen Anwendungspartition, und diese Benutzer können sich nicht mehr bei der Website anmelden. Eine ausführlichere Diskussion zu diesem Thema finden Sie unter Always Set the Property When Configuring ASP.NET 2.0 Membership and Other providers( Always Set the applicationName Property When Configuring ASP.NET 2.0 Membership and Other providers).

Zusammenfassung

An diesem Punkt verfügen wir über eine Datenbank mit den konfigurierten Anwendungsdiensten (SecurityTutorials.mdf) und haben unsere Webanwendung so konfiguriert, dass das Membership-Framework den SecurityTutorialsSqlMembershipProvider soeben registrierten Anbieter verwendet. Dieser registrierte Anbieter ist vom Typ SqlMembershipProvider und hat seinen connectionStringName Wert explizit auf die entsprechende Verbindungszeichenfolge (SecurityTutorialsConnectionString) applicationName festgelegt.

Wir sind jetzt bereit, das Mitgliedschaftsframework aus unserer Anwendung zu verwenden. Im nächsten Tutorial untersuchen wir, wie Sie neue Benutzerkonten erstellen. Anschließend untersuchen wir die Authentifizierung von Benutzern, die Durchführung einer benutzerbasierten Autorisierung und das Speichern zusätzlicher benutzerbezogener Informationen in der Datenbank.

Viel Spaß beim Programmieren!

Weitere Informationen

Weitere Informationen zu den in diesem Tutorial erläuterten Themen finden Sie in den folgenden Ressourcen:

Videoschulungen zu Themen, die in diesem Tutorial enthalten sind

Zum Autor

Scott Mitchell, Autor mehrerer ASP/ASP.NET-Bücher und Gründer von 4GuysFromRolla.com, arbeitet seit 1998 mit Microsoft-Webtechnologien. Scott arbeitet als unabhängiger Berater, Trainer und Autor. Sein neuestes Buch ist Sams Teach Yourself ASP.NET 2.0 in 24 Stunden. Scott kann unter mitchell@4guysfromrolla.com oder über seinen Blog unter http://ScottOnWriting.NETerreicht werden.

Besonderen Dank an

Diese Tutorialreihe wurde von vielen hilfreichen Prüfern überprüft. Lead Reviewer für dieses Tutorial war Alicja Maziarz. Möchten Sie meine anstehenden MSDN-Artikel lesen? Wenn dies der Fall ist, legen Sie eine Zeile unter ab mitchell@4GuysFromRolla.com.