Farklı bir kullanıcının güvenlik bağlamında bir iş parçacığı nasıl başlatılır? Bir süreç normal olarak bir iş parçacığı başlattığında, güvenlik içeriği de iletilir, ancak farklı bir kullanıcının yöneticisi ile farklı bir güvenlik bağlamında bir iş parçacığı nasıl başlatılır?Farklı bir güvenlik bağlamında bir iş parçacığı nasıl başlatırım?
cevap
CurrentPrincipal
, iş parçacığı başladıktan sonra iş parçacığı kodunun ilk işleyişini ayarlayabileceğinizi ve sonra yalnızca başka bir ilkeyle çalıştırılması gereken kodu çalıştırmaya başlayabileceğinizi düşünüyorum.
Bu, herhangi bir .NET rol tabanlı denetime dikkat etmelidir. İşletim sistemine yapılan çağrılar için kimliğe bürünme gereksinimi duyarsanız, WindowsIdentity
'un kimliğine bürünebilirsiniz.
Kodu (veya çalışmıyor olabilir - bunu test vermedi):
public void Run(object principalObj) {
if (principalObj == null) {
throw new ArgumentNullException("principalObj");
}
IPrincipal principal = (IPrincipal)principalObj;
Thread.CurrentPrincipal = principal;
WindowsIdentity identity = principal.Identity as WindowsIdentity;
WindowsImpersonationContext impersonationContext = null;
if (identity != null) {
impersonationContext = identity.Impersonate();
}
try {
// your code here
} finally {
if (impersonationContext != null) {
impersonationContext.Undo();
}
}
}
...
Thread thread = new Thread(Run);
thread.Start(yourPrincipal);
Geçecek bir kod snippet'i güzel olurdu. ExecutionContext akışının da bastırılması gerektiğini düşünüyorum. – TrustyCoder
Neden "ExecutionContext" akışı engellenmeli? Kimliğe bürünme özelliğini kullanırken (burada yaptığım gibi), "ExecutionContext" ın SecurityContext'i güncelleştirilir (Reflector ile kontrol edilir, bu MS uygulamasında dahili "UpdateThreadWI" yönteminde olur). Soru sorumlusu için – Lucero
mu yaptı? –
Ben başarı ile kimliğine bürünen teknikleri like this kullandık.
bir programlama bağlamında "bürünme" altında başlangıçta kullanıcı bağlamında, yani bir uygulama, başlatan kullanıcının başka bir kullanıcı içerik kodunu yürüten bir tekniğini belirtmektedirgeçici kez değiştirilen veya bir uygulamanın çalıştırılması sırasında birden çok kez.
bu etmektir yapmanın nedeni bir uygulamanın geçerli kullanıcı bağlam yapmak yasaktır olduğu görevleri yerine getirir. Tabii ki bir uygulama fazla ayrıcalık infaz kullanıcıya vermek, ancak genellikle kötü bir fikir (nedeniyle güvenlik kısıtlamaları) veya imkansız (örn Eğer bir makineye tam yönetici erişimi yoksa böyle yap).
- 1. Farklı bir iş parçacığı üzerinde başka bir işlem nasıl çalıştırılır
- 2. Bir "gerçek" iş parçacığı
- 3. İş parçacığı güvenlik açığı (erişimci yöntemi)
- 4. Farklı bir UI iş parçacığı içinde bir DocumentViewer içeriğini yazdırma
- 5. Bir iş parçacığı veya iş parçacığı için bir DAO DAO?
- 6. Görev çalıştıran bir iş parçacığı nasıl adlandırılır?
- 7. Kivy için GUI'de bellek hatalarını önlemek için hesaplamaları yapmak üzere yeni bir iş parçacığı nasıl başlatırım?
- 8. Çocuk bağlamında yay güvenlik içeriği nasıl oluşur
- 9. iş parçacığı
- 10. .NET'te bir iş parçacığı başlatılıyor
- 11. Bir daemon iş parçacığı yalnızca
- 12. Bir iş parçacığı oluşturma işlevine
- 13. Temsilci farklı iş parçacığı üzerinde çağrılmadı
- 14. Bir iş parçacığı özellikle blok
- 15. başka bir iş parçacığı (Net)
- 16. UEFI'da bir iş parçacığı oluşturma
- 17. Bir iş parçacığı içinde nasıl eklenir?
- 18. İş parçacığı tanıtıcısı iş parçacığı tanıtıcısı
- 19. iş parçacığı içinde yerel depolama iş parçacığı
- 20. Sadece bir iş parçacığında çalışan birkaç 'iş parçacığı' nasıl işlenir
- 21. Tek bir iş parçacığı kullanarak çoklu iş parçacığını nasıl gerçekleştirirsiniz?
- 22. Bir sunucudan bir iş parçacığı oluşturabilir miyim?
- 23. İş parçacığı .NET 4.0 için Güvenlik ve Kapsam Yönetimi ObjectCache
- 24. Python'daki bir iş parçacığını nasıl öldürebilirim
- 25. Bir atomic_flag değişkenini bir sınıfın üyesiyse nasıl başlatırım?
- 26. Tomcat iş parçacığı havuzundaki iş parçacığı sayısı nasıl artırılır?
- 27. Python 2, TCPServer başka bir iş parçacığı
- 28. ArrayAdapter'te farklı bir iş parçacığı üzerinde bir geri arama içinde DataSetChanged nasıl bildirilir? - Android
- 29. Bir iş parçacığı java'nın çalışma zamanını yakalayın
- 30. bir linux çekirdek modülünde iş parçacığı afinitesini
İlgili [post] (https://stackoverflow.com/a/7250145/465053) - Bir uygulamayı çalıştırırken bir kod parçasını çalıştırmak için AD hesabının kimliğine bürünme nasıl yapılır? – RBT