Сервер, на котором размещен 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.
EDIT: дополнительная информация, вот трассировка стека:
[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 никогда не показывает, что он касается файла ...
РЕДАКТИРОВАТЬ: Дальнейшие странности - перезапуск пула приложений с его запуском под учетной записью Local System все еще имеет проблемы, что примерно так же странно, как и получается! Как будто, несмотря на сообщение об ошибке, он на самом деле пытается сделать что-то невозможное (например, с неверным путем), а не просто является проблемой с разрешениями.
РЕДАКТИРОВАТЬ: Больше информации - я только что запустил свое маленькое приложение для тестирования консоли из службы под названием «СЕТЕВАЯ СЛУЖБА» и (после первоначальной попытки, которая истекла по времени), она прошла успешно. Так что это не вопрос прав доступа с точки зрения учетной записи пользователя ... это что-то о среде, в которой он работает ...