我在 web.config 中有几个连接字符串,理想情况下使用这些连接字符串和指定的凭据(在 web.config 中)我将必须打开一个连接并执行插入 - 对于两个连接(假设连接 1 和连接 2 ).
现在连接 1 和连接 2 具有不同的凭据。我尝试在 web.config 的连接字符串中使用它们,但它总是说用户登录失败。以下是连接字符串。
<connectionStrings>
<add name="connection_2" connectionString="Data Source=domain\servername;Initial Catalog=DBName;User ID=domain\xxxx;Password=abcgdd****;" providerName="System.Data.SqlClient"/>
<add name="connection_3" connectionString="Data Source=domain\servername;Initial Catalog=DBName;User ID=domain\yyyy;Password=fgdd****;" providerName="System.Data.SqlClient"/>
<connectionStrings>
所以经过一番谷歌搜索后我明白我必须使用模拟。
使用以下代码进行模拟
using (new Impersonator("username","domain","pwd"))
{
// trying to open connection 1 from web.config but it says no such user.
using (SqlConnection connection = new SqlConnection("Connection1FromConfig"))
{
cmd = new SqlCommand("select * from abc", connection);
connection.Open();
cmd.ExecuteNonQuery();
connection.Close();
}
}
Connection used while impersonation is :
<add name="Connection2" connectionString="Data Source=domain\server;Initial Catalog=DB;" providerName="System.Data.SqlClient"/>
`````
Used the code from here for impersonation class - https://daoudisamir.com/impersonate-users-in-c/
如果您打算使用 Windows 凭据进行模拟,则需要在连接字符串中提供
Trusted_Connection=yes;
。
这是我成功使用的connectionString,
string srvConnection = $"Server={serverName}; Trusted_Connection=yes; connection timeout=15";
我从这里获得了 Impersonator 类并能够成功使用它。我需要使用的 SQL 帐户与 IIS/应用程序池使用的域帐户不同。
string srvConnection = $"Server={ListenerName}; Trusted_Connection=yes; connection timeout=15";
using (SqlConnection connection = new SqlConnection(srvConnection))
{
using (new Impersonator(creds.Username.Split('\\').Last(), creds.Username.Split('\\').First(), creds.Password))
connection.Open();
// other code that needs to use the connection goes here.
cmd = new SqlCommand("select * from abc", connection);
cmd.ExecuteNonQuery();
}
您不需要因为 using
语句而关闭连接。由于仅需要模拟来打开连接,因此除了使用
connection.Open();
语句之外,您不需要在任何地方使用它。
https://www.codeproject.com/Articles/10090/A-small-C-Class-for-impersonating-a -用户)无法正常工作。我想在 Windows 上的一个 C# 项目中使用此类,因为我必须使用与登录用户不同的 AD 用户连接到 SQL Server。
有人有一个链接,我可以在其中下载该课程或通过电子邮件将其发送给我吗?这对我来说非常有帮助。提前非常感谢。
弗兰克