2010-04-13 25 views
6

Tengo ELMAH trabajando en mi servidor de desarrollo (Cassini), y estaba bastante contento con él, pero ahora que estoy tratando de mover todo a mi servidor de producción (IIS7), la luna de miel parece haber terminado.Cómo consigo que ELMAH trabaje con SQL Server (problemas de permisos)

He pasado la "gotcha" with IIS7, que francamente podría haber sido mejor resaltada en la documentación, y si solo uso el registro en memoria entonces funciona.

Sin embargo, estoy tratando de conseguir que se utilice el registro de SQL Server (como lo hago en mi sistema de desarrollo), y estoy recibiendo un error en la línea de:

El permiso EXECUTE fue negado en el objeto ELMAH_GetErrorsXml

Bien, bien. Sé cómo otorgar permisos a la base de datos, pero realmente estoy luchando por comprender a qué usuario y a qué procs/tablas almacenadas debo otorgar acceso.

Lo que realmente me confunde es que no tuve que hacer algo como esto para que funcione en mi servidor de desarrollo. La única diferencia que puedo ver es que en mi servidor de desarrollo parece conectarse como NT AUTHORITY \ IUSR, mientras que en mi servidor de producción parece conectarse como NT AUTHORITY \ NETWORK SERVICE. (Solo está usando una conexión de confianza, así que no lo he configurado explícitamente para hacer eso, supongo que tiene que ver con el servidor web). ACTUALIZACIÓN: Desde entonces establecí que, debido a que estoy usando Cassini, en realidad estaba iniciando sesión como yo (un administrador) y no como IUSR, lo que explica por qué no obtuve ningún problema de permiso.

En mi servidor de desarrollo, la cuenta IUSR es un miembro de la función de base de datos pública, y tiene acceso a la base de datos requerida (de nuevo como "pública"). No hay concesión explícita de permisos de nivel de objeto. [Ver la actualización anterior - esto es irrelevante].

En mi servidor de producción, he agregado NETWORK SERVICE exactamente de la misma manera (función de base de datos pública, acceso explícito a la base de datos como "público"). Sin embargo, obtengo este error de permiso. ¡¡¿Por qué?!! [Consulte la actualización anterior: la única razón por la que no se obtiene obtener un error de permiso es porque me estoy ejecutando como administrador].

Y, por supuesto, si el hecho de que funciona localmente es solo "suerte", necesitaré saber a qué SP/tablas otorgar acceso. Supongo que serían los 3 SP y no la tabla, pero sería bueno (nuevamente) ver alguna documentación que lo haga explícito.

Respuesta

6

¿Está proporcionando ELMAH con una conexión completa en la web.config? Si es así, debes saber exactamente a qué usuario db otorgar permisos, ¿verdad? Y sí, el permiso sería para ejecutar los tres procedimientos almacenados ELMAH ...

Aquí es una configuración que he utilizado:

<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: Estoy usando una conexión de confianza, por lo que el usuario realmente varía según la máquina en la que se esté ejecutando. Si tengo que otorgar permisos explícitos, entonces bien, puedo hacerlo. Gracias por confirmar que son solo esos 3 SP. Para aislarme de qué usuario es, crearé una función de base de datos y me aseguraré de que el usuario apropiado (probablemente el SERVICIO DE RED) sea miembro de la función.Es una pena que ELMAH no cree los roles como parte de la configuración (como el proveedor de membresía de ASP.NET para SQL Server, por ejemplo). ¡También es una pena que no mencionen la necesidad de hacer esto! –

11

ejemplo de SQL necesarias para dar permiso de ejecución para el usuario 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 
Cuestiones relacionadas