我已经让ELMAH在我的(Cassini)开发服务器上工作了,并对它非常满意,但现在我正在尝试将所有东西都移到我的生产服务器(IIS7),蜜月看起来就像结束了。 / p>
我已经超越了"gotcha" with IIS7,在文档中可以更好地突出显示,如果我只使用内存中的日志,那么它就可以了。
但是,我试图让它使用SQL Server日志(就像我在开发系统上那样),并且我遇到了错误:
对象ELMAH_GetErrorsXml
上的EXECUTE权限被拒绝
好吧,好吧。我知道如何授予数据库权限,但我真的很难理解我需要授予访问权限的用户和存储的proc / tables。
让我感到困惑的是,我没有做任何这样的事情让它在我的开发服务器上工作。我能看到的唯一区别是在我的开发服务器上它似乎连接为NT AUTHORITY \ IUSR,而在我的生产服务器上它似乎连接为NT AUTHORITY \ NETWORK SERVICE。 (它只是使用可信连接,所以我没有明确配置它来做到这一点 - 我认为它与Web服务器有关)。 更新:我已经确定,因为我正在使用Cassini,它实际上是以我(管理员)登录而不是IUSR,这解释了为什么我没有得到任何权限问题。
在我的开发服务器上,IUSR帐户是公共数据库角色的成员,并且可以访问所需的数据库(再次作为“公共”)。没有明确授予对象级权限。 [见上面的更新 - 这是无关紧要的]。
在我的生产服务器上,我以完全相同的方式添加了NETWORK SERVICE(公共数据库角色,显式访问数据库为“public”)。然而,我得到了这个权限错误。为什么?!! [请参阅上面的更新 - 我不获取权限错误的唯一原因是因为我作为管理员运行]。
当然,如果它在本地工作的事实只是“运气”,我将需要知道哪些SP /表授予访问权限。我的猜测是所有3个SP和不表,但是(再次)看到一些使这个显式的文档会很好。
答案 0 :(得分:13)
为用户USER_NAME提供执行权限所需的sql示例:
GRANT EXECUTE ON ELMAH_GetErrorsXml TO USER_NAME
GRANT EXECUTE ON ELMAH_GetErrorXml TO USER_NAME
GRANT EXECUTE ON ELMAH_LogError TO USER_NAME
答案 1 :(得分:7)
您是否在web.config中为ELMAH提供了完整的连接字符串?如果是这样,您应该确切地知道要授予权限的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>