Impersonation über eigenen parallelen Thread

13/01/2009 - 15:42 von Werner Schmidt | Report spam
Hallo Gruppe,

in unserer Anwendung wird (je nach Konfiguration) Impersonation verwendet.

Unser Programm zeigt Dokumente an. Um die anzuzeigenden Dateien zu
schützen, hat der eigentliche Benutzer beispielsweise keinen
Dateizugriff auf die physikalischen Dateien.
Zeigt ein derartiger Benutzer ein Dokument an, schaltet das Programm per
Funktion auf Impersonation und führt die entsprechenden Operationen aus.
Will der Benutzer anschließend das angezeigte Dokument per eMail
versenden, wird die Impersonation vorher wieder deaktiviert, so dass der
zustàndige eMail-Client auf das Konto des Benutzers zugreifen kann.

Nach diesen zwei Beispielsfàllen zu meiner eigentlichen Frage:
Da im Laufe der Programmausführung die Impersonation immer wieder ein-
und abgeschaltet werden muss, drückt dies natürlich auf die Performance
der Anwendung.
Daher würde ich gerne wissen, ob folgendes möglich wàre:

Ich würde gerne im Falle der aktivierten Impersonation beim Start des
Programms einen weiteren Thread starten, der parallel unter dem
Impersonation-Benutzer làuft.
Verwendet der Benutzer eine Methode, für die Impersonation notwendig
ist, wird diese nicht in seinem, sondern im Impersonation-Thread
ausgeführt, verwendet er hingegen eine Methode, für die keine
Impersonation notwendig ist, wird sein eigener Thread verwendet.

Ich habe mein Problem nicht bis zu Ende durchdacht, ich bitte auch
eventuelle Falschbegriffe zu entschuldigen, da ich mich mit
Multi-Threading noch nicht erschöpfend auseinandergesetzt habe.

Ich hoffe mein Anliegen ist klar geworden und hoffe auf entsprechende
Antworten (Google-Suchbegriffe, Links zu Tutorials/Artikeln etc.).


Vielen Dank im Voraus!

Gruß

Werner
 

Lesen sie die antworten

#1 Günter Prossliner
13/01/2009 - 17:21 | Warnen spam
Hallo Werner!

in unserer Anwendung wird (je nach Konfiguration) Impersonation
verwendet.



Ok.

Da im Laufe der Programmausführung die Impersonation immer wieder ein-
und abgeschaltet werden muss, drückt dies natürlich auf die
Performance der Anwendung.



Hast Du das _gemessen_? Wenn ja, dann ist zu prüfen ob in diesem Code noch
Optimierungspotential besteht. Eine Impersonisierung selbst ist eigentlich
eine ziemlich flotte Operation, vorausgesetzt der Benutzer wird nicht immer
wieder neu authentifiziert.

Das Token (also die WindowsIdentity Instanz) sollte im Speicher gehalten
werden, und lediglich die .Impersonate() Methode aufgerufen werden.

Du sprichst von Dateizugriffen, Dokumenten und Mails. In Relation zu diesen
Zugriffen sollte der Overhead der Impersonisierung durchaus vertretbar sein.

Ich würde gerne im Falle der aktivierten Impersonation beim Start des
Programms einen weiteren Thread starten, der parallel unter dem
Impersonation-Benutzer làuft.
Verwendet der Benutzer eine Methode, für die Impersonation notwendig
ist, wird diese nicht in seinem, sondern im Impersonation-Thread
ausgeführt, verwendet er hingegen eine Methode, für die keine
Impersonation notwendig ist, wird sein eigener Thread verwendet.



Um welche Anwendung handelt es sich? Windows-Forms, ASP.Net, Service, ...?

Prinzipiell ist ein solcher Ansatz möglich. Je nach Art der Anwendung bzw.
je nach detailierten Anforderungen ist aber ggf. mit einem erheblichen
Syncronisierungsaufwand zu rechnen. Eventuell ist auch eine Art
Thread-Pooling notwendig (wenn es sich um eine Server-Anwendung handelt und
mehrere impersonisierte Operationen gleichzeitig laufen sollten).



mfg GP

Ähnliche fragen