如何解决模拟SQL连接字符串C#MVC的用户
我在web.config中有几个连接字符串,理想情况下,使用那些连接字符串和指定的凭据(在web.config中),我将必须打开一个连接并进行插入-对于这两个连接(让我们说connection1和连接2)。
现在,connetcion1和connection2具有不同的凭据。我尝试在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 类 from here 并且能够成功使用它。我需要使用的 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();
语句之外,你不需要在任何地方使用它。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。