Как заставить ELMAH работать с SQL Server (проблемы с разрешениями) - PullRequest
8 голосов
/ 13 апреля 2010

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

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

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

Отказано в разрешении EXECUTE для объекта ELMAH_GetErrorsXml

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

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

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

На моем производственном сервере я добавил NETWORK SERVICE точно таким же образом (роль общедоступной базы данных, явный доступ к базе данных как «общедоступная»). Тем не менее, я получаю эту ошибку разрешения. Зачем?!! [См. Обновление выше - единственная причина, по которой я не не получаю ошибку разрешения, заключается в том, что я работаю от имени администратора].

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

Ответы [ 2 ]

13 голосов
/ 03 апреля 2014

пример 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
7 голосов
/ 13 апреля 2010

Предоставляете ли вы ELMAH полную строку подключения в web.config? Если да, то вы должны точно знать, для какого пользователя БД следует предоставить разрешения, верно? И да, разрешение будет заключаться в выполнении трех хранимых процедур 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>
...