2012-06-24 11 views
6

Zbudowałem witrynę ASP.NET MVC 2, którą hostuję z serwerem Rackspace Cloud Server przy użyciu IIS 7.0.Jak skonfigurować program SQL Server/IIS 7.0, aby umożliwić witrynie ASP.NET MVC dostęp do bazy danych?

Kiedy próbuję przetestować stronę pod localhost z IIS 7.0 na serwerze, otrzymuję stronę błędu. Ten pochodzi z dzienników SQL (używam SQL Web Edition):

Error: 18456, Severity: 14, State: 11 
Login failed for user 'IIS APPPOOL\DefaultAppPool'. Reason: Token-based server access validation failed with an infrastructure error. Check for previous errors. [CLIENT: <local machine>] 

Moja strona działa dobrze na moim domowym komputerze, więc problem jest coś zrobić z łączenia się z bazą danych.

Po zbadaniu kodu komunikatu o błędzie sugeruje, że mam prawidłowy login bazy danych, ale dostęp do serwera nie powiódł się. Zrobiłem stos czytania wokół to na różnych forach i oto co próbowałem, z których żaden nie rozwiązał problemu (w tym stackoverflow/ServerFault.)

  1. Skonfiguruj nowe logowanie przy użyciu uwierzytelniania SQL Server. Stworzyłem nowy login w SQL i podałem poprawne prawa dostępu do mojego DB. Użyłem następującego ciągu połączenia w konfiguracji sieci:

    Źródło danych = mój serwer, katalog początkowy = myDB, identyfikator użytkownika = moja nazwa użytkownika, hasło = moje hasło;

  2. Utwórz nowe logowanie jako IIS APPPOOL\DefaultAppPool. Stworzyłem nowy login w SQL z poprawnymi prawami dostępu i używanym uwierzytelnianiem Windows. Ciąg połączenia wygląda następująco:

    Serwer = mój serwer; Baza danych = mojaDanaBase; Trusted_Connection = Prawda;

  3. Użyj istniejącego logowania sieciowego NT AUTHORITY\NETWORK SERVICE. Zmapowałem tego użytkownika do mojej bazy danych z poprawnymi prawami dostępu. Ciąg połączenia wygląda następująco:

    Serwer = mój serwer; Baza danych = mojaDanaBase; Trusted_Connection = Prawda;

Wygląda na to, że są głównymi opcjami, ponieważ czytam materiały online. Wreszcie tutaj jak kilka innych rzeczy, które mogą być pomocne:

  • Ustawienie SQL Uruchom jako administrator nie rozwiązuje problemu
  • Wyłączanie UAC nie pomogło
  • Moje puli aplikacji używa ApplicationPoolIdentity (najlepsze ze względów bezpieczeństwa)

W skrócie, moja strona nie chce się uruchomić, ponieważ nie może uzyskać obiekt z DB tak wyrzuca błąd. Problem polega na tym, że prawa dostępu do serwera nie są ustawione poprawnie. Nie mogę się dowiedzieć, jaka konfiguracja SQL login/połączenia ciąg/prawa dostępu do domeny potrzebuję.

To mnie dręczyło przez 3 tygodnie - czy możesz poświęcić 5 minut, aby mi pomóc?

+0

Czy możesz zamieścić bieżący ciąg połączenia? Zakładam, że łączysz się z Integrated Security, dlatego AppPoolIdentity służy do łączenia się z SQL Server. Należy również wspomnieć, czy serwery WWW i sql działają w konfiguracji usługi Active Directory. –

+0

Używanie: 'Source = SetsOfSix; Początkowy katalog = SetsOfSix; Zintegrowane zabezpieczenia = SSPI; '. Pozwól mi przejść sprawdzić pytanie w sprawie konfiguracji aktywnego katalogu ... –

+0

Na IIS 'Active Directory Domain Services' nie jest zainstalowany. Jak sprawdzić, czy serwery WWW i sql działają w konfiguracji Active Directoty? –

Odpowiedz

8

Ponieważ serwery (internetowe i SQL) nie są częścią domeny, nie można używać uwierzytelniania systemu Windows (zintegrowane zabezpieczenia) do łączenia się z serwerem SQL.

W usługach IIS po wpisaniu Integrated Security=SSPI w ciągu połączenia rzeczywisty użytkownik używany do łączenia się z programem SQL Server jest tożsamością puli aplikacji.

Powinieneś użyć opcji 1, co oznacza Skonfiguruj nowe logowanie przy użyciu uwierzytelniania serwera SQL.

Więc kroki byłoby:

  1. Utwórz myUsername SQL Server użytkownika.
  2. W oknie dialogowym właściwości użytkownika przejdź do sekcji Securables i sprawdź, czy jest zaznaczone Public.
  3. Następnie przejdź do sekcji User mapping (po lewej stronie). Poszukaj swojej bazy danych na liście i sprawdź ją. Poniżej, na liście Database role membership, sprawdź: public, db_datareader i db_datawriter.
  4. Teraz należy podać uprawnienia użytkownika do wykonywania procedur składowanych. Jako sa, w Management Studio, wykonaj:

    GRANT WYKONAJ DO myUserName;

  5. Skończyłeś.

chodzi o bezpieczeństwo, można później udoskonalenie prawa myUserName aby nie być w stanie, na przykład do spadku tabele lub inne obiekty.

W aplikacji należy użyć teraz ciąg połączenia na swoim punkcie 1.

Jeśli masz jakieś inne problemy, to proszę pisać komunikat o błędzie.

+0

Dzięki. Brakujący bit był (a) ustawieniem "GRANT EXECUTE" i (b) w moim LINQ-SQL miałem niepoprawne odwołanie do ciągu połączenia. Naprawianie obu rozwiązanych problemów. Twoja pomoc sprawiła, że ​​patrzyłem we właściwe miejsce. –

Powiązane problemy