Tôi đang phát triển một ứng dụng cần tải trình cắm vào các miền ứng dụng con riêng biệt. Chỉ một trình cắm được tải vào một miền ứng dụng con. Mỗi trình cắm thêm yêu cầu bản sắc Windows khác nhau và các danh tính này khác với danh tính Windows được sử dụng trong miền ứng dụng mặc định (cha mẹ). Mỗi trình cắm thêm tải một hoặc nhiều trình cắm thêm con của nó.Mạo danh cấp miền ứng dụng
Ví dụ: Danh tính miền ứng dụng mặc định là Authority \ Limited (Quyền là tên miền hoặc tên máy). Hai trình cắm được tải vào hai miền ứng dụng con. Danh tính của các trình cắm được tải là Authority \ Privileged1 và Authority \ Privileged2. Authority \ Privileged1 và Authority \ Privileged2 có tất cả truy cập cơ sở dữ liệu cần thiết để Database1 và Database2, tương ứng, trong khi Authority \ TNHH không có quyền truy cập vào bất kỳ cơ sở dữ liệu nói trên.
Khi tạo miền ứng dụng trẻ em, tôi gọi System.AppDomain.SetThreadPrincipal phương pháp truyền System.Security.Principal.WindowsPrincipal dụ. Ví dụ được tạo từ Ví dụ System.Security.Principal.WindowsIdentity được tạo từ mã thông báo người dùng trùng lặp (xem http://support.microsoft.com/kb/306158). Tôi đã bỏ qua cuộc gọi đến Phương thức WindowsIdentity.Impersonate vì tôi đang ở miền ứng dụng mặc định trong khi tạo cá thể WIndowsPrincipal.
Tôi hy vọng rằng việc đặt chủ đề của tên miền ứng dụng sẽ đủ để các trình cắm thêm được tải thành công đăng nhập vào cơ sở dữ liệu tương ứng và thực thi một số câu lệnh T-SQL. Trước sự ngạc nhiên của tôi, giá trị trả về bởi phương thức WindowsIdentity.GetCurrent() được sử dụng khi mở kết nối tới cơ sở dữ liệu. Giá trị được trả về bởi phương thức này là nhận dạng quy trình hoặc danh tính mạo danh.
Vì danh tính quá trình không có quyền cần thiết để làm việc với cơ sở dữ liệu nên không được chấp nhận. Do đó, mạo danh phải đến để chơi. Tuy nhiên, mạo danh phải diễn ra chỉ trong các miền ứng dụng con. Mỗi trình cắm đều cho thấy các phương thức được sử dụng để thực hiện tải và dỡ tải trình cắm. Tôi hiểu rằng tôi phải thực hiện mạo danh ngay từ đầu và hoàn tác việc mạo danh khi kết thúc các phương pháp đó. Tuy nhiên, việc mạo danh phải được thực hiện đối với tất cả các chuỗi được sinh ra trong các miền ứng dụng con. Vì mỗi trình cắm thêm tải một hoặc nhiều trình cắm thêm con của nó và mỗi trình cắm thêm có thể sinh ra một hoặc nhiều luồng, việc mạo danh sẽ phải được thực hiện ở nhiều nơi và trông rất lộn xộn.
Có thể thực hiện mạo danh chỉ một lần để ảnh hưởng đến tất cả các chủ đề được sinh ra trong các miền ứng dụng con?
Bạn có thể xem xét sử dụng quy trình con thay vì tên miền con và chạy các quy trình này trong tài khoản mong muốn. Việc thiết lập từ xa rõ ràng sẽ làm phức tạp mọi thứ một chút nhưng có lẽ bạn đã có một API tại chỗ phù hợp với các loại remoting. –
Ứng dụng đã hỗ trợ chạy các tiến trình con theo nhận dạng tùy ý. Tuy nhiên, nó phải hỗ trợ điều tương tự cho các miền ứng dụng con. Cảm ơn. –