Pergunta

Eu tenho Elmah trabalhando no meu servidor de desenvolvimento (Cassini) e fiquei muito feliz com isso, mas agora que estou tentando mover tudo para o meu servidor de produção (IIS7), a lua de mel parece estar acabando.

Eu passei pelo "Gotcha" com iis7, que, francamente, poderia ter sido melhor destacado na documentação e, se eu apenas usar o log na memória, ele funciona.

No entanto, estou tentando fazer com que o SQL Server Log (como faço no meu sistema de desenvolvimento) e estou recebendo um erro ao longo das linhas de:

A permissão de execução foi negado no objeto Elmah_GeterrorRorsxml

Bem, tudo bem. Eu sei como conceder permissões de banco de dados, mas estou realmente lutando para entender a qual usuário e quais tabelas armazenadas eu preciso conceder acesso.

O que realmente está me confundindo é que eu não precisava fazer nada assim para fazer com que funcione no meu servidor de desenvolvimento. A única diferença que posso ver é que, no meu servidor de desenvolvimento, parece conectar -se como autoridade NT iusr, enquanto no meu servidor de produção parece conectar -se como serviço de rede autoridade . (Está apenas usando uma conexão confiável, para que eu não a configurei explicitamente para fazer isso - presumo que tenha a ver com o servidor da web). ATUALIZAR: Desde então, estabeleci isso porque estou usando Cassini, ele estava realmente fazendo login como eu (um administrador) e não o IUSR, o que explica por que não tive nenhum problema de permissão.

No meu servidor de desenvolvimento, a conta do IUSR é membro da função de banco de dados pública e tem acesso ao banco de dados necessário (novamente como "público"). Não há concessão explícita de permissões no nível de objeto. [Veja a atualização acima - isso é irrelevante].

No meu servidor de produção, adicionei o serviço de rede exatamente da mesma maneira (função de banco de dados público, acesso explícito ao banco de dados como "público"). No entanto, recebo esse erro de permissão. Por que?!! [Veja a atualização acima - a única razão pela qual eu não Obtenha um erro de permissão é porque estou executando como um administrador].

E, é claro, se o fato de funcionar localmente é apenas "sorte", precisarei saber a quais SPs/tabelas concedem acesso. Meu palpite seria todos os 3 sps e não A tabela, mas seria bom (novamente) ver alguma documentação que torna isso explícito.

Foi útil?

Solução

Você está fornecendo a Elmah um conjunto completo de conexões no web.config? Em caso afirmativo, você deve saber exatamente para qual usuário do DB conceder permissões, certo? E sim, a permissão seria executar os três procedimentos armazenados Elmah ...

Aqui está uma configuração que eu usei:

<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>

Outras dicas

Exemplo de SQL necessário para fornecer permissão de execução ao usuário 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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top