呼叫者权限与声明者权限

哈桑

我正在阅读有关MSDN上的代表的信息,并看到一行

注意:代表在调用者的安全权限下运行,而不在声明者的权限下运行”

这意味着什么?

阿列克谢·列文科夫(Alexei Levenkov)

假设问题与Windows权限有关,而不是.Net代码访问安全性(CAS)。

创建委托(即框管理员)时无论运行什么帐户代码,都将在实际调用时计算Windows权限-这可能与创建时的权限不同。

假设您运行的代码执行模拟帐户(Windows用户)以访问某些文件:

// run under "account1" - has access to c:\myFile.txt
// current Environment.UserName = "account2"
Func<string,string> readAllFile = fileName => File.ReadAllText(fileName);

// start impersonation of account2 - has access to c:\otherFile.txt, 
// but not c:\myFile.txt
ImpersonateAccount("account2", readAllFile);
....

...ImpersonateAccout(string name, Func<string,string> readAllFile)
{
  // .... impersonation code omitted
  // current Environment.UserName = "account2"
  var text1 = readAllFile(@"c:\otherFile.txt"); // success
  var text2 = readAllFile(@"c:\myFile.txt"); // failure
  ....

在上面的示例中readAllFile,代码是在下运行时创建的account1,但是没有“捕获”该帐户的权限,因此以后的委托无法读取c:\myFile.txt哪个“ account2”没有权限。

请注意,委托像本地变量一样“捕获” C#级上下文,这可能带来以下假设:也捕获了其他类型的上下文。对于Window安全上下文以及.Net执行上下文(例如当前线程的区域性)而言,情况并非如此。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章