同一AppDomain上多个程序集的不同安全权限

时间:2011-08-06 22:04:29

标签: .net security appdomain

是否可以将多个程序集加载到新的AppDomain中并对每个程序集应用不同的PermissionSet

比如说,允许其中一个程序集写入磁盘,方法是将其授予不受限制的FileIOPermission,并拒绝向其他程序授予此类权限。

如果有可能的话。怎么样?

更新

P.S。我正在创建DLL的类型实例,而不是执行exes,所以我使用的是LoadCreateInstanceAndUnwrap而不是ExecuteAssembly

更新

我尝试(并且失败)使用以下代码提供带有load方法的证据:

Dim domain As AppDomain = AppDomain.CreateDomain("AssembliesDomain")
Dim protectedSet As New PermissionSet(PermissionState.None)

protectedSet.AddPermission(New SecurityPermission(SecurityPermissionFlag.Execution))
protectedSet.AddPermission(New IsolatedStorageFilePermission(PermissionState.Unrestricted))
protectedSet.PermitOnly()

domain.Load(protectedAssembly, New Evidence(Nothing, {protectedSet}))
domain.Load(unprotectedAssembly, New Evidence(Nothing, {protectedSet}))

Console.WriteLine(domain.CreateInstanceAndUnwrap(protectedAssembly, protectedAssembly & ".Actions").Sum(1, 2))
Console.WriteLine(domain.CreateInstanceAndUnwrap(unprotectedAssembly, unprotectedAssembly & ".Actions").Sum(1, 2))
Console.ReadLine()

2 个答案:

答案 0 :(得分:1)

添加此行(以解决您获得的异常):

protectedSet.AddPermission(new UIPermission(PermissionState.Unrestricted)); 

有用的文章:http://www.reliablesoftware.com/articles/UnderstandingSecurityActions.html

答案 1 :(得分:0)

您可以在使用Assembly.Load方法实例化其中一个自定义程序集时指定自定义Evidence对象,或者查看here