DataContext.Executequery登录失败

时间:2015-05-21 08:25:48

标签: c# sql-server linq iis linq-to-sql

我使用Linq来执行sql并使用以下语句:

 myDataContext ctx = new myDataContext();
  string query = "select * from myTable";
  var mycollection = ctx.ExecuteQuery<t_entity>(query).ToList();

此代码适用于我的域用户,但不适用于运行具有较低权限的IIS应用程序池的用户。值得注意的是,这是一个庞大的系统,数以千计的数据库调用,并没有发现类似的问题。

任何评论都将受到高度赞赏。

一切顺利 乙

1 个答案:

答案 0 :(得分:0)

你的连接字符串是什么?我想它使用Integrated Security,因此它会尝试使用您当前的Windows帐户进行数据库连接。但是在IIS的情况下 - 它将使用不同的用户 - IIS应用程序池用户。有三种典型的方法可以解决这个问题:

  1. 使用密码创建特定的SQL用户,然后在连接字符串中指定它。因此它将使用纯SQL凭据而不是Windows帐户
  2. 允许IIS应用程序池(IIS APPPOOL \ YourAppPoolName)通过将其添加到SQL Server中的“登录”列表来访问SQL Server,并允许访问特定的DB。但在这种情况下,SQL Server和带有IIS的Web Server都应位于同一个Active Directory域下,因为SQL Server应该从WebServer了解本地应用程序池用户。
  3. 创建一个新的Windows用户并配置IIS以使用此Windows用户代表该用户执行应用程序池。然后允许此用户访问SQL Server。但是这个用户应该拥有最小的权限,因为它不太安全,因为你的网络应用程序将具有该用户的权限,并且它可能是一个安全的整体