Erstellen des Mitgliedschaftsschemas in SQL Server (C#)
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 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.
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:
- Wartbarkeit ' eine Anwendung, deren Daten in einer Datenbank gekapselt sind, ist einfacher zu verstehen, zu verwalten und bereitzustellen als eine Anwendung mit zwei separaten Datenbanken.
- Relationale Integrität durch Suchen der mitgliedschaftsbezogenen Tabellen in derselben Datenbank wie die Anwendungstabellen ist es möglich , Fremdschlüsseleinschränkungen zwischen den Primärschlüsseln in den Mitgliedschaftstabellen und den zugehörigen Anwendungstabellen festzulegen.
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.mdf
hinzuzufü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.
Abbildung 1: Hinzufügen einer neuen SQL-Datenbank benannten SecurityTutorials.mdf
App_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.
Abbildung 2: Die SecurityTutorials
Datenbank ist derzeit leer (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Schritt 2: Hinzufügen desSqlMembershipProvider
Schemas 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 SqlMembershipProvider
SqlRoleProvider
sowie 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_Data
Ordner
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 SQLExpress
instanceName . 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.exe
hinzuzufü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.
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 in der Datenbank instance registriert ist. Wir müssen die Datenbank zuerst anfügen.
Klicken Sie mit der rechten Maustaste auf den Ordner Datenbanken, und wählen Sie im Kontextmenü Anfügen aus. Daraufhin 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.
Abbildung 4: Anfügen der SecurityTutorials.mdf
Datenbank (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
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, hat die SecurityTutorials.mdf
Datenbank einen ziemlich abstrusen Namen. Ändern wir ihn in einen einprägsameren (und einfacher zu eingebenden) Namen. Klicken Sie mit der rechten Maustaste auf die Datenbank, wählen Sie im Kontextmenü Umbenennen aus, und benennen Sie sie SecurityTutorialsDatabase
um. Dadurch wird der Dateiname nicht geändert, nur der Name, den die Datenbank verwendet, um sich selbst zu identifizieren, um SQL Server.
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 Anwendungsdienste
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 durchzuführen 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, der in Abbildung 7 dargestellt ist, beschreibt den Zweck des Tools.
Abbildung 7: Verwenden des ASP.NET SQL Server Setup-Assistenten zum Hinzufügen des Mitgliedschaftsschemas (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Im zweiten Schritt des Assistenten werden wir gefragt, ob wir die Anwendungsdienste hinzufügen oder entfernen möchten. Da wir die tabellen, Sichten und gespeicherten Prozeduren hinzufügen möchten, die SqlMembershipProvider
für erforderlich sind, 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 Anwendungsdienstinformationen aus einer vorhandenen Datenbank entfernen aus.
Abbildung 8: Auswählen der Option SQL Server für Application Services konfigurieren (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 in diesem Tutorial die Datenbank App_Data
hinzugefügt SecurityTutorials.mdf
haben, sie an localhost\InstanceName
angefügt und in umbenannt SecurityTutorialsDatabase
haben, verwenden Sie die folgenden Werte:
- Server:
localhost\InstanceName
- Windows-Authentifizierung
- Datenbank:
SecurityTutorialsDatabase
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, die ausgeführt werden. 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. Wir untersuchen die mitgliedschafts- und rollenspezifischen Datenbankobjekte in Schritt 3.
Abbildung 10: Eine Vielzahl von Tabellen, Sichten und gespeicherten Prozeduren wurde der Datenbank hinzugefügt (Klicken Sie hier, um das Bild in voller Größe anzuzeigen)
Hinweis
Die aspnet_regsql.exe
grafische Benutzeroberfläche des Tools installiert das gesamte Anwendungsdienstschema. Bei der Ausführung aspnet_regsql.exe
über die Befehlszeile können Sie jedoch angeben, welche bestimmten Anwendungsdienstkomponenten installiert (oder entfernt werden sollen). Wenn Sie daher nur die Tabellen, Sichten 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 der von aspnet_regsql.exe
verwendeten T-SQL-Erstellungsskripts manuell ausführen. Diese Skripts befinden sich im WINDIR%\Microsoft.Net\Framework\v2.0.50727\
Ordner mit Namen wie InstallCommon.sql
,InstallMembership.sql
,InstallRoles.sql
, InstallProfile.sql
,InstallSqlState.sql
usw.
An diesem Punkt haben wir die Datenbankobjekte erstellt, die SqlMembershipProvider
von benötigt werden. Allerdings müssen wir das Mitgliedschaftsframework dennoch anweisen, dass es ( SqlMembershipProvider
im Gegensatz zu, z. B. ) ActiveDirectoryMembershipProvider
und dass die SqlMembershipProvider
Datenbank verwenden SecurityTutorials
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 tieferen Blick auf die soeben erstellten Datenbankobjekte.
Schritt 3: Ein Blick auf die Kerntabellen des Schemas
Bei der Arbeit mit den Frameworks "Mitgliedschaft" und "Rollen" in einer ASP.NET-Anwendung werden die Implementierungsdetails vom Anbieter gekapselt. In zukünftigen Tutorials werden wir über die Klassen Membership
und Roles
.NET Framework mit diesen Frameworks 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 durch und SqlMembershipProvider
SqlRoleProvider
geändert werden.
Vor diesem Hintergrund könnten wir die Frameworks mitgliedschafts- und rollensicher 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. Es hilft, mit den SqlMembershipProvider
Schemas und SqlRoleProvider
vertraut zu sein, wenn Fremdschlüsseleinschränkungen zwischen den Anwendungsdatentabellen und den in Schritt 2 erstellten Tabellen festgelegt werden. Darüber hinaus können wir in bestimmten seltenen Fällen eine Schnittstelle mit dem Benutzer und den Rollenspeichern direkt auf Datenbankebene (anstatt über die Membership
- oder Roles
-Klassen) herstellen.
Partitionieren des Benutzerspeichers in Anwendungen
Die Frameworks "Mitgliedschaft" und "Rollen" sind so konzipiert, dass ein einzelner Benutzer und rollenspeicher für viele verschiedene Anwendungen freigegeben werden können. Eine ASP.NET Anwendung, die das Mitgliedschafts- oder Rollenframework 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 partitioniert 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.
Abbildung 11: Benutzerkonten können über mehrere Anwendungen hinweg partitioniert werden (Klicken Sie hier, um ein Bild in voller Größe 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
, LoweredApplicationName
und Description
. ApplicationId
ist vom Typ uniqueidentifier
und ist der Primärschlüssel der Tabelle. ApplicationName
Stellt einen eindeutigen Anzeigenamen für jede Anwendung bereit.
Die anderen Mitgliedschafts- und Rollentabellen sind mit dem ApplicationId
Feld in aspnet_Applications
verknü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
Die 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_Membership
sichergestellt, 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.config
angegebenen 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 , PasswordFormat
und 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 SqlMembershipProvider
zu 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 SqlMembershipProvider
verwendet 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 SqlMembershipProvider
hinzu.
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 SqlMembershipProvider
spezifischen 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 , Hashed oder 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 AspNetSqlMembershipProvider
kö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.config
angepasst werden. In einem zukünftigen Tutorial werden wir das Rollenframework und dessen Konfigurationsmarkup ausführlich untersuchen.
Anpassen derSqlMembershipProvider
Einstellungen
Der Standardwert SqlMembershipProvider
(AspNetSqlMembershipProvider
) hat sein connectionStringName
Attribut auf LocalSqlServer
festgelegt. Wie der AspNetSqlMembershipProvider
Anbieter wird auch der Verbindungszeichenfolge Name LocalSqlServer
in machine.config
definiert.
<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" wird in ~/App_Data
/aspnet.mdf
übersetzt.
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 die
LocalSqlServer
Verbindungszeichenfolge Name inWeb.config
ein. Durch Überschreiben desLocalSqlServer
Verbindungszeichenfolge Name-Werts inWeb.config
können wir den standardmäßig registrierten Mitgliedschaftsanbieter (AspNetSqlMembershipProvider
) verwenden und ordnungsgemäß mit derSecurityTutorials.mdf
Datenbank arbeiten lassen. Dieser Ansatz ist in Ordnung, wenn Sie mit den vonAspNetSqlMembershipProvider
angegebenen 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 Typ
SqlMembershipProvider
und konfigurierenconnectionStringName
festlegen, um auf dieSecurityTutorials.mdf
Datenbank. 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.config
hinzufü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.config
registriert 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 <clear />
beim Hinzufügen von Anbietern.
Beachten Sie, dass die SecurityTutorialsSqlMembershipProvider
Einstellung "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 true
festgelegt. Alle anderen Konfigurationsoptionen sind mit den Werten in AspNetSqlMembershipProvider
identisch. 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 applicationName
Property When Configuring ASP.NET 2.0-Mitgliedschaft und andere Anbieter.
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:
- Legen Sie immer die
applicationName
Eigenschaft fest, wenn Sie ASP.NET 2.0-Mitgliedschaft und andere Anbieter konfigurieren. - Konfigurieren ASP.NET 2.0 Application Services für die Verwendung SQL Server 2000 oder SQL Server 2005
- SQL Server Management Studio herunterladen
- Untersuchen von Mitgliedschaft, Rollen und Profil von ASP.NET 2.0
- Das
<add>
Element für Anbieter für die Mitgliedschaft - Das
<membership>
Element - Das
<providers>
Element für die Mitgliedschaft - Verwenden beim
<clear />
Hinzufügen von Anbietern - Direktes Arbeiten mit dem
SqlMembershipProvider
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.