模拟 SQL 连接字符串的用户 c# MVC

问题描述 投票:0回答:2

我在 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/ 
c# sql-server asp.net-mvc connection-string impersonation
2个回答
2
投票

如果您打算使用 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();
 语句之外,您不需要在任何地方使用它。


0
投票
使用第 2 篇文章中的链接打开的网站上 Impersonator 类的下载链接 (

https://www.codeproject.com/Articles/10090/A-small-C-Class-for-impersonating-a -用户)无法正常工作。我想在 Windows 上的一个 C# 项目中使用此类,因为我必须使用与登录用户不同的 AD 用户连接到 SQL Server。

有人有一个链接,我可以在其中下载该课程或通过电子邮件将其发送给我吗?这对我来说非常有帮助。

提前非常感谢。

弗兰克

© www.soinside.com 2019 - 2024. All rights reserved.