C# 当被非特权用户使用时,NHibernate查询数据库失败

C# 当被非特权用户使用时,NHibernate查询数据库失败,c#,nhibernate,reflection,fluent-nhibernate,strongname,C#,Nhibernate,Reflection,Fluent Nhibernate,Strongname,我使用Fluent NHibernate 1.2、NH 3.1和castle生成代理。我试图以非管理员用户的身份运行应用程序(一个简单的win forms应用程序),但发现了以下异常: 无法获取StrongNameKeyPair的公钥。以前(我不确定我是如何绕过该步骤的),异常是创建代理实例失败。 2010年的一些博客文章表明Castle的动态代理可能在中等信任场景中存在问题,因此我尝试了使用sn-mn的运气,但这似乎没有多大作用 有人熟悉这种行为吗 谢谢, JK 编辑: 生成此异常的应用程序调

我使用Fluent NHibernate 1.2、NH 3.1和castle生成代理。我试图以非管理员用户的身份运行应用程序(一个简单的win forms应用程序),但发现了以下异常:
无法获取StrongNameKeyPair的公钥。
以前(我不确定我是如何绕过该步骤的),异常是
创建代理实例失败。

2010年的一些博客文章表明Castle的动态代理可能在中等信任场景中存在问题,因此我尝试了使用
sn-mn
的运气,但这似乎没有多大作用

有人熟悉这种行为吗

谢谢, JK

编辑
生成此异常的应用程序调用是NHibernate会话上的简单LINQ。 这是堆栈顶部的跟踪(整个跟踪大约有60行长):

mscorlib.dll!System.Reflection.StrongNameKeyPair.ComputePublicKey()+0xca字节
mscorlib.dll!System.Reflection.StrongNameKeyPair.PublicKey.get()+0x15字节
mscorlib.dll!System.Reflection.Emit.AssemblyBuilder.AssemblyBuilder(System.AppDomain域={System.AppDomain},System.Reflection.AssemblyName={System.Reflection.AssemblyName},System.Reflection.Emit.AssemblyBuilderAccess access=Run,string dir=null,System.Security.Policy.Evidence-Evidence=null,System.Security.PermissionSet-requiredPermissions=null,System.Security.PermissionSet-optionalPermissions=null,System.Security.PermissionSet-refusedPermissions=null,ref-System.Threading.StackScrawMark-stackMark=LookForMyCaller,System.Collections.Generic.IEnumerable unsafeAssemblyAttributes=null,System.Security.SecurityContextSource SecurityContextSource=CurrentAssembly)+0x4b8字节
mscorlib.dll!System.Reflection.Emit.AssemblyBuilder.InternalDefinedDynamicAssembly(System.Reflection.AssemblyName名称,System.Reflection.Emit.AssemblyBuilderAccess访问,字符串目录,System.Security.Policy.Evidence证据,System.Security.PermissionSet requiredPermissions,System.Security.PermissionSet optionalPermissions,System.Security.PermissionSet拒绝许可,ref System.Threading.StackScrawMark stackMark,System、 Collections.Generic.IEnumerable unsafeAssemblyAttributes,System.Security.SecurityContextSource SecurityContextSource)+0x7e字节
mscorlib.dll!System.AppDomain.InternalDefinedDynamicAssembly(System.Reflection.AssemblyName名称,System.Reflection.Emit.AssemblyBuilderAccess访问,字符串目录,System.Security.Policy.Evidence证据,System.Security.PermissionSet requiredPermissions,System.Security.PermissionSet optionalPermissions,System.Security.PermissionSet拒绝许可,ref System.Threading.StackScrawMark stackMark,System、 Collections.Generic.IEnumerable assemblyAttributes,System.Security.SecurityContextSource SecurityContextSource)+0x2c字节
mscorlib.dll!System.AppDomain.DefinedDynamicAssembly(System.Reflection.AssemblyName名称,System.Reflection.Emit.AssemblyBuilderAccess访问)+0x2b字节
Castle.Core.dll!Castle.DynamicProxy.ModuleScope.CreateModule(bool signStrongName=true)+0x1fa字节
Castle.Core.dll!Castle.DynamicProxy.ModuleScope.Actaindynamicmodulewithstrongname()+0x9d字节
Castle.Core.dll!Castle.DynamicProxy.ModuleScope.ActainDynamicModule(bool isStrongNamed=true)+0x2b字节
Castle.Core.dll!Castle.DynamicProxy.ModuleScope.DefineType(bool insignedmodule=true,string name=“Castle.Proxies.Invocations.Entity`1_Equals”,System.Reflection.TypeAttributes flags=Public | Serializable)+0x5a字节
Castle.Core.dll!Castle.DynamicProxy.Generators.Emitters.ClassEmitter.CreateTypeBuilder(Castle.DynamicProxy.ModuleScope ModuleScope={Castle.DynamicProxy.ModuleScope},string name=“Castle.Proxy.Invocations.Entity`1_Equals”,System.Type baseType={name=“InheritanceInvocation”FullName=“Castle.DynamicProxy.InheritanceInvocation”},System.Collections.Generic.IEnumerable interfaces={System.Type[0]},System.Reflection.TypeAttributes flags=Public | Serializable,bool forceUnsigned=false)+0x68字节

相当愚蠢-经过一点尝试和错误后,我发现问题出在Guest帐户上。当该帐户位于用户组中时,创建一个新帐户是有效的。Guest帐户比其他帐户限制性大得多,但我可能认为它可以做某些它不能做的事情

我就不说了,因为我不希望这个应用程序有“来宾用户”

    mscorlib.dll!System.Reflection.StrongNameKeyPair.ComputePublicKey() + 0xca bytes    
mscorlib.dll!System.Reflection.StrongNameKeyPair.PublicKey.get() + 0x15 bytes   
mscorlib.dll!System.Reflection.Emit.AssemblyBuilder.AssemblyBuilder(System.AppDomain domain = {System.AppDomain}, System.Reflection.AssemblyName name = {System.Reflection.AssemblyName}, System.Reflection.Emit.AssemblyBuilderAccess access = Run, string dir = null, System.Security.Policy.Evidence evidence = null, System.Security.PermissionSet requiredPermissions = null, System.Security.PermissionSet optionalPermissions = null, System.Security.PermissionSet refusedPermissions = null, ref System.Threading.StackCrawlMark stackMark = LookForMyCaller, System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder> unsafeAssemblyAttributes = null, System.Security.SecurityContextSource securityContextSource = CurrentAssembly) + 0x4b8 bytes  
mscorlib.dll!System.Reflection.Emit.AssemblyBuilder.InternalDefineDynamicAssembly(System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, System.Security.Policy.Evidence evidence, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions, ref System.Threading.StackCrawlMark stackMark, System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder> unsafeAssemblyAttributes, System.Security.SecurityContextSource securityContextSource) + 0x7e bytes  
mscorlib.dll!System.AppDomain.InternalDefineDynamicAssembly(System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access, string dir, System.Security.Policy.Evidence evidence, System.Security.PermissionSet requiredPermissions, System.Security.PermissionSet optionalPermissions, System.Security.PermissionSet refusedPermissions, ref System.Threading.StackCrawlMark stackMark, System.Collections.Generic.IEnumerable<System.Reflection.Emit.CustomAttributeBuilder> assemblyAttributes, System.Security.SecurityContextSource securityContextSource) + 0x2c bytes  
mscorlib.dll!System.AppDomain.DefineDynamicAssembly(System.Reflection.AssemblyName name, System.Reflection.Emit.AssemblyBuilderAccess access) + 0x2b bytes  
Castle.Core.dll!Castle.DynamicProxy.ModuleScope.CreateModule(bool signStrongName = true) + 0x1fa bytes  
Castle.Core.dll!Castle.DynamicProxy.ModuleScope.ObtainDynamicModuleWithStrongName() + 0x9d bytes    
Castle.Core.dll!Castle.DynamicProxy.ModuleScope.ObtainDynamicModule(bool isStrongNamed = true) + 0x2b bytes 
Castle.Core.dll!Castle.DynamicProxy.ModuleScope.DefineType(bool inSignedModulePreferably = true, string name = "Castle.Proxies.Invocations.Entity`1_Equals", System.Reflection.TypeAttributes flags = Public | Serializable) + 0x5a bytes   
Castle.Core.dll!Castle.DynamicProxy.Generators.Emitters.ClassEmitter.CreateTypeBuilder(Castle.DynamicProxy.ModuleScope modulescope = {Castle.DynamicProxy.ModuleScope}, string name = "Castle.Proxies.Invocations.Entity`1_Equals", System.Type baseType = {Name = "InheritanceInvocation" FullName = "Castle.DynamicProxy.InheritanceInvocation"}, System.Collections.Generic.IEnumerable<System.Type> interfaces = {System.Type[0]}, System.Reflection.TypeAttributes flags = Public | Serializable, bool forceUnsigned = false) + 0x68 bytes