Asp.Net

Membership-Provider-Daten in eigener DB speichern

23. 08. 2013

Achtung: Diese Variante funktioniert nicht mit einer Windows Azure Datenbank. Dafür habe ich einen eigenen Artikel erstellt!

Grundsätzlich erstellt Visual Web Express die Datenbankstruktur für den Membership-Provider in einer eigenen Datenbank. Es kann allerdings notwendig sein, die DB-Struktur zu einer bestehenden Datenbank hinzuzufügen.
Hier findet sich die Anleitung, wie man die DB-Struktur einer bestehenden .MDF-SQL-Server-Express-Datei hinzufügt.

Um die Datenbankstruktur für den Asp.Net-Membership-Provider zu erstellen, gibt es ein mitgeliefertes Tool.
Anschließend muss man nur noch die web.config konfigurieren, um Asp.Net mitzuteilen, wo die Daten liegen.
Das Problem: Das Tool kann standardmäßig nur auf einen „richtigen“ SQL-Server zugreifen und fängt nichts mit dem SQL-Express-Developement-Server an, der Visual Web Express beiliegt. Daher gibt es folgende Vorgehensweise:

Vorbereitende Tätigkeiten

Das Tool Aspnet_RegSQL benötigt zwei Angaben: Den Server und die Datenbank.
Der Server ist bei einem SQLExpress-Server meistens „localhost\SQLExpress“.
Die Datenbank ist im Normalfall nicht so leicht einzustellen: Man muss mit dem SQL Management Studio die .MDF-Datei der SQL-Serverinstanz zuordnen und einen Namen vergeben. Daher benötigt man diesen Download (s. u.).

1. Die MDF-Datei erstellen (im Visual Web Express) oder eine bestehende zur Webite hinzufügen

2. Das SQL Management Studio öffnen und mit localhost\SQLExpress verbinden

3. Rechtsklick auf „Datenbanken“ und „Anfügen“ wählen und die .MDF-Datei hinzuverbinden. In der Spalte „Anfügen Als“ einfach einen einfacheren Namen vergeben.

Die Datenbankstruktur erstellen

Dies kann man zwar händisch machen; empfohlen wird allerdings, das Tool „aspnet_regsql.exe“ zu verwenden.
Diese Tool befindet sich im Verzeichnis %WINDIR%\Microsoft.Net\Framework\v2.0.50727.

Nach Start des Tools kommt ein Wizard. Als Server gibt man ein: „localhost\SQLExpress“, man wählt „Windows-Authentifizierung“ und als Datenbank den oben vergebenen Namen.

Nun wird die DB-Struktur erstellt.

Eintrag des Connection-Strings in der web.config

Damit unsere Website auf die Datenbank zugreifen kann, muss man in der zentralen Konfigurationsdatei „web.config“ den ConnectionString definieren.
Diesen kann man entweder händisch erstellen, oder man lässt sich von Visual Web Express folgendermaßen helfen:
Man öffnet eine .aspx-Datei, wählt Toolbox > SQLDataSource und erstellt hiermit den Connection-String. Das Element kann man anschließend wieder löschen.

Damit wird z. B. folgendes erstellt:

    <connectionStrings>
       <add name="ConStrLoginTest2Users" connectionString="Data Source=localhost\SQLExpress;Initial Catalog=LoginTest2Users;Integrated Security=True"
           providerName="System.Data.SqlClient" />
   </connectionStrings>

Eintrag des Membership-Providers in der web.config

Nun muss man noch den Membership-Provider definieren, damit dieser auf den richtigen Connection-String zeigt. Dazu löscht man die folgende Zeile untere configuration/system.web:

<authentication mode="Windows" />

und fügt stattdessen folgendes ein (natürlich mit Anpassen des Connection-Strings (2x):

       <authentication mode="Forms" >
         <forms loginUrl="Login.aspx" name=".ASPXFORMSAUTH" />
       </authentication>

       <authorization>
         <deny users="?" />
       </authorization>

       <machineKey validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" validation="SHA1" />

       <roleManager enabled="true" defaultProvider="CustomizedRoleProvider">
         <providers>
           <add name="CustomizedRoleProvider"
              type="System.Web.Security.SqlRoleProvider"
              connectionStringName="ConStrLoginTest2Users" />
       </providers>
     </roleManager>

     <membership defaultProvider="CustomizedMembershipProvider">
       <providers>
         <add name="CustomizedMembershipProvider"
              type="System.Web.Security.SqlMembershipProvider"
              connectionStringName="ConStrLoginTest2Users" />
       </providers>
     </membership>

Security-Einstellungen festlegen

In der web.config fügen wir – gleich unter der Zeile </connectionStrings> – weiters folgende Zeilen ein:

 <location path="CreateUser.aspx">
   <system.web>
     <authorization>
       <allow users="?" />
     </authorization>
   </system.web>
 </location>
 <location path="RetrievePassword.aspx">
   <system.web>
     <authorization>
       <allow users="?" />
     </authorization>
   </system.web>
 </location>

Nacharbeiten

Stellen Sie sicher, dass alle oben genannten Dateien (Login.aspx, …) existieren.

Quellen

Membership-DB-Struktur zu einer bestehenden DB hinzufügen:

Microsoft® SQL Server® 2008 Management Studio Express (alt?):

Microsoft® SQL Server® 2008 Management Studio Express (neu):

Connection-String zusammenbauen:

Recherche-Quellen (alt)

Beispiel zum Erstellen der DB-Struktur in MDF-Dateien:
http://weblogs.asp.net/lhunt/archive/2005/09/26/425966.aspx

Dateien im SQL Server Express richtig ansprechen:
http://scottonwriting.net/sowblog/posts/5480.aspx

Übersicht über die Parameter von aspnet_regsql.exe:
http://msdn.microsoft.com/en-us/library/ms229862(VS.80).aspx

image_print
1 Stern2 Sterne3 Sterne4 Sterne5 Sterne
Loading...

Author

Manuel

Related Posts

Asp.Net

Komponenten

3. 06. 2009

1 Stern2 Sterne3 Sterne4 Sterne5 Sterne
Loading...