我一直在努力安装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 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)
答案 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
我忘记了将用户添加到主数据库中……一旦完成,一切都会正常进行。祝好运。