Hallo
Ich dachte ich h�tte das Code Access Security Prinzip langsam verstanden,
scheint aber nicht so:
Situation:
- VS.NET Final, XP Pro
- Meine Assembly ist signiert -> strong name
- Ich habe f�r die Assembly auf Machine und Userebene eine Code Group
eingerichtet, mit Strong Name als Membership Condition
- Die Assembly liegt auf einem Netzwerkdrive (-> Local Intranet)
- Die Assembly speichert und l�dt Files vom IsolatedStorge im User/Assembly
Kontext
- Die Files werden A direkt gelesen und geschrieben oder B via
XmlSerializer.
Bei A habe ich keine Probleme, aber B scheint nur zu funktionieren wenn ich
der Code Group das FullTrust Permission Set zuweise. Es funktioniert
seltsamerweise auch nicht wenn ich Everything, also eigentlich alle Rechte
zuweise. Ich nehme mal an der Serializer ben�tigt Reflection Rechte, aber
diese sollten meines Erachtens in Everything abgedeckt sein.
Ich kann mir das ganze nur erkl�ren, dass bei Everything das ganze durch
irgendwelchen Denies an anderen Orten �berdeckt werden k�nnten, die bei
FullTrust gar nicht erst angewendet werden. Da k�nnte zb. die CodeGroup
Local Intranet dagegenspielen. Allerdings sehe ich da keine expliziten
Denies, sondern nur einige nicht erteilte Grants ...
Ziel: Ich m�chte der Assembly nur die allern�tigsten Rechte zuweisen, und
diese dann auch deklarativ einbinden, und alle anderen ablehnen ...
Any Hints?
Fehlermeldung:
System.InvalidOperationException: There was an error generating the XML
document
. ---> System.Security.SecurityException: Request failed.
at System.Security.CodeAccessSecurityEngine.CheckSetHelper(PermissionSet
gran
ts, PermissionSet denied, PermissionSet demands)
at System.Security.CodeAccessSecurityEngine.CheckSet(PermissionSet
permSet, S
tackCrawlMark& stackMark, Int32 checkFrames, Int32 unrestrictedOverride)
at System.Security.CodeAccessSecurityEngine.Check(PermissionSet permSet,
Stac
kCrawlMark& stackMark)
at System.Security.PermissionSet.Demand()
at System.Xml.Serialization.TempAssembly.InvokeWriter(Int32 methodIndex,
XmlW
riter xmlWriter, Object o, ArrayList namespaces)
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,
Obje
ct o, XmlSerializerNamespaces namespaces)
--- End of inner exception stack trace ---
at System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter,
Obje
ct o, XmlSerializerNamespaces namespaces)
at System.Xml.Serialization.XmlSerializer.Serialize(Stream stream, Object
o)
at cdrnet.Langman.LangMan.Main(String[] args)
Der entsprechende Codeabschnitt:
//....
IsolatedStorageFile isoStore =
IsolatedStorageFile.GetStore(IsolatedStorageScope.User |
IsolatedStorageScope.Assembly, null, null);
if(isoStore.GetDirectoryNames("lang_native").Length == 0)
isoStore.CreateDirectory("lang_native");
IsolatedStorageFileStream isoStream = new
IsolatedStorageFileStream(@"lang_native\" + rsparr[1] + ".xml",
FileMode.Create, FileAccess.Write, isoStore);
XmlSerializer serializer = new XmlSerializer(typeof(LangPack),new Type[]
{typeof(LangItem)});
serializer.Serialize(isoStream, lp);
isoStream.Close();
isoStore.Close();
//....
LangPack und LangItem sind lokale Klassen, lp ist eine Instanz von LangPack.
LangPack beinhaltet LangItem Instanzen in einer ArrayList. Das ganze
Funktioniert auch, sofern FullTrust ...
Was Caspol meint: (Testweise mit PermissionSet Everything der CodeGroup
zugewiesen)
O:\>caspol -rsp
z:\datashare\Christoph\myDotNet\langman\bin\Release\langman.exe
Microsoft (R) .NET Framework CasPol 1.0.3705.0
Copyright (C) Microsoft Corporation 1998-2001. All rights reserved.
Resolving permissions for level = Enterprise
Resolving permissions for level = Machine
Resolving permissions for level = User
Grant =
<PermissionSet class="System.Security.PermissionSet"
version="1">
<IPermission class="System.Security.Permissions.EnvironmentPermission,
mscorlib, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission class="System.Security.Permissions.FileDialogPermission,
mscorlib, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission class="System.Security.Permissions.FileIOPermission,
mscorlib, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission
class="System.Security.Permissions.IsolatedStorageFilePermission, mscorlib,
Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission class="System.Security.Permissions.ReflectionPermission,
mscorlib, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission class="System.Security.Permissions.RegistryPermission,
mscorlib, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission class="System.Security.Permissions.SecurityPermission,
mscorlib, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
version="1"
Flags="Assertion, UnmanagedCode, Execution, ControlThread,
ControlEvidence, ControlPolicy, SerializationFormatter, ControlDomainPolicy,
ControlPrincipal, ControlAppDomain, RemotingConfiguration, Infrastructure"/>
<IPermission class="System.Security.Permissions.UIPermission, mscorlib,
Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission class="System.Net.DnsPermission, System, Version=1.0.3300.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission class="System.Drawing.Printing.PrintingPermission,
System.Drawing, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
version="1"
Unrestricted="true"/>
<IPermission class="System.Diagnostics.EventLogPermission, System,
Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission class="System.Net.SocketPermission, System,
Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission class="System.Net.WebPermission, System, Version=1.0.3300.0,
Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission class="System.Diagnostics.PerformanceCounterPermission,
System, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
version="1"
Unrestricted="true"/>
<IPermission class="System.DirectoryServices.DirectoryServicesPermission,
System.DirectoryServices, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
version="1"
Unrestricted="true"/>
<IPermission class="System.Messaging.MessageQueuePermission,
System.Messaging, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
version="1"
Unrestricted="true"/>
<IPermission class="System.ServiceProcess.ServiceControllerPermission,
System.ServiceProcess, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"
version="1"
Unrestricted="true"/>
<IPermission class="System.Data.OleDb.OleDbPermission, System.Data,
Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
AllowBlankPassword="False"
Unrestricted="true"/>
<IPermission class="System.Data.SqlClient.SqlClientPermission,
System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c56193
4e089"
version="1"
AllowBlankPassword="False"
Unrestricted="true"/>
<IPermission
class="System.Security.Permissions.StrongNameIdentityPermission, mscorlib,
Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
version="1"
PublicKeyBlob="0024000004800000940000000602000000240000525341310004000001000
10081609EAE005B74ACCD79247BAA99B4B17EE5D01B81B09789C4FDBF704A7A800C1693C4917
11D391C15399DCDE3E563D68F40766D82DAE9D1DDDFF8873F31198F0DFD54C605F6DB0358A1B
37F36E6EF2482981E4E5230628C1AD563F4964AF67701806F91A118D3F76B0C811B1D44330CF
E1C0DED3D8E4959062245B80274CFD0"
Name="langman"
AssemblyVersion="2.0.775.15877"/>
<IPermission class="System.Security.Permissions.UrlIdentityPermission,
mscorlib, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
version="1"
Url="file://Z:/datashare/Christoph/myDotNet/langman/bin/Release/langman.exe"
/>
<IPermission class="System.Security.Permissions.ZoneIdentityPermission,
mscorlib, Version=1.0.3300.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089"
version="1"
Zone="Intranet"/>
</PermissionSet>
Success
| [dotnetdecsharp] als [email protected] subscribed
| http://www.dotnetgerman.com/archiv/dotnetdecsharp/ = Listenarchiv
| Listenregeln, sowie An- und Abmeldung zu dieser Liste:
| http://www.dotnetgerman.com/listen/dotnetdecsharp.asp