【发布时间】:2018-09-20 21:08:43
【问题描述】:
我正在开发 ASP.net Web api 项目。我添加了一个测试项目。在其中一个测试用例中,我使用 Windows 身份验证连接到 SQL Server。当我在 Visual Studio 上运行测试用例时,它在本地运行良好,因为我的帐户(我的 NT ID)有权访问 SQL 服务器。
但是当我们在我们的构建服务器上运行相同的测试用例时,测试用例失败并显示Microsoft.AnalysisServices.AdomdClient.AdomdErrorResponseException: Either the user, 'domain\ttwp5434203$', does not have access to the 'Employee' database, or the database does not exist.
为了克服这个问题,我正在考虑模拟运行测试用例的用户。
我在测试项目下的 App.Config 文件中添加了以下代码。
<system.web>
<identity impersonate="true"
userName="UID"
password= "PWD" />
</system.web>
此更改无效。我又遇到了同样的错误。我能做些什么来确保任何机器上的测试用例在特定帐户下运行。
我希望使用的另一个选项是:Impersonate(IntPtr)。但我不确定如何在多个测试用例中使用此代码。
【问题讨论】:
-
这取决于您的客户。 “正确”的方法是在所需的用户上下文下(认真地)创建一个新线程,然后使用
WebClient对象使用 Kerberos 票证发出请求 - 显然这不适用于HttpClient请求,我想你可以使用UseDefaultCredentials。 “最好”的方法是使用 Kerberos 客户端库并使用它来获取票证,而不是通过 Windows 自己的系统。 -
@Dai:你能分享更多细节吗?任何文章到代码示例链接都会有很大帮助
-
是否必须使用 Windows 身份验证连接到数据库?创建具有适当访问权限的数据库用户,并在连接字符串中使用它可以解决您的问题。如果这不可能,您可以在某个技术帐户下在服务器上运行您的测试。创建一个新的域用户 - 类似于 Domain\UnitTestRunner,并让他访问数据库。你用什么在服务器上运行你的测试?
-
@Peska:我正在使用不允许您创建用户帐户的 SQL 服务器分析服务。所以选项 1 不存在争议。我现在正在使用选项二。查看我的答案以获取更多信息。
标签: c# .net asp.net-web-api mstest impersonation