在多个数据库的配置中模拟设置

时间:2012-11-30 14:19:35

标签: c#-4.0 app-config configuration-files identity impersonation

我有一个控制台应用程序,它连接到两个不同的SQL数据库。我在配置文件中使用“impersonate”标签强制应用程序以“APP_USER”身份登录。 APP_USER帐户使用Windows身份验证&已被授予两个数据库的权限。

第一个数据库连接工作正常,但第二个数据库连接失败,因为它尝试以无法访问的帐户登录。

System.Data.SqlClient.SqlException: Login failed for user 'DOMAIN\CURRENT_USER'.

我需要在配置中更改以使应用程序以另一个用户身份登录到两个数据库?

<configuration>
  <connectionStrings>
    <add name="Connection1" connectionString="metadata=res://*/Models.Model1.csdl|res://*/Models.Model1.ssdl|res://*/Models.Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=DB1;initial catalog=DBcat1;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
    <add name="Connection2" connectionString="metadata=res://*/Models.Model2.csdl|res://*/Models.Model2.ssdl|res://*/Models.Model2.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=DB2;initial catalog=DBcat2;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
  <system.web>
    <identity impersonate="true" userName="DOMAIN\APP_USER" password="password"/>
  </system.web>
</configuration>

1 个答案:

答案 0 :(得分:0)

显然配置设置路由只能在asp.net项目中使用。为了在控制台应用程序中完成此任务,您必须编写在advapi32.dll库中使用LogonUser的代码。

类似的问题:StackOverflow: Windows Impersonation from C#

我的最终代码基于以下项目:Code Project: A small C# Class for impersonating a User

现在一切似乎都很好。