1

我有一个安装 Web 应用程序的 Web 设置项目。在自定义操作中,我正在执行 SQL 脚本来构建数据库。

简单,主要是 MS 示例代码。工作正常。

private void ExecuteSql(string serverName, string dbName, string Sql)
{
    System.Data.SqlClient.SqlConnection masterConnection = new System.Data.SqlClient.SqlConnection();
    masterConnection.ConnectionString = "Server=" + serverName + "; Database=" + dbName + ";Integrated Security=SSPI";

    System.Data.SqlClient.SqlCommand Command = new System.Data.SqlClient.SqlCommand(Sql, masterConnection);
    Command.Connection.Open();
    Command.Connection.ChangeDatabase(dbName);
    try
    {
        Command.ExecuteNonQuery();
    }
    finally
    {
        Command.Connection.Close();
    }
}

问题是被发送到 SQL Server 的用户是“DOMAIN\MACHINENAME$”,如“AMBER\CHAOS$”而不是“AMBER\corwin”。

如果我在 SQL Server 上添加“AMBER\CHAOS$”作为登录名并赋予用户足够的权限,那么一切正常。这在最终环境中是不可能的。

那么,我需要做些什么才能让我的 Web 设置以“AMBER\corwin”而不是“AMBER\CHAOS$”的身份连接到 SQL Server?

4

5 回答 5

0

只需获取您的连接字符串并制作它:

masterConnection.ConnectionString = "Server=" + serverName + "; Database=" + dbName + ";Integrated Security=SSPI;UserId=" + userId + ";Password=" + password + ";";

于 2009-10-06T18:36:25.180 回答
0

您可能会尝试在 *.config 文件中搞乱。您可以尝试使用这些元素:

<system.web>   
  <authentication mode="Windows" />   
  <identity impersonate="true" /> 
</system.web>
于 2009-10-06T18:41:35.993 回答
0

可能那是您的网站应用程序池用户名;尝试添加到 /configuration/system.web 内的 web.config 文件中:

<identity impersonate="true"/>

于 2009-10-06T18:42:35.320 回答
0

您必须告诉自定义操作来模拟用户。你是如何创建 MSI 的?使用 WiX,您可以在元素中添加: Impersonate="yes"。

于 2009-12-18T22:39:03.913 回答
0

这可能是因为您网站的应用程序池作为网络服务而不是 Windows 用户运行。将此值更改为您要连接到数据库的帐户(注意您的应用程序,这可能会根据架构更改您的应用程序)并在 SQL 中添加权限。

于 2009-12-20T05:22:19.923 回答