不能将Azure SQL与Azure DevOps Server 2019结合使用-(Azure Government)

时间:2018-12-20 03:11:40

标签: azure-devops virtual-machine azure-sql-server azure-gov

enter image description here enter image description here我一直在努力安装DevOpsServer 2019-RC1以查看我的Azure SQL Server

按照建议,我的DevOpsServer安装在Azure VM上

我已经实现了以下文档中有关为VM设置MSI并通过AAD身份验证授予MSI对Azure SQL的访问权限的所有内容:

我还添加了VM NIC所在的VNET,作为Azure SQL Server上的VNET防火墙规则,以确保没有连接问题

我的DevOpsServer拒绝查看Azure SQL Server或其数据库

为确认未从VM阻止Azure SQL,我在VM上成功创建了ODBC系统DSN连接,这使我能够查看Azure SQL Server及其数据库

根据参考文档:

  • 设置新的DevOps Server实例时,我选择了“ 新的Azure DevOps Server部署
  • 在配置向导的“数据库”页面上,指定Azure SQL 数据库服务器实例,通常采用以下形式 “ SQLInstanceName.database.windows.net”

请告诉我是否还有其他方法可以帮助Devops Server配置向导查看我的Azure SQL Server和数据库

PS,如果这更改了功能,我正在努力使其在Azure政府(MAG)中工作...

尝试通过以下Powershell脚本以编程方式连接到SQL数据库时收到错误:

# 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)

enter image description here

4 个答案:

答案 0 :(得分:2)

尝试从集合数据库和配置数据库中运行ALTER USER [VMName] WITH DEFAULT_SCHEMA=dbo。我有一个PR将此文档添加到文档中,这可能会导致您的问题。

答案 1 :(得分:0)

尝试通过Powershell而不是Azure DevOps Server连接到SQL实例。

您可以运行以下脚本来做到这一点:

# 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)

这至少应该给您一个更具描述性的错误来调试。

答案 2 :(得分:0)

Gvazzana,我还建议使用提供的脚本danwkennedy进行测试,但请确保将Azure政府的database.windows.net更改为database.usgovcloudapi.net。

我将密切注意有关获取访问令牌的错误以及与打开SQL连接相关的错误。

如果什么都没脱颖而出,是否有可能捕获Fiddler踪迹?

答案 3 :(得分:0)

我同意您应该执行PowerShell测试来测试您的MSI。看起来您在到达IP以获得访问令牌时遇到问题。如果您尝试通过政府网络进行连接,则可能正在通过某种类型的Web代理服务(Blue Coat等)来访问Internet。您可以通过使用Invoke-WebRequest命令上的-UserAgent参数从浏览器模拟用户代理字符串来欺骗代理。

如果这不起作用,则可能需要与代理团队联系以解决问题。

最后,如果您能够在PowerShell中成功测试,但是在DevOps安装中仍然出现连接测试错误,请确保遵循此处的步骤:

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

我忘记了将用户添加到主数据库中……一旦完成,一切都会正常进行。祝好运。