我有一个在Visual Studio 2017中开发的.NET应用程序,部署到IIS(7.5版(服务器上,经过一年的正常工作,在我发布到生产环境后,该服务器现在收到以下错误:
对象"[表名]"、数据库"[数据库名]"和架构"dbo"的UPDATE权限被拒绝
对应用程序所做的唯一更改是更新.aspx页面中的HTML链接。
在IIS中,我使用以下设置创建了一个自定义应用程序池:
Name: Safety App Pool
.NET Framework: v4.0
Managed Pipeline Mode: Integrated
Identity: ApplicationPoolIdentity
在SQL Server中,我为IIS APPPOOL\Safety App Pool设置了安全登录,并将其添加到数据库的用户中,并明确授予该用户对数据库的连接、删除、执行、插入、选择和更新权限。记住,就在一周前,这个设置还不错。我上周三发表了这篇文章,然后休了几天年假(当然(,回来后发现人们无法从网站上进行更新或插入。
真正奇怪的是,即使我将应用程序池更改为另一个当前仍在工作并能够更新/插入到同一数据库的应用程序池,我仍然会得到这个特定应用程序无法得到的错误。这就是为什么我认为web.config文件中存在某些设置,或者Visual Studio在发布过程中专门做的某些设置导致了问题。然而,在上周投入生产之前,我没有对任何配置/发布文件进行任何更改。我已经复制并粘贴了应用程序事件日志中显示的错误:
Event code: 3005
Event message: An unhandled exception has occurred.
Event time: 7/18/2018 10:24:43 AM
Event time (UTC): 7/18/2018 3:24:43 PM
Event ID: 81f28c8d624b48f2a02c489663556877
Event sequence: 42
Event occurrence: 1
Event detail code: 0
Application information:
Application domain: /LM/W3SVC/1/ROOT/Safety-2-131764005145890618
Trust level: Full
Application Virtual Path: /Safety
Application Path: D:wwwrootSafety
Machine name: IGSKIACWVMGS011
Process information:
Process ID: 6600
Process name: w3wp.exe
Account name: IIS APPPOOLSafety App Pool
Exception information:
Exception type: SqlException
Exception message: The UPDATE permission was denied on the object 'SHA_Site_Servicing', database 'simsdb', schema 'dbo'.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
at System.Data.Linq.ChangeDirector.StandardChangeDirector.DynamicUpdate(TrackedObject item)
at System.Data.Linq.ChangeDirector.StandardChangeDirector.Update(TrackedObject item)
at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
at Safety.SHAEdit.ibHazard_Command(Object sender, CommandEventArgs e) in D:gitrepossimsSafetySHAEdit.aspx.cs:line 482
at System.Web.UI.WebControls.ImageButton.OnCommand(CommandEventArgs e)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
Request information:
Request URL: http://sims.water.usgs.gov/Safety/SHAEdit.aspx?site_id=3000336
Request path: /Safety/SHAEdit.aspx
User host address: 136.177.160.25
User: GSdterry
Is authenticated: True
Authentication Type: Negotiate
Thread account name: IIS APPPOOLSafety App Pool
Thread information:
Thread ID: 57
Thread account name: IIS APPPOOLSafety App Pool
Is impersonating: False
Stack trace: at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
at System.Data.Linq.ChangeDirector.StandardChangeDirector.DynamicUpdate(TrackedObject item)
at System.Data.Linq.ChangeDirector.StandardChangeDirector.Update(TrackedObject item)
at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
at Safety.SHAEdit.ibHazard_Command(Object sender, CommandEventArgs e) in D:gitrepossimsSafetySHAEdit.aspx.cs:line 482
at System.Web.UI.WebControls.ImageButton.OnCommand(CommandEventArgs e)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
尝试删除
Trusted_Connection=True;
或
Integrated Security=True;
从您的连接字符串。