ASP.NET

SQL-Server-Datenbank als Membership-Provider vorbereiten

Alternativen zur Aspnet_regsql.exe

Die meisten ASP.NET-Webs haben irgendwo einen Bereich, der nur bestimmten Benutzern zugänglich sein soll und somit eine Anmeldung (Login) erforderlich machen. Zu diesem Zweck stellt Microsoft in seinen ASP.NET-Entwicklungsumgebungen eigene Steuerelemente bereit, die sich mit wenigen Mausklicks in die Web-Seiten integrieren lassen und dem Entwickler eine Menge Arbeit abnehmen.

Basis dieser Steuerelemente sind sog. Provider, die die Daten für die Benutzerverwaltung bereitstellen. Aktuell braucht man für den kompletten Satz an Features folgende drei Provider:

  1. Membership-Provider (Mitgliedschaft, d.h. Benutzerdaten)
  2. Role-Provider (Rollen)
  3. Profile-Provider (Profildaten, d.h. weitergehende Benutzerdaten)

Hinter diesen Providern, die in der web.config konfiguriert werden, steht eigentlich immer eine Datenbank, die allerdings entsprechend vorbereitet werden muss. Setzt man z.B. im Hintergrund einen Microsoft SQL-Server 2000 ein, so braucht man in der Datenbank, die als Provider-Datenquelle eingesetzt werden soll, eine ganze Reihe Tabellen, Stored Procedures et cetera.

Auch hierbei hat Microsoft den Entwickler nicht alleingelassen: im Ordner <Windows-Ordner>\Microsoft.NET\Framework\<Versionsnummer> gibt es das Tool aspnet_regsql.exe, mit dem man entweder über die Kommandozeile oder ganz bequem per Dialog eine Datenbank in einem Rutsch mit allen erforderlichen Objekte bestücken kann.

So weit so gut ... aber was soll man tun, wenn man keinen Zugriff auf die Oberfläche des Webservers hat, auf dem das Projekt später gehostet wird, um das Tool auszuführen? Die wenigsten Provider erlauben einen Remote-Zugriff...

Auch da hat man in Redmond mitgedacht. Es existiert eine Funktion innerhalb der Klasse System.Web.Management.SqlServices namens install, die genau das gleiche tut, wie das Tool aspnet_regsql.exe. Der entscheidende Vorteil dabei ist, man kann sich rund um diese Funktion eine kleines Webform bauen, auf dem Server ablegen und dort aufrufen.

Peter A. Bromberg von eggheadcafe.com hat in einem interessanten Artikel über die Integration von Membership-, Role- und Profile-Providern eine Vorlage geliefert, auf der der folgende Code basiert:

Kümmern wir uns zunächst um das WebForm. Viel Code braucht man da nicht...

SetupASPNetDatabaseVB.aspx

<%@ Page Language="VB" AutoEventWireup="false"
   CodeFile="SetupASPNetDatabaseVB.aspx.vb"
   Inherits="SetupASPNetDatabaseVB" %>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Set Up ASP.NET Role, Membership and Profile Database Features</title>
</head>
<body>
<form id="form1" runat="server">

<table>
   <tr>
      <td>SERVER:</td>
      <td>
         <asp:TextBox ID="txtServer" runat="server"></asp:TextBox>
      </td>
   </tr>
   <tr>
      <td>USERNAME:</td>
      <td>
         <asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
      </td>
   </tr>
   <tr>
      <td>PASSWORD:</td>
      <td>
         <asp:TextBox ID="txtPassword" runat="server"></asp:TextBox>
      </td>
   </tr>
   <tr>
      <td>DATABASE:</td>
      <td>
         <asp:TextBox ID="txtDatabase" runat="server"></asp:TextBox>
      </td>
   </tr>
   <tr>
      <td>
         <asp:Button ID="Button1" runat="server" Text="Setup Database" />
      </td>
      <td>
         <asp:Label ID="Label1" runat="server"></asp:Label>
      </td>
   </tr>
</table>

</form>
</body>
</html>

Wie man sieht sind in der Tabelle lediglich 4 Textboxen untergebracht, in die die für install benötigten Informationen eingetragen werden, ein Button zum Abschicken des Formulars und ein Label-Feld für die Rückmeldung.

Schön an der Lösung ist, dass der eigentliche Code (hier VB, bei Peter Bromberg C#) fast noch übersichtlicher ist, denn es ist wie erwähnt nur ein Aufruf...

SetupASPNetDatabaseVB.vb

Imports System.Web.Management

Partial Class SetupASPNetDatabaseVB

   Inherits System.Web.UI.Page

   Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs)

      Me.Label1.Text = ""

      If IsPostBack Then
         Try
            System.Web.Management.SqlServices.Install( _
               Me.txtServer.Text, _
               Me.txtUserName.Text, _
               Me.txtPassword.Text, _
               Me.txtDatabase.Text, _
               SqlFeatures.All)

           Me.Label1.Text = "Complete!"

         Catch ex As Exception

           Me.Label1.Text = ex.Message

         End Try

      End If

   End Sub

End Class

Legt man nun die ASPX-Seite und die Code-Behind-Datei auf den Zielserver und ruft sie auf, so hat man in Sekundenschnelle eine vorhandene SQL-Server 2000 Datenbank als Provider-Basis aufgebohrt.

weitere Informationen

kick it on dotnet-kicks.de AddThis 0 wikio-Stimme(n) Trackback-Url...

Keine Kommentare bislang...

Dein Kommentar hierzu...


Kommentar-Feed für diesen Beitrag
Gravatare werden unterstützt .:. eMail-Adressen werden nicht veröffentlicht
 

RSS-Feed

Die URL des Standard-Newsfeed von zerbit.de lautet:

http://www.zerbit.de/rssfeed.aspx

Login


 

 

Statistik



kürzlich kommentiert

Artikel 63

  • Datum: 02.01.2007
    Kategorie: ASP.NET
    Zugriffe: 2.419
    Kommentare: 0
    Trackbacks: 0

Letzte Beiträge

Kategorien

Buttons & More

Blog-Roll

Banner Piraten-Partei