csharpindepth.com的服务器最近已经迁移。
它的大部分功能都正常工作,但我无法使用用于保存勘误、笔记等内容的数据库。
相关细节:
- 32位Windows Server 2003
- 已安装SQL Server Express 2005
- ASP.NET池在“NETWORK SERVICE”帐户下运行
- .NET 3.5
- 每个人都对数据库文件有完全的访问权限(目前仅为排除此原因!)
连接字符串:
Data Source=.;AttachDbFilename=|DataDirectory|\WebSiteData.mdf;
Integrated Security=True;User Instance=True
我只需创建一个新的WebSiteDataContext
(它的默认连接字符串如上所述)即可连接。
使用一个小的测试控制台应用程序从包含文件的目录运行,作为管理员帐户,使用相同的查询,我可以看到数据库的内容。
在ASP.NET中,我得到了这个异常:
SqlException (0x80131904): User does not have permission to perform this action.
编辑:更多信息,以下是堆栈跟踪:
[SqlException (0x80131904): User does not have permission to perform this action.]
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4844759
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392
System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) +35
System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) +144
System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) +342
System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) +221
System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) +189
System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) +4859187
System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) +31
System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) +433
System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) +66
System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +499
System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +65
System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +117
System.Data.SqlClient.SqlConnection.Open() +122
System.Data.Linq.SqlClient.SqlConnectionManager.UseConnection(IConnectionUser user) +44
System.Data.Linq.SqlClient.SqlProvider.get_IsSqlCe() +45
System.Data.Linq.SqlClient.SqlProvider.InitializeProviderMode() +20
System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +57
System.Data.Linq.DataQuery`1.System.Collections.Generic.IEnumerable<T>.GetEnumerator() +35
编辑:我的关于文件名必须正确的观点是错误的——更改连接字符串以使其与其他文件通信并不能解决错误。
ProcMon从未显示它接触文件……
编辑:进一步的奇怪现象——在本地系统帐户下重新启动应用程序池仍然存在问题,这是最奇怪的!好像尽管有错误消息,它实际上正在尝试做一些不可能的事情(例如使用错误的路径),而不仅仅是权限问题。
编辑:更多信息——我刚刚将小型测试控制台应用程序作为“NETWORK SERVICE”从服务中运行,并且(经过一次超时的初始尝试之后)它成功了。因此,它与用户帐户无关的权限问题......它与其运行的环境有关......