Como faço para que Elmah funcione com o SQL Server (Problemas de permissão)
-
26-09-2019 - |
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.
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