我正在阅读 MSDN 上的代表,并看到了一行
“注意: 代理在调用者的安全权限下运行,而不是声明者的权限“
这是什么意思?
答案 0 :(得分:2)
假设问题是关于Windows权限,而不是.Net Code Access Security(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执行上下文(例如当前线程的文化)不是这种情况。