【问题标题】:Running as a windows user in Visual Studio Team Services在 Visual Studio Team Services 中以 Windows 用户身份运行
【发布时间】:2016-12-18 20:54:58
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    通过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 
    

    }

    其次,如果您使用托管代理,唯一的方法是您需要使用 SQL Server 帐户访问 SQL Server 数据库,同时确保您的 SQL Server 实例可以从托管代理访问。

    【讨论】:

      猜你喜欢
      • 2016-05-13
      • 2017-05-30
      • 1970-01-01
      • 2014-03-15
      • 1970-01-01
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多