sql-server - 在 Visual Studio Team Services 中以 Windows 用户身份运行

标签 sql-server azure-devops windows-authentication azure-pipelines

我需要在 Team Services 中构建一个 Visual Studio 项目,然后运行一些测试。测试进行 REST API 调用,然后通过直接访问数据库来验证 REST API 调用是否有效。该数据库是 Microsoft SQL Server 数据库,仅允许经过 Windows 身份验证的用户访问。它在内部服务器上运行。因此,当我在本地计算机上运行构建时,它工作正常,但在 Team Services 中,测试失败,因为它们无法访问数据库。我想知道是否可以以用户身份运行测试或以某种方式解决这个问题。

欢迎提出任何建议,但请注意,我绝对需要能够直接访问数据库来验证 API。

最佳答案

通过VSTS构建构建项目,它使用vsts代理帐户(可以在设置vsts代理时指定)。

首先,如果您使用 vsts 代理来构建和测试,并且该计算机中的 Windows 帐户可以连接到 SQL Server 并读取数据,您可以模拟用户从 SQL Server 访问数据。

简单代码:

public static class Helper
{
    [DllImport("advapi32.dll", SetLastError = true)]
    public static extern bool LogonUser(
        string lpszUsername,
        string lpszDomain,
        string lpszPassword,
        int dwLogonType,
        int dwLogonProvider,
        out IntPtr phToken);
}

--

IntPtr userToken = IntPtr.Zero;

        bool success = Helper.LogonUser(
          "[user name]",
          "[domain]",
          "[password]",
          2, //2
          0, //0
          out userToken);

        if (!success)
        {
            Assert.Fail("Logon user failed");

        }

        using (WindowsIdentity.Impersonate(userToken))
        {
          //TODO connect to your sql server database 

}

其次,如果您使用 Hosted Agent,唯一的方法是您需要使用 SQL Server 帐户来访问 SQL Server 数据库,并确保可以从 Hosted Agent 访问您的 SQL Server 实例。

关于sql-server - 在 Visual Studio Team Services 中以 Windows 用户身份运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38981467/

相关文章:

sql-server - VS2013 的 SSDT 不显示 SQL Server 2014 作为目标版本

ssl - 在 AWS 中调用 IdentityServer4 时获取 "IDX10108: The address specified is not valid as per HTTPS scheme"

sql - 检查字符串中是否有两位十进制数字

.net - SSIS 中的调试

git - 如何处理多个 PULL REQUESTS?

c# - 如何通过Azure应用程序注册实现多资源授权?

automated-tests - JMeter NTLM/Windows 身份验证负载测试

c# - 向需要 Windows 身份验证的网页发出 Web 请求

sql - 查找仅包含零的列

c# - 如何将 secret 从 VSTS 传递到测试执行上下文