سؤال

كيف تبدأ مؤشر ترابط في سياق الأمان لمستخدم مختلف؟ عندما تبدأ العملية بشكل طبيعي ، يتم تمرير سياق الأمان أيضًا ، ولكن كيفية تشغيل مؤشر ترابط في سياق أمان مختلف مع مدير مستخدم مختلف؟

هل كانت مفيدة؟

المحلول

أعتقد أنه يمكنك فقط تعيين ملف CurrentPrincipal كأول عملية رمز مؤشر الترابط بعد بدء مؤشر الترابط ، ثم تبدأ فقط في تنفيذ الكود الذي من المفترض أن يتم تشغيله مع المدير الآخر.

هذا يجب أن يعتني بأي شيكات قائمة على الأدوار. إذا كنت بحاجة إلى انتحال شخصية أيضًا للمكالمات إلى نظام التشغيل ، فيمكنك انتحال شخصية WindowsIdentity.

الكود (قد يعمل أو لا يعمل - لم يختبره):

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);

نصائح أخرى

لقد استخدمت التقنيات مثله للانتحال مع النجاح.

يشير مصطلح "انتحال شخصية" في سياق البرمجة إلى تقنية تنفذ الرمز تحت سياق مستخدم آخر من المستخدم الذي بدأ التطبيق في الأصل ، أي أن سياق المستخدم يتم تغييره مؤقتًا مرة أو عدة مرات أثناء تنفيذ التطبيق.

السبب في القيام بذلك هو تنفيذ المهام التي لا يُسمح لسياق المستخدم الحالي للتطبيق بالقيام بذلك. بالطبع ، يمكنك منح المستخدم تنفيذ تطبيق المزيد من الامتيازات ، ولكن عادةً ما تكون هذه فكرة سيئة (بسبب قيود الأمان) أو مستحيلة (على سبيل المثال ، إذا لم يكن لديك وصول إداري كامل إلى جهاز للقيام بذلك).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top