尽管在SSMS中设置了具有正确权限的应用程序池,但IIS应用程序对SQL数据库表没有写入权限



我有一个在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;

从您的连接字符串。

最新更新