代码之家  ›  专栏  ›  技术社区  ›  Gary McGill

如何让elmah使用sql server(权限问题)

  •  8
  • Gary McGill  · 技术社区  · 14 年前

    我已经让elmah在我的(cassini)开发服务器上工作了,并且对它非常满意,但是现在我正试图将所有东西移到我的生产服务器(iis7)上,蜜月似乎结束了。

    我已经过了 "gotcha" with IIS7 ,坦率地说,这本可以在文档中更好地突出显示,如果我只使用内存日志,那么它就可以工作。

    但是,我正试图让它使用SQL Server日志(就像我在开发系统上所做的那样),我得到的错误大致如下:

    对象elmah_geterrorsxml的执行权限被拒绝

    嗯,很好。我知道如何授予数据库权限,但我很难理解需要授予哪些用户和哪些存储过程/表访问权限。

    真正让我困惑的是,我不需要做这样的事情就可以让它在我的开发服务器上工作。我能看到的唯一区别是,在我的开发服务器上,它似乎连接为nt authority\iusr,而在我的生产服务器上,它似乎连接为nt authority\network service。(它只是使用了一个可信的连接,所以我没有显式地将其配置为这样做—我认为这与web服务器有关)。 更新 :我已经确定了这一点,因为我使用的是卡西尼号,它实际上是以我(管理员)的身份登录的,而不是iusr,这就解释了为什么我没有遇到任何权限问题。

    在我的开发服务器上,iusr帐户是公共数据库角色的成员,并且可以访问所需的数据库(再次称为“public”)。没有明确授予对象级权限。[见以上更新-这无关紧要]。

    在我的生产服务器上,我以完全相同的方式添加了网络服务(公共数据库角色,对数据库的显式访问称为“public”)。但是,我得到了这个许可错误。为什么?!!![见以上更新-我 不要 获取权限错误是因为我正在以管理员身份运行]。

    当然,如果它在本地工作只是“运气”,那么我需要知道要授予哪些sps/表访问权限。我猜是3个sps和 表,但最好(再次)看到一些使这一点明确的文档。

    2 回复  |  直到 10 年前
        1
  •  7
  •   Eric King    14 年前

    您是否在web.config中为elmah提供了完整的connectionstring?如果是这样,您应该确切知道要向哪个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>
    
        2
  •  13
  •   gicalle    10 年前

    向用户名授予执行权限所需的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