我最近开发了一个Web系统,使用的开发环境是VS.NET 2005,数据库是SQL Server 2005,此外使用了Enterprise Library.
Microsoft.Practices.EnterpriseLibrary.Logging是用于日志管理的,该模块将日志写入数据库时调用存储过程 "WriteLog ",存储过程和相关表都具备,并且在VS.NET 2005调试模式下,运行Web系统,记录日志的功能很正常.
可是一旦发布网站后,访问Web系统,发现就不能记录日志了.由于我在程序中设置了如果写入日志到数据库中失败后就将异常信息记录到操作系统,通过事件查看器可以看到异常信息如下(因信息太多,有所省略):
...
Exception Information Details:
======================================
Exception Type: System.Data.SqlClient.SqlException
Errors: System.Data.SqlClient.SqlErrorCollection
Class: 14
LineNumber: 1
Number: 229
Procedure: WriteLog
Server: BTTX-WIN2003
State: 5
Source: .Net SqlClient Data Provider
ErrorCode: -2146232060
Message: 拒绝了对对象 'WriteLog ' (数据库 'OutAlarm07 ',架构 'dbo ')的 EXECUTE 权限。
Data: System.Collections.ListDictionaryInternal
TargetSite: Void OnError(System.Data.SqlClient.SqlException, Boolean)
HelpLink: NULL
...
请各位专家帮我看看问题出在哪里,不甚感激.
------解决方案--------------------
看了一下,个人认为是你本地机上的数据库和网站上的数据库用户权限不一致
也可能是 Web.config 里面配置的用户是不一样的,网站上配置的用户没有执行存储过程的权限,可以试着授权
GRANT execute ON WriteLog TO [用户名]