这太奇怪了。好的,这是我的MVC 4项目的web.config中的连接字符串:
以下是我的Unit Test Project的App.Config文件中的连接字符串:
<add name="ConnectionString" connectionString="Data Source=THESERVERNAME;Initial Catalog=THETABLE;Persist Security Info=True;Integrated Security=SSPI" providerName="System.Data.SqlClient" />
(我为这个帖子隐私更换了假名的真实姓名)
我的单元测试是:
[Test]
public void GetMember_ByContractNumber_ReturnsAValidMember()
{
// Arrang
const Int64 contractNumber = 2604914977;
// Act
DTO.Member member = MemberCRUD.RetrieveMember(contractNumber);
//Assert
Assert.IsNotNull(member);
Assert.IsNotNullOrEmpty(member.FirstName);
Assert.IsTrue(member.ContractNumber > 0);
}
通过就好了! 我从数据库CRUD调用中获取了一个有效的成员对象。
问题:
但与此同时,当我尝试从MVC控制器进行基本相同的调用和相同的连接字符串时,在我的DL炸弹中使用相同的CRUD方法,此时它在代码中出现:
我得到了这个例外:
{"Login failed for user 'OURDOMAIN\\MYPCNAMEISHERE$'."} System.Data.SqlClient.SqlException
此数据库远程,而不是我的本地系统。
显然它是权限,但我不知道如何解决这个问题。我认为我的单元测试通过的原因是因为它可能在调用数据库时使用我的Windows帐户作为标识,而我的MVC应用程序的IIS使用的是AppPoolIdentity。所以不知道如何解决这个问题。在我的web.config中,我将身份验证设置为无,但我也尝试将其设置为Windows身份验证并在IIS中启用Windows身份验证...没有运气。
我正在尝试运行我的设置,但到目前为止还没有任何组合可用于此权限问题。
IIS再次设置为使用AppPoolIdentity,但我也尝试使用网络服务作为身份,并以用户身份添加网络服务,并赋予其对我的SQL DB的权限。运气不好。我将尝试将AppPoolIdentity添加到我的SQL Server数据库中,但我怀疑它会继续工作。不知道该尝试什么。 --------------------------------支持PICS /非常新的设置------------ ------
在我的web.config
中(我的AD帐户下面有dbo权限)
更新:
以下是我刚才尝试过的内容:
1)将以下用户添加到我的数据库的SQL Server安全性并为他们提供了DBO权限:
2)将以下用户添加到我的app文件夹的文件系统安全权限中:
3)然后尝试了一些事情......当我渲染MVC视图时,所有失败并出现相同的错误(登录失败):
更改了应用池标识以使用本地服务。然后它尝试使用NT AUTHORITY \ ANONYMOUS LOGON连接到SQL DB - 我为NT AUTHORITY \ ANONYMOUS LOGON登录失败
更改了池身份以使用本地系统。它试图使用'DOMAINNAME \ MYPCNAME $'验证到SQL - 我的DOMAINNAME \ MYPCNAME $
登录失败更改了应用池标识以使用网络服务。它尝试使用'DOMAINNAME \ MYPCNAME $'进行连接。 - 我的DOMAINNAME \ MYPCNAME $
登录失败更改了应用池标识以使用 ApplicationPoolIdentity 。它试图使用'DOMAIN \ MYPCNAMEN $'进行连接。 - 我的DOMAINNAME \ MYPCNAME $
登录失败
答案 0 :(得分:1)
您有几个选择: