Sau khi triển khai phiên bản mới của ứng dụng ASP.NET 2.0 của chúng tôi, nó bắt đầu tăng ngoại lệ bảo mật: „System.Security.SecurityException: Yêu cầu cho phép loại 'System.Web.AspNetHostingPermission, Hệ thống, Phiên bản = 2.0.0.0, Văn hóa = trung lập, PublicKeyToken = b77a5c561934e089' không thành công.Các ngoại lệ bảo mật trong ASP.NET và Tải hồ sơ người dùng tùy chọn trong IIS 7.5
Sau khi nghiên cứu nhanh trên internet, chúng tôi có thể giải quyết vấn đề này bằng cách đặt „Tải hồ sơ người dùng“ thành True trong hồ bơi ứng dụng IIS 7.5. Giải pháp này cũng được nhắc đến nhiều lần ở đây trên stackoverflow:
- Strange ASP.NET error !
- System.Web.AspNetHostingPermission Exception on New Deployment
- Running a asp.net web application project on IIS7 throws exception
Tuy nhiên chúng tôi không thể tìm ra lý do tại sao nó phải là sự thật. Chúng tôi đã xem xét tất cả các thay đổi trong phiên bản mới (vui lòng chỉ có một vài), nhưng không tìm thấy bất kỳ điều gì đáng ngờ (không truy cập vào dữ liệu đăng ký hoặc tạm thời như một số bài viết được đề xuất, v.v.). Ai có thể cho chúng tôi gợi ý khi một ứng dụng ASP.NET được lưu trữ trong IIS 7.5 cần „Tải hồ sơ người dùng" tùy chọn thiết lập để đúng?
chi tiết:
- Ứng dụng hồ bơi: .NET 2.0; Chế độ đường ống được quản lý - Cổ điển; Sắc - tùy chỉnh tài khoản miền
- Trong IIS 6.0 (W2K3): Cũ và phiên bản mới của việc ứng dụng tốt
- Trong IIS 7.5 (W2K8-R2): Phiên bản cũ của ứng dụng hoạt động tốt; phiên bản mới của ứng dụng tăng an ninh ngoại lệ - nó bắt đầu làm việc sau thiết lập “Load Hồ sơ người dùng” True
Cảm ơn bạn!
EDIT: Cuối cùng chúng tôi đã tìm thấy nguyên nhân của vấn đề này! Quản trị viên của chúng tôi đã sử dụng kỹ thuật khác nhau để sao chép phiên bản ứng dụng mới từ môi trường dàn dựng sang môi trường sản xuất. Ông đã sử dụng máy chủ web làm trung gian. Sau khi donwloading nén phát hành xây dựng hiện vật để môi trường sản xuất và sau đó giải nén các tập tin, họ vẫn còn được đánh dấu là "bị chặn" bởi vì họ đến từ máy tính khác nhau. Xem thêm https://superuser.com/questions/38476/this-file-came-from-another-computer-how-can-i-unblock-all-the-files-in-a. ASP.NET sau đó logic thực thi các tệp nhị phân này trong phần tin cậy thay vì tin cậy hoàn toàn và thực sự đã gây ra các ngoại lệ bảo mật được đề cập trong ứng dụng của chúng tôi.
Đặt "Tải hồ sơ người dùng" thành True đã khắc phục ngoại lệ bảo mật dưới dạng tác dụng phụ. Nếu "Tải hồ sơ người dùng" được đặt thành Sai, thì ứng dụng của chúng tôi (không phải mã của chúng tôi, có thể là một số.NET BCL hoặc lắp ráp bên ngoài) đang cố gắng truy vấn thông tin cơ bản về thư mục "C: \ Windows \ System32 \ config \ systemprofile \ AppData \ Local \ Microsoft \ Windows \ Tệp Internet Tạm thời" mà danh tính của hồ bơi ứng dụng không được phép:
- với niềm tin đầy đủ: access denied đến hoạt động truy vấn này không tăng bất kỳ ngoại lệ
- với niềm tin phần: access denied đến hoạt động truy vấn này làm tăng an ninh ngoại lệ
Nếu "Load Hồ sơ người dùng" là được đặt thành True, khi đó hồ sơ tạm thời trong thư mục Users được tạo mỗi khi hồ bơi ứng dụng bắt đầu. Ứng dụng của chúng tôi sau đó đang cố truy vấn thông tin về thư mục "Tệp Internet Tạm thời" của tiểu sử này, danh tính của hồ bơi ứng dụng được phép. Do đó không có ngoại lệ nào được nâng lên ngay cả với sự tin tưởng một phần.
Phiên khắc phục sự cố thực sự thú vị! :)
Cảm ơn công việc điều tra Peter, tôi đã gặp vấn đề tương tự và tiện ích suối (được liệt kê trong câu hỏi superuser.com) là cách tôi bỏ chặn tất cả các tệp trong thư mục webapp của tôi. Và bây giờ tôi có thể tắt tùy chọn Tải hồ sơ người dùng! –
Hoàn toàn tuyệt vời, chúng tôi chỉ gặp phải vấn đề này và không thể giải thích đúng. –
câu trả lời dưới đây có giải thích chi tiết http://stackoverflow.com/questions/17149132/what-exactly-happens-when-i-set-loaduserprofile-of-iis-pool –