Как заставить ELMAH работать с SQL Server (проблемы с разрешением)

У меня есть ELMAH, работающий на моем сервере разработки (Cassini), и я был им вполне доволен, но теперь, когда я пытаюсь перенести все на свой рабочий сервер (IIS7), медовый месяц кажется законченным.

Я прошел мимо " gotcha "с IIS7, который, честно говоря, можно было бы лучше выделить в документации, и если я просто использую журнал в памяти, он работает.

Однако я пытаюсь заставить его использовать журнал SQL Server (как я это делаю в своей системе разработки), и я получаю сообщение об ошибке в следующих строках:

В разрешении EXECUTE было отказано в объекте ELMAH_GetErrorsXml.

Вот и славно. Я знаю, как предоставить разрешения для базы данных, но мне очень трудно понять, какому пользователю и к каким сохраненным процессам / таблицам мне нужно предоставить доступ.

Что меня действительно сбивает с толку, так это то, что мне не нужно было делать ничего подобного, чтобы заставить его работать на моем сервере разработки. Единственное различие, которое я вижу, заключается в том, что на моем сервере разработки он, кажется, подключается как NT AUTHORITY \ IUSR, тогда как на моем производственном сервере он, похоже, подключается как NT AUTHORITY \ NETWORK SERVICE. (Он просто использует доверенное соединение, поэтому я явно не настроил его для этого - я предполагаю, что это связано с веб-сервером). ОБНОВЛЕНИЕ: с тех пор я установил, что, поскольку я использую Cassini, он на самом деле входил в систему как я (администратор), а не IUSR, что объясняет, почему у меня не было проблем с разрешениями.

На моем сервере разработки учетная запись IUSR является членом роли общедоступной базы данных и имеет доступ к необходимой базе данных (опять же как «общедоступная»). Нет явного предоставления разрешений на уровне объекта. [См. Обновление выше - это не имеет значения].

На своем производственном сервере я добавил СЕТЕВОЙ СЕРВИС точно таким же образом (роль общедоступной базы данных, явный доступ к базе данных как "общедоступный"). Тем не менее, я получаю эту ошибку разрешения. Почему?!! [См. Обновление выше - единственная причина, по которой я не получаю сообщение об ошибке разрешения, - это то, что я работаю как администратор].

И, конечно, если тот факт, что он работает локально, - это просто «удача», мне нужно будет знать, к каким SP / таблицам предоставить доступ. Я предполагаю, что это все 3 SP, а не таблица, но было бы хорошо (снова) увидеть некоторую документацию, которая делает это явным.


person Gary McGill    schedule 13.04.2010    source источник


Ответы (2)


Предоставляете ли вы ELMAH полную строку подключения в файле web.config? Если да, то вы должны точно знать, какому пользователю db нужно предоставить разрешения, верно? И да, разрешение было бы на выполнение трех хранимых процедур ELMAH ...

Вот конфигурация, которую я использовал:

<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>
person Eric King    schedule 13.04.2010
comment
@Eric: Я использую доверенное соединение, поэтому пользователь фактически зависит от того, на какой машине он работает. Если мне нужно предоставить явные разрешения, я могу это сделать. Спасибо, что подтвердили, что это всего лишь эти 3 SP. Чтобы изолировать себя от того, какой это пользователь, я создам роль базы данных и удостоверюсь, что соответствующий пользователь (возможно, NETWORK SERVICE) является членом этой роли. Жаль, что ELMAH не создает роли в процессе установки (как, например, это делает поставщик членства в ASP.NET для SQL Server). Еще жаль, что не упоминают о необходимости этого! - person Gary McGill; 13.04.2010

пример sql, необходимого для предоставления разрешения на выполнение пользователю USER_NAME:

GRANT EXECUTE ON ELMAH_GetErrorsXml TO USER_NAME
GRANT EXECUTE ON ELMAH_GetErrorXml TO USER_NAME
GRANT EXECUTE ON ELMAH_LogError TO USER_NAME
person gicalle    schedule 03.04.2014