Um einen SQL-basierten Role Provider zu verwenden, gibt es 2 Möglichkeiten:

  1. Entweder man verwendet die vorinstallierte Datenbank aspnetdb.mdf oder
  2. man legt sich eine neue User-Datenbank für die neue Applikation an

Wählte man die zweite Methode, kann mithilfe des Kommandos

      aspnet_regsql.exe

einfach eine solche Datenbank mit allen notwendigen Tabellen und Strukturen angelegt werden. Dieses Kommando befindet sich im Verzeichnis:

      C:%windir%Microsoft.NETFramework<versionNumber>aspnet_regsql.exe

Ein Wizzard führt einen dann durch die zur Erstellung der DB notwendigen Schritte.

Alternativ dazu gibt es unter http://msdn.microsoft.com/en-us/library/ms229862(v=vs.80).aspx auch eine Anleitung für die Command Line.

Ist die Datenbank einmal erstellt, nehmen wir an, sie heißt „roleprovider“, können die zu administrierenden Gruppen in der Datenbank angelegt werden und die AD-User in die Gruppen eingehängt werden.

Dieser Schritt kann ma einfachsten über den Aufruf von Stored Procedures in der neuen Datenbank vorgenommen werden. Zum Beispiel:

— SQL Server statement to add user to a role
USE

roleprovider
GO

— Create a new role, called Admins
— parameters <<Application name>>, <<Role Name>>
EXEC

aspnet_Roles_CreateRole ‚CustomerManagement‘, ‚Admins‘

— Assign a windows user to the Admins role
— parameters <<Application name>>, <<User Name>>, <<Role Name>>, <<DateTime>>
EXEC

aspnet_UsersInRoles_AddUsersToRoles ‚CustomerManagement‘, ‚cool-itsabine.stiller‘, ‚Admins‘, 8

Der Application Name spielt hier eine wichtige Rolle, denn dieser muss dann auch in der ASP.NET-Applikation verwendet werden, damit die Rollen und User-Zuordnungen dort gefunden werden.

Als nächstes müssen wir ein paar Einträge in der web.config der ASP.NET-Applikation vornehmen. Als erstes benötigen wir für die neuen Rollen-DB einen Connectrion-String:

<connectionStrings>
   <add name=RoleProvider connectionString=Data Source=.;Integrated Security=True;Initial Catalog=role2 providerName=System.Data.SqlClient />
</
connectionStrings>

Dieser Role-Provider muss nun mit der Applikation „verdrahtet“ werden:

<system.web>
<
roleManager enabled=true>
<
providers>
<
clear/>
<
add name=AspNetSqlRoleProvider type=System.Web.Security.SqlRoleProvider
connectionStringName=RoleProvider applicationName=CustomerManagement/>
</
providers>
</
roleManager>
</system.web>

Hier taucht nun wieder der Applikationsname auf. Wichtig ist, dass dieser mit dem Applikationsnamen, mit dem wir zuvor die Usergruppen und -zuordnungen angelegt haben, übereinstimmt. Außerdem kommt hier der ConnectionString zu tragen, den wir eingetragen haben.

Bevor dieser neue Role Provider registriert wird, müssen die von übergeordneten web.configs oder der machine.config eingetragenen Role Provider gelöscht werden (clear), damit hier nur unser neuer Role Provider berücksichtigt wird.

<system.web>
<
authentication mode=Windows>
</
authentication>
<
authorization>
<
allow roles=Admins/>
<
deny users=*/>
</authorization>
</system.web>

Das war’s!

Ist doch cool, oder?

LG,
Sabine.