【发布时间】:2011-06-11 13:56:23
【问题描述】:
我有以下代码在测试盒上完美运行,它以 SYSTEM 身份运行 MSSQLSERVER 服务:
currentIdentity = SqlContext.WindowsIdentity;
impersonatedIdentity = currentIdentity.Impersonate();
client.PreAuthenticate = true;
client.Credentials = CredentialCache.DefaultNetworkCredentials;
client.Url = currentURL;
/* Encrypt */
try
{
encryptedText = client.Encrypt(plainText);
}
finally
{
if (impersonatedIdentity != null)
{
impersonatedIdentity.Undo();
}
}
return encryptedText;
此功能的基本思想是通过内部托管的 Web 服务加密/解密文本。每当在以“SYSTEM”或其他本地帐户运行 MSSQLSERVER 服务的服务器上调用此函数时,模拟就可以正常工作。如果服务器将 MSSQLSERVER 服务作为域帐户(即 DOMAIN\sqlaccount)运行,则“DOMAIN\sqlaccount”的凭据始终会传递给 Web 服务,并且模拟似乎不起作用。
这是预期的行为吗?提前致谢。
【问题讨论】:
-
澄清一下,这适用于数据库服务器和IIS服务器是同一台机器的测试环境。从 MSSQLSERVER 服务作为本地帐户运行的另一台服务器到另一台 IIS 计算机进行测试会产生相同的结果。
标签: .net sql-server impersonation sqlclr