Azure SQL 数据库连接体系结构

本文介绍 Azure SQL Database 连接体系结构,并说明不同组件如何将流量定向到 Azure SQL 数据库的实例。 这些 Azure SQL 数据库连接组件通过从 Azure 内连接的客户端以及从 Azure 外连接的客户端将网络流量定向到 Azure 数据库。 本文还提供脚本示例(用于更改连接发生的方式)以及与更改默认连接设置相关的注意事项。

连接体系结构

下图提供 Azure SQL 数据库连接体系结构的高级概述。

体系结构概述

以下步骤介绍如何通过 Azure SQL 数据库软件负载均衡器 (SLB) 和 Azure SQL 数据库网关建立到 Azure SQL 数据库的连接。

  • Azure 内部或 Azure 外部的客户端连接到 SLB,后者具有公共 IP 地址并侦听端口 1433。
  • SLB 将流量定向到 Azure SQL 数据库网关。
  • 网关将流量重定向到正确的代理中间件。
  • 代理中间件将流量重定向到相应的 Azure SQL 数据库。

Important

其中每个组件都具有内置于网络和应用层的分布式拒绝服务 (DDoS) 保护。

从 Azure 内部连接

如果从 Azure 内连接,连接默认具有“重定向”连接策略。 “重定向”策略表示 TCP 会话与 Azure SQL 数据库建立连接后,会通过将目标虚拟 IP 从 Azure SQL 数据库网关的 IP 更改为代理中间件的 IP,将客户端会话重定向到该代理中间件。 此后,所有后续数据包都直接通过该代理中间件流动,绕过 Azure SQL 数据库网关。 下图演示了此流量流。

体系结构概述

从 Azure 外连接

如果从 Azure 外连接,连接默认具有“代理”连接策略。 “代理”策略通过 Azure SQL 数据库网关建立 TCP 会话,并且所有后续数据包都通过网关流动。 下图演示了此流量流。

体系结构概述

更改 Azure SQL 数据库连接策略

若要更改 Azure SQL 数据库服务器的 Azure SQL 数据库连接策略,请使用 conn-policy 命令。

  • 如果将连接策略设置为“代理”,所有网络数据包都将通过 Azure SQL 数据库网关流动。 对于此设置,需要只允许出站到 Azure SQL 数据库网关 IP。 使用“代理”设置比使用“重定向”设置的延迟时间更长。
  • 如果将连接策略设置为“重定向”,则所有网络数据包将直接流向中间件代理。 对于此设置,需要允许出站到多个 IP。

通过 PowerShell 编写脚本以更改连接设置

Important

此脚本需要 Azure PowerShell 模块

以下 PowerShell 脚本演示如何更改连接策略。

Connect-AzureRmAccount -EnvironmentName AzureChinaCloud
Select-AzureRmSubscription -SubscriptionName <Subscription Name>

# Azure Active Directory ID
$tenantId = "<Azure Active Directory GUID>"
$authUrl = "https://login.partner.microsoftonline.cn/$tenantId"

# Subscription ID
$subscriptionId = "<Subscription GUID>"

# Create an App Registration in Azure Active Directory.  Ensure the application type is set to NATIVE
# Under Required Permissions, add the API:  Windows Azure Service Management API

# Specify the redirect URL for the app registration
$uri = "<NATIVE APP - REDIRECT URI>"

# Specify the application id for the app registration
$clientId = "<NATIVE APP - APPLICATION ID>"

# Logical SQL Server Name
$serverName = "<LOGICAL DATABASE SERVER - NAME>"

# Resource Group where the SQL Server is located
$resourceGroupName= "<LOGICAL DATABASE SERVER - RESOURCE GROUP NAME>"


# Login and acquire a bearer token
$AuthContext = [Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext]$authUrl
$result = $AuthContext.AcquireToken(
"https://management.core.chinacloudapi.cn/",
$clientId,
[Uri]$uri,
[Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::Auto
)

$authHeader = @{
'Content-Type'='application\json; '
'Authorization'=$result.CreateAuthorizationHeader()
}

#Get current connection Policy
Invoke-RestMethod -Uri "https://management.chinacloudapi.cn/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Sql/servers/$serverName/connectionPolicies/Default?api-version=2014-04-01-preview" -Method GET -Headers $authHeader

#Set connection policy to Proxy
$connectionType="Proxy" <#Redirect / Default are other options#>
$body = @{properties=@{connectionType=$connectionType}} | ConvertTo-Json

# Apply Changes
Invoke-RestMethod -Uri "https://management.chinacloudapi.cn/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Sql/servers/$serverName/connectionPolicies/Default?api-version=2014-04-01-preview" -Method PUT -Headers $authHeader -Body $body -ContentType "application/json"

通过 Azure CLI 2.0 编写脚本以更改连接设置

Important

此脚本需要 Azure CLI 2.0

以下 CLI 脚本演示如何更改连接策略。

# Get SQL Server ID
sqlserverid=$(az sql server show -n sql-server-name -g sql-server-group --query 'id' -o tsv)

# Set URI
id="$sqlserverid/connectionPolicies/Default"

# Get current connection policy 
az resource show --ids $id

# Update connection policy 
az resource update --ids $id --set properties.connectionType=Proxy

后续步骤