Zine.net online

Witaj na Zine.net online Zaloguj się | Rejestracja | Pomoc
w Szukaj

arkadiusz.wasniewski

FormsAuthentication w Reporing Services

Domyślnie usługi raportujące Microsoft SQL Server 2005 obsługują jedynie identyfikację Windows. Na szczęście w przykładach dla Reporitng Services dostępnych na stronach www.codeplex.com dostępna jest implementacja rozszerzeń usług raportujących (interfejsy IAuthenticationExtension i IAuthorizationExtension), które umożliwiają skorzystanie z dobrodziejstw identyfikacji opartej o Forms. Jeśli zainstalujemy przykłady, to interesujące nas kody znajdziemy w katalogu C:\Program Files\Microsoft SQL Server\90\Samples\Reporting Services\Extension Samples\FormsAuthentication Sample zakładając oczywiście, iż wybraliśmy domyślną lokalizację.

Przykładowe rozwiązanie korzysta z własnej bazy danych do przechowywania informacji o użytkownikach. Zazwyczaj jednak jest tak, iż w identyfikacji Forms korzystamy z własnych danych. Wdrożenie rozszerzeń Reporting Services powoduje poważną ingerencję w strukturę i konfigurację usług raportujących serwera SQL. Zmiana bazy danych (nazewnictwo) oznacza zasadniczą modyfikację przykładowej aplikacji. A co w przyszłości? Jeśli zechcemy za jakiś czas dokonać kolejnych modyfikacji? Ciągłe zmiany w ramach Reporting Services nie są dobrym pomysłem.

Moja propozycja to zachowanie istniejącego przykładu w części weryfikującej użytkowników bez zmian. Modyfikacje natomiast wprowadzamy do skryptu tworzącego bazę danych. Usuwamy z niego kod tworzący tabelę Users oraz procedurę składowaną RegisterUser (wraz z uprawnieniami). Następnie modyfikujemy kod procedury składowanej LookupUser, która odpowiada za pobranie zaszyfrowanego hasła (hash) oraz wartości losowej (salt) utrudniającej złamanie hasła metodą słownikową. Zamiast sięgać do tabeli wewnątrz bazy rozszerzenia, pobierać będziemy dane z naszej własnej, zewnętrznej bazy danych. Dzięki temu wszelkie zmiany w przyszłości będą ograniczały się do niewielkiej modyfikacji kodu procedury LookupUser zamiast przebudowy kodu przykładowego rozszerzenia. Poniżej kod owej procedury przed modyfikacją:

CREATE PROCEDURE LookupUser

    @userName varchar(255)

AS

    SELECT PasswordHash, salt

    FROM Users

    WHERE UserName = @userName

GO

oraz po niej:

CREATE PROCEDURE LookupUser

    @userName varchar(255)

AS

    SELECT u.PasswordHash, u.PasswordSalt

    FROM OurDatabase.Users AS u

    WHERE u.Name = @userName

GO

PS. Dokumentacja opisująca wdrożenie rozszerzeń zawiera błąd w części dotyczącej modyfikacji pliku Web.config dla aplikacji Report Server. Jest podana niewłaściwa ścieżka dostępu do formularza logowania. Brakuje folderu Pages.

Opublikowane 15 listopada 2007 14:41 przez arkadiusz.wasniewski

Komentarze:

Brak komentarzy
Komentarze anonimowe wyłączone
W oparciu o Community Server (Personal Edition), Telligent Systems