2010-04-13 8 views
6

Mam program ELMAH działający na moim serwerze (Cassini) i byłem z niego zadowolony, ale teraz próbuję przenieść wszystko do mojego serwer produkcyjny (IIS7), miesiąc miodowy wygląda jak koniec.Jak uzyskać dostęp do ELMAH do pracy z SQL Server (problemy z uprawnieniami)?

Przeszłam przez "gotcha" with IIS7, co szczerze mówiąc mogło być lepiej podkreślone w dokumentacji, a jeśli po prostu używam logu w pamięci, to działa.

Jednak staram się zmusić go do korzystania z dziennika SQL Server (jak ja w moim systemie rozwoju), a ja otrzymuję błąd wzdłuż linii:

uprawnienie EXECUTE odmówiono na obiekcie ELMAH_GetErrorsXml

Cóż, w porządku. Wiem, jak udzielać uprawnień do baz danych, ale naprawdę mam trudności z ustaleniem, który użytkownik i które przechowywane proc/tabele muszę przyznać dostęp.

Rzeczą, która naprawdę mnie myli, jest to, że nie musiałem robić czegoś takiego, aby uruchomić ją na moim serwerze programistycznym. Jedyną różnicą, jaką widzę, jest to, że na moim serwerze programistycznym wydaje się, że łączy się z NT AUTHORITY \ IUSR, podczas gdy na moim serwerze produkcyjnym wydaje się, że łączy się jako NT AUTHORITY \ NETWORK SERVICE. (Używa tylko zaufanego połączenia, więc nie skonfigurowałem tego w sposób jawny - przypuszczam, że ma to związek z serwerem WWW). UPDATE: Od tego czasu ustaliłem, że ponieważ używam Cassini, to faktycznie logowałem się jako ja (administrator), a nie IUSR, co wyjaśnia, dlaczego nie miałem żadnych problemów z uprawnieniami.

Na moim serwerze programistycznym konto IUSR jest członkiem publicznej roli bazy danych i ma dostęp do wymaganej bazy danych (również jako "publiczny"). Nie ma wyraźnego przyznawania uprawnień na poziomie obiektu. [Patrz aktualizacja powyżej - nie ma to znaczenia].

Na moim serwerze produkcyjnym dodałem usługę SIEĆ w dokładnie taki sam sposób (publiczna rola bazy danych, jawny dostęp do bazy danych jako "publiczny"). Dostaję ten błąd uprawnień. Czemu?!! [Zobacz aktualizację powyżej - jedynym powodem, dla którego nie jest uzyskanie błędu uprawnień, ponieważ uruchamiam się jako administrator].

I oczywiście, jeśli fakt, że działa lokalnie, jest po prostu "szczęściem", będę musiał wiedzieć, które SP/tabele przyznają dostęp. Domyślam się, że wszystkie 3 SPS i nie tabeli, ale byłoby dobrze (ponownie), aby zobaczyć dokumentację, która czyni to wyraźnym.

Odpowiedz

6

Czy udostępniasz ELMAH z pełnym łańcuchem połączeń w pliku web.config? Jeśli tak, powinieneś dokładnie wiedzieć, do jakiego użytkownika db przyznać uprawnienia, prawda? I tak, pozwolenie byłoby wykonać trzy procedurami ELMAH zapisane ...

Oto konfiguracja że użyłem:

<elmah> 
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah" /> 
</elmah> 

<connectionStrings> 
    <add name="elmah" connectionString="Data Source=XXX;Initial Catalog=XXX;User Id=XXX;Password=XXX;" providerName="System.Data.SqlClient" /> 
</connectionStrings> 
+1

@Eric: Używam zaufanego połączenia, więc użytkownik faktycznie różni się w zależności od urządzenia, na którym działa. Jeśli muszę przyznać wyraźne uprawnienia, to dobrze, mogę to zrobić. Dzięki za potwierdzenie, że to tylko te 3 SP. Aby odizolować się od użytkownika, utworzę rolę bazy danych i upewnię się, że odpowiedni użytkownik (prawdopodobnie NETWORK SERVICE) jest członkiem tej roli.Szkoda, że ​​ELMAH nie tworzy ról w ramach konfiguracji (jak na przykład dostawca członkostwa ASP.NET Membership dla SQL Server). Szkoda też, że nie wspominają o konieczności zrobienia tego! –

11

przykładem SQL potrzebnych do wykonania dać pozwolenie na użytkownikaUSER_NAME:

Powiązane problemy