Невозможно использовать Azure SQL с Azure DevOps Server 2019 (правительство Azure)

Я изо всех сил пытался заставить мою установку DevOpsServer 2019-RC1 увидеть мой Azure SQL Server

Моя установка DevOpsServer выполняется на виртуальной машине Azure, как рекомендуется

Я реализовал все из приведенной ниже документации, касающейся настройки MSI для виртуальной машины и предоставления доступа MSI к Azure SQL через проверку подлинности AAD:

Я также добавил VNET, в котором расположена сетевая карта виртуальной машины, в качестве правила брандмауэра VNET на Azure SQL Server, чтобы гарантировать отсутствие проблем с подключением.

Мой DevOpsServer отказывается видеть Azure SQL Server или его базы данных

Чтобы подтвердить, что Azure SQL не заблокирован от виртуальной машины, я успешно создал системное DSN-соединение ODBC на виртуальной машине, которое позволяет мне видеть Azure SQL Server и его базы данных.

По справочной документации:

  • При настройке нового экземпляра DevOps Server я выбрал " Это новое развертывание Azure DevOps Server "
  • На странице базы данных мастера настройки укажите экземпляр сервера базы данных SQL Azure, обычно в форме "SQLInstanceName.database.windows.net".

Пожалуйста, дайте мне знать, если я смогу помочь мастеру настройки сервера Devops увидеть мой Azure SQL Server и базы данных.

PS Я пытаюсь заставить это работать в правительстве Azure (MAG), если это меняет возможности...

Ошибка при попытке программного подключения к базе данных SQL с помощью следующего сценария Powershell:

# Retrieve the access token
$response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatabase.usgovcloudapi.net' -Method GET -Headers @{Metadata="true"}
$content = $response.Content | ConvertFrom-Json
$AccessToken = $content.access_token

# Create the connection
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Data Source = test-sqlsrv.database.usgovcloudapi.net; Initial Catalog = inldb"
$SqlConnection.AccessToken = $AccessToken
$SqlConnection.Open()

# Send a Query
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "SELECT * from <TABLE>;"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)

5 ответов

Попробуйте запустить ALTER USER [VMName] WITH DEFAULT_SCHEMA=dbo из обеих коллекционных и конфигурационных БД. У меня есть PR, чтобы добавить это в документацию, и это может быть причиной вашей проблемы.

Попробуйте подключиться к экземпляру SQL через Powershell вместо Azure DevOps Server.

Для этого вы можете запустить следующий скрипт:

# Retrieve the access token
$response = Invoke-WebRequest -Uri 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fdatabase.windows.net%2F' -Method GET -Headers @{Metadata="true"}
$content = $response.Content | ConvertFrom-Json
$AccessToken = $content.access_token

# Create the connection
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Data Source = <AZURE-SQL-SERVERNAME>; Initial Catalog = <DATABASE>"
$SqlConnection.AccessToken = $AccessToken
$SqlConnection.Open()

# Send a Query
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "SELECT * from <TABLE>;"
$SqlCmd.Connection = $SqlConnection
$SqlAdapter = New-Object System.Data.SqlClient.SqlDataAdapter
$SqlAdapter.SelectCommand = $SqlCmd
$DataSet = New-Object System.Data.DataSet
$SqlAdapter.Fill($DataSet)

Это должно по крайней мере дать вам более описательную ошибку для отладки.

Gvazzana, я также рекомендую тестировать с помощью предоставленного сценария danwkennedy, но обязательно измените database.windows.net на database.usgovcloudapi.net для правительства Azure.

Я бы уделил пристальное внимание любым ошибкам, связанным с получением токена доступа, и ошибкам, связанным с открытием соединения SQL.

Если ничего не выделяется, можно ли поймать след Fiddler?

Я согласен, что вы должны выполнить тест PowerShell, чтобы проверить свой MSI. Похоже, у вас проблемы с достижением IP-адреса для получения токена доступа. Если вы пытаетесь подключиться из правительственной сети, вполне вероятно, что вы используете какой-либо тип веб-прокси-службы (Blue Coat и т. Д.), Чтобы попасть в Интернет. Вы можете обмануть прокси, эмулируя строку пользовательского агента из браузера, используя параметр -UserAgent в команде Invoke-WebRequest.

Если это не сработает, вам может потребоваться обратиться к прокси-команде для устранения проблемы.

Наконец, если вы можете успешно выполнить тестирование в PowerShell, но все еще получаете ошибку тестирования соединения при установке DevOps, обязательно выполните следующие действия:

https://docs.microsoft.com/en-us/tfs/server/install/install-azure-sql

Я забыл добавить пользователя в основную БД... Как только я это сделал, все заработало. Удачи.

Вы можете получить доступ к своей базе данных Azure Devops со своим уровнем проверки подлинности Windows. Таким образом, ваш пользователь входа в Windows должен был настроить sysadmin privilegeв вашей базе данных (например, на сервере Microsoft SQL)

Другие вопросы по тегам