Máy chủ lưu trữ csharpindepth.com gần đây đã được di chuyển.Lỗi quyền người dùng khi truy cập cơ sở dữ liệu "cá thể người dùng" từ ASP.NET
Hầu hết nó được làm việc tốt, nhưng tôi không thể có được ở các cơ sở dữ liệu sử dụng để giữ errata, ghi chú, vv
chi tiết liên quan:
- 32 bit Windows Server 2003
- SQL Server Express 2005 đã cài đặt
- Hồ bơi ASP.NET chạy trong tài khoản "DỊCH VỤ MẠNG"
- .NET 3.5
- Mọi người đều có quyền đầy đủ các tập tin cơ sở dữ liệu (vào lúc này, chỉ để cai trị mà ra!) Chuỗi
kết nối:
Data Source=.;AttachDbFilename=|DataDirectory|\WebSiteData.mdf; Integrated Security=True;User Instance=True
Tôi đang kết nối chỉ bằng cách tạo ra một mới
WebSiteDataContext
(trong đó có các kết nối trên chuỗi làm mặc định của nó)
Sử dụng ứng dụng bảng điều khiển thử nghiệm nhỏ chạy từ thư mục chứa tệp, tài khoản quản trị viên, sử dụng cùng một truy vấn, tôi có thể xem nội dung của cơ sở dữ liệu.
Trong ASP.NET Tôi nhận được ngoại lệ này:
SqlException (0x80131904): User does not have permission to perform this action.
EDIT: Thông tin chi tiết, đây là stack trace:
[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
EDIT: Tôi đã sai lầm về tên tập tin cần phải được quyền - thay đổi chuỗi kết nối để làm cho nó nói chuyện với một tập tin khác nhau không thay đổi lỗi.
ProcMon không bao giờ thấy nó chạm vào tập tin ...
EDIT: oddities Hơn nữa - khởi động lại các hồ bơi ứng dụng với nó chạy dưới tài khoản Local System vẫn có vấn đề, đó là khoảng như lẻ như nó được! Nó như thể, mặc dù thông báo lỗi, nó thực sự cố gắng để làm điều gì đó không thể (ví dụ với con đường sai) thay vì chỉ là một vấn đề quyền.
EDIT: Thông tin thêm - Tôi vừa chạy ứng dụng bảng điều khiển thử nghiệm nhỏ từ dịch vụ là "DỊCH VỤ MẠNG" và (sau lần thử đầu tiên đã hết thời gian) thành công. Vì vậy, nó không phải là một điều khoản về tài khoản người dùng ... nó là một cái gì đó về môi trường mà nó chạy ...
OMG, Jon Skeet * đã hỏi * một câu hỏi? – rlbond
DataDirectory là đường dẫn UNC hay ổ đĩa được ánh xạ? –
@Brian: Không, | DataDirectory | là cách đề cập đến App_Data trong ASP.NET. Làm việc tốt trên máy cũ, và hoạt động tốt trong môi trường dev địa phương của tôi ... –