Fragen zu CAS (Security/Permissions)



  • Hallo,

    nachdem ich mir die ganzen Webcasts zu CAS angesehen habe und einiges gelesen habe, bleiben dennoch ein paar Fragen offen (zumindest habe ich keine Antworten gefunden).

    Mir ist klar, wie man Codegruppen und Berechtigungssätze erstellt und soweit auch klar, wie man sie verwendet.

    Etwas grundsätzliches ist der Unterschied zwischen z.B.

    UIPermission(PermissionState::Unrestricted)
    

    und

    UIPermission(UIPermissionWindow::AllWindows)
    

    (UIPermission ist hier nur ein Beispiel)
    Was gibt es denn noch für einen wesentlichen Unterschied zwischen diesen beiden Berechtigungen? Stehen diese denn nicht beide für unrestricted access?

    Dann sind da noch die deklarative und die imperative Syntax. Bei der deklarativen Syntax wird quasi kein Code erzeugt und die Permissions werden schon beim Programmstart evaluiert, soweit ich das verstanden habe.
    Dafür müssen sie dann im Manifest stehen?
    Denn man kann ja genauso diese Syntax über einer Klasse verwenden und dann gilt die (hoffentlich erteilte Berechtigung) nur für die Klasse.
    Ist das soweit richtig?
    Stackwalk... alles was sich dort im aufgerufenem Scope befindet, oder?

    Die imperative Syntax erzeugt Objekte, die (so dachte ich bisher) dann auch für die gesamte Assembly gelten (so lange diese Objekte existieren oder sichtbar sind). Dann habe ich aber irgendwo in einem Halbsatz gelesen, dass dem nicht so ist und solch ein Objekt auch nur innerhalb der Klasse, in der es erstellt wurde, gültig ist (mal von jedem Sichtbarkeitsbereich abgesehen).
    Was ist da nun richtig?
    Ausserdem benötigt der imperative Weg wohl mehr Resourcen (Rechenzeit und auch Speicher für die Objekte), richtig?

    Ich frage, weil ich natürlich sehr gerne schon - gleich nach Programmstart - alle Rechte einfordern will und dementsprechend das Programm schon abbreche (oder die CLR macht das schon) oder eben dann, ohne weitere Anforderungen, mit einem definierten Set arbeiten will. Ist das so sinnvoll/möglich?
    (mir ist klar, dass es einfach ist, Codegruppe und Berechtigungsset mit dem Programm zu installieren - dann bin ich auf der sicheren Seite. Aber was ist, wenn ein Programm z.B. nur auf einem User-Account ausgeführt wird? Dann kann ja keine Gruppe/Set installiert werden und das Programm muss es sich seine Rechte selbst sichern).

    Dann wären da noch RequestMinimun/Optional/Refuse.
    Wie kann ich damit ein definiertes Set zusammenstellen/einfordern?
    Lege ich zuerst alle Berechtigungen fest (noch ohne Demand) und führe dann ein Demand, oder besser, RequestMinimun aus? Diese Request... erscheinen mir ziemlich schwammig (und es war nicht viel darüber im Netz zu finden).
    Macht das überhaupt Sinn so, denn gerade in den ganzen Webcasts wurde RequestMinimum, etc. nie verwendet (wird wohl einen Grund haben, der sich mir jedoch nicht ganz erschliesst).
    EDIT: Nun habe ich doch noch Informationen zu RequestMinimum gefunden. Also kann ich damit alle essentiellen Rechte, die das Programm benötigt, einbinden und diese werden dann so auch von der CLR evaluiert (das erleichtert schon einiges).

    Dann, letzte Frage, hat vielleicht jemand einen Link, der die Einstellungen der Berechtigungssätze (also z.B. Sicherheit->Serialisierungsformatierung aktivieren, etc.) etwas genauer erläutert.
    EDIT: Ich meine die genaueren Bedeutungen der möglichen Einstellungen/Freigaben.

    Ich weiss, das sind einige Fragen und ich lasse mir auch gerne (naja gerne...) sagen, dass doch alles im Netz zu finden ist. Jedoch habe ich ausführlich gesucht und ales gelesen und angesehen. Obige Unsicherheiten bleiben einfach noch.

    Vielen Dank für die Aufmerksamkeit und ich hoffe, meine Fragen erscheinen nicht zu dumm.



  • Hmmm... wenn ich z.B.:

    [assembly:UIPermissionAttribute(SecurityAction::RequestMinimum, Window=UIPermissionWindow::AllWindows)];
    

    in AssemblyInfo.cpp schreibe und in der entsprechenden Codegroup nur z.B. SafeSubWindows erlaubt habe, dann started das Programm (wie erwartet) nicht, aber die Fehlermeldung ist irreführend (FileLoadException). Also nicht gerade das, was ein User verstehen würde. Somit fällt diese Art der zwar Administrator-freundlichen (permview.exe) CAS Handhabung wohl weg. Oder ich übersehe da etwas.


Log in to reply