Запуск от имени пользователя Windows в Visual Studio Team Services

Мне нужно создать проект Visual Studio в Team Services, а затем запустить несколько тестов. Тесты выполняют вызовы REST API, а затем проверяют, что вызовы REST API работают, путем прямого доступа к базе данных. База данных представляет собой базу данных Microsoft SQL Server, доступ к которой разрешен только пользователям, прошедшим проверку подлинности Windows. Он работает на внутреннем сервере. Таким образом, он отлично работает, когда я запускаю сборку на своем компьютере локально, но в Team Services тесты не выполняются, потому что они не могут получить доступ к базе данных. Мне интересно, можно ли запускать тесты как пользователь или как-то обойти эту проблему.

Любые предложения приветствуются, но обратите внимание, что мне абсолютно необходимо иметь прямой доступ к базе данных для проверки API.


person gmoerkerken    schedule 16.08.2016    source источник


Ответы (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 может быть доступен из размещенного агента.

person starian chen-MSFT    schedule 19.08.2016