Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:Banco de Dados SQL do Azure
As regras da rede virtual são um recurso de segurança do firewall que controla se o servidor lógico de SQL para os seus bancos de dados ou pools elásticos no Banco de Dados SQL do Azure ou bancos de dados no Azure Synapse aceitam comunicações enviadas de sub-redes particulares em redes virtuais.
Importante
Este artigo aplica-se ao Banco de Dados SQL do Azure e ao Azure Synapse (antigo SQL DW). Para simplificar, o termo Banco de Dados SQL do Azure neste artigo se aplica a bancos de dados pertencentes ao Banco de Dados SQL do Azure ou ao Azure Synapse. Este artigo não se aplica a uma Instância Gerenciada de SQL do Azure porque ela não tem um ponto de extremidade de serviço associado.
Este artigo demonstra um script do PowerShell que realiza as seguintes ações:
- Cria um ponto de extremidade do Serviço virtual do Microsoft Azure em sua sub-rede.
- Adiciona o ponto de extremidade ao firewall do seu servidor para criar uma regra da rede virtual.
Para obter mais informações contextuais, confira Pontos de extremidade de serviço virtual para Banco de Dados SQL do Azure.
Dica
Se tudo de que você precisa é avaliar ou adicionar o ponto de extremidade de serviço virtual nome do tipo para o Banco de Dados SQL do Azure para a sub-rede, passe adiante até nosso script do PowerShell mais direto.
Observação
Este artigo usa o módulo do PowerShell Azure Az, que é o módulo do PowerShell recomendado para interagir com o Azure. Para começar a usar o módulo do Az PowerShell, confira Instalar o Azure PowerShell. Para saber como migrar para o módulo Az PowerShell, confira Migrar o Azure PowerShell do AzureRM para o Az.
Importante
O módulo AzureRM (Azure Resource Manager) do PowerShell foi preterido em 29 de fevereiro de 2024. Todo o desenvolvimento futuro deve usar o módulo Az.Sql. Os usuários são aconselhados a migrar do AzureRM para o módulo do Az PowerShell para garantir o suporte e as atualizações contínuas. O módulo AzureRM não é mais mantido ou tem suporte. Os argumentos para os comandos no módulo do Az PowerShell e nos módulos do AzureRM são substancialmente idênticos. Para obter mais informações sobre sua compatibilidade, consulte Apresentando o novo módulo do Az PowerShell.
Cmdlets principais
Este artigo enfatiza o cmdlet New-AzSqlServerVirtualNetworkRule que adiciona o ponto de extremidade de sub-rede à ACL (lista de controle de acesso) do servidor, criando uma regra.
A lista a seguir mostra a sequência de outros cmdlets principais
- New-AzVirtualNetworkSubnetConfig: cria um objeto de sub-rede.
- New-AzVirtualNetwork: cria sua rede virtual, fornecendo a ela a sub-rede.
- Set-AzVirtualNetworkSubnetConfig: atribui um ponto de extremidade de serviço virtual à sua sub-rede.
- Set-AzVirtualNetwork: persiste as atualizações feitas em sua rede virtual.
-
New-AzSqlServerVirtualNetworkRule: após a sub-rede ser um ponto de extremidade, adicione a sub-rede como uma regra da rede virtual à ACL do servidor.
- Este cmdlet oferece o parâmetro
-IgnoreMissingVNetServiceEndpoint.
- Este cmdlet oferece o parâmetro
Pré-requisitos para execução do PowerShell
- Você já pode fazer logon no Azure, como, por exemplo, por meio do portal do Azure.
- Você já pode executar scripts do PowerShell.
Observação
Verifique se os pontos de extremidade de serviço estão ativados para a Vnet/Sub-rede que você pretende adicionar ao Servidor, caso contrário a criação da Regra de Firewall de VNet falhará.
Um script dividido em quatro partes
Nosso script do PowerShell de demonstração é dividido em uma sequência de scripts menores. A divisão facilita o aprendizado e fornece flexibilidade. Os scripts devem ser executados em sua sequência indicada. Se você não tiver tempo para executar os scripts, o resultado real do nosso teste será exibido após o script 4.
Script 1: variáveis
Este primeiro script do PowerShell atribui valores a variáveis. Os scripts subsequentes dependem dessas variáveis.
Importante
Antes de executar esse script, você pode editar os valores, se desejar. Por exemplo, se você já tiver um grupo de recursos, será possível editar o nome do grupo de recursos como o valor atribuído.
O nome da sua assinatura deve ser editado no script.
Código-fonte do script 1 do PowerShell
######### Script 1 ########################################
## LOG into to your Azure account. ##
## (Needed only one time per powershell.exe session.) ##
###########################################################
$yesno = Read-Host 'Do you need to log into Azure (only one time per powershell.exe session)? [yes/no]'
if ('yes' -eq $yesno) { Connect-AzAccount }
###########################################################
## Assignments to variables used by the later scripts. ##
###########################################################
# You can edit these values, if necessary.
$SubscriptionName = 'yourSubscriptionName'
Select-AzSubscription -SubscriptionName $SubscriptionName
$ResourceGroupName = 'RG-YourNameHere'
$Region = 'westcentralus'
$VNetName = 'myVNet'
$SubnetName = 'mySubnet'
$VNetAddressPrefix = '10.1.0.0/16'
$SubnetAddressPrefix = '10.1.1.0/24'
$VNetRuleName = 'myFirstVNetRule-ForAcl'
$SqlDbServerName = 'mysqldbserver-forvnet'
$SqlDbAdminLoginName = 'ServerAdmin'
$SqlDbAdminLoginPassword = 'ChangeYourAdminPassword1'
$ServiceEndpointTypeName_SqlDb = 'Microsoft.Sql' # Official type name.
Write-Host 'Completed script 1, the "Variables".'
Script 2: pré-requisitos
Esse script prepara para o próximo script, no qual ocorre a ação de ponto de extremidade. Esse script cria para você os seguintes itens listados, mas apenas se eles ainda não existirem. Se você tiver certeza de que esses itens já existem, você poderá ignorar o script 2:
- Grupo de recursos do Azure
- Servidor SQL lógico
Código-fonte do script 2 do PowerShell
######### Script 2 ########################################
## Ensure your Resource Group already exists. ##
###########################################################
Write-Host "Check whether your Resource Group already exists."
$gottenResourceGroup = $null
$gottenResourceGroup = Get-AzResourceGroup -Name $ResourceGroupName -ErrorAction SilentlyContinue
if ($null -eq $gottenResourceGroup) {
Write-Host "Creating your missing Resource Group - $ResourceGroupName."
New-AzResourceGroup -Name $ResourceGroupName -Location $Region
} else {
Write-Host "Good, your Resource Group already exists - $ResourceGroupName."
}
$gottenResourceGroup = $null
###########################################################
## Ensure your server already exists. ##
###########################################################
Write-Host "Check whether your server already exists."
$sqlDbServer = $null
$azSqlParams = @{
ResourceGroupName = $ResourceGroupName
ServerName = $SqlDbServerName
ErrorAction = 'SilentlyContinue'
}
$sqlDbServer = Get-AzSqlServer @azSqlParams
if ($null -eq $sqlDbServer) {
Write-Host "Creating the missing server - $SqlDbServerName."
Write-Host "Gather the credentials necessary to next create a server."
$sqlAdministratorCredentials = [pscredential]::new($SqlDbAdminLoginName,(ConvertTo-SecureString -String $SqlDbAdminLoginPassword -AsPlainText -Force))
if ($null -eq $sqlAdministratorCredentials) {
Write-Host "ERROR, unable to create SQL administrator credentials. Now ending."
return
}
Write-Host "Create your server."
$sqlSrvParams = @{
ResourceGroupName = $ResourceGroupName
ServerName = $SqlDbServerName
Location = $Region
SqlAdministratorCredentials = $sqlAdministratorCredentials
}
New-AzSqlServer @sqlSrvParams
} else {
Write-Host "Good, your server already exists - $SqlDbServerName."
}
$sqlAdministratorCredentials = $null
$sqlDbServer = $null
Write-Host 'Completed script 2, the "Prerequisites".'
Script de 3: criar um ponto de extremidade e uma regra
Esse script cria uma rede virtual com uma sub-rede. Em seguida, o script atribui o tipo de endereço Microsoft.Sql à sua sub-rede. Por fim, o script adiciona sua sub-rede à ACL (lista de controle de acesso), criando assim uma regra.
Código-fonte do script 3 do PowerShell
######### Script 3 ########################################
## Create your virtual network, and give it a subnet. ##
###########################################################
Write-Host "Define a subnet '$SubnetName', to be given soon to a virtual network."
$subnetParams = @{
Name = $SubnetName
AddressPrefix = $SubnetAddressPrefix
ServiceEndpoint = $ServiceEndpointTypeName_SqlDb
}
$subnet = New-AzVirtualNetworkSubnetConfig @subnetParams
Write-Host "Create a virtual network '$VNetName'.`nGive the subnet to the virtual network that we created."
$vnetParams = @{
Name = $VNetName
AddressPrefix = $VNetAddressPrefix
Subnet = $subnet
ResourceGroupName = $ResourceGroupName
Location = $Region
}
$vnet = New-AzVirtualNetwork @vnetParams
###########################################################
## Create a Virtual Service endpoint on the subnet. ##
###########################################################
Write-Host "Assign a Virtual Service endpoint 'Microsoft.Sql' to the subnet."
$vnetSubParams = @{
Name = $SubnetName
AddressPrefix = $SubnetAddressPrefix
VirtualNetwork = $vnet
ServiceEndpoint = $ServiceEndpointTypeName_SqlDb
}
$vnet = Set-AzVirtualNetworkSubnetConfig @vnetSubParams
Write-Host "Persist the updates made to the virtual network > subnet."
$vnet = Set-AzVirtualNetwork -VirtualNetwork $vnet
$vnet.Subnets[0].ServiceEndpoints # Display the first endpoint.
###########################################################
## Add the Virtual Service endpoint Id as a rule, ##
## into SQL Database ACLs. ##
###########################################################
Write-Host "Get the subnet object."
$vnet = Get-AzVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VNetName
$subnet = Get-AzVirtualNetworkSubnetConfig -Name $SubnetName -VirtualNetwork $vnet
Write-Host "Add the subnet .Id as a rule, into the ACLs for your server."
$ruleParams = @{
ResourceGroupName = $ResourceGroupName
ServerName = $SqlDbServerName
VirtualNetworkRuleName = $VNetRuleName
VirtualNetworkSubnetId = $subnet.Id
}
New-AzSqlServerVirtualNetworkRule @ruleParams
Write-Host "Verify that the rule is in the SQL Database ACL."
$rule2Params = @{
ResourceGroupName = $ResourceGroupName
ServerName = $SqlDbServerName
VirtualNetworkRuleName = $VNetRuleName
}
Get-AzSqlServerVirtualNetworkRule @rule2Params
Write-Host 'Completed script 3, the "Virtual-Network-Rule".'
Script 4: limpar
Esse script final exclui os recursos que os scripts anteriores criaram para a demonstração. No entanto, o script solicita a confirmação antes de excluir o seguinte:
- Servidor lógico do SQL do Azure
- Grupo de recursos do Azure
Você pode executar o script 4 a qualquer momento após a conclusão do script 1.
Código-fonte do script 4 do PowerShell
######### Script 4 ########################################
## Clean-up phase A: Unconditional deletes. ##
## ##
## 1. The test rule is deleted from SQL Database ACL. ##
## 2. The test endpoint is deleted from the subnet. ##
## 3. The test virtual network is deleted. ##
###########################################################
Write-Host "Delete the rule from the SQL Database ACL."
$removeParams = @{
ResourceGroupName = $ResourceGroupName
ServerName = $SqlDbServerName
VirtualNetworkRuleName = $VNetRuleName
ErrorAction = 'SilentlyContinue'
}
Remove-AzSqlServerVirtualNetworkRule @removeParams
Write-Host "Delete the endpoint from the subnet."
$vnet = Get-AzVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VNetName
Remove-AzVirtualNetworkSubnetConfig -Name $SubnetName -VirtualNetwork $vnet
Write-Host "Delete the virtual network (thus also deletes the subnet)."
$removeParams = @{
Name = $VNetName
ResourceGroupName = $ResourceGroupName
ErrorAction = 'SilentlyContinue'
}
Remove-AzVirtualNetwork @removeParams
###########################################################
## Clean-up phase B: Conditional deletes. ##
## ##
## These might have already existed, so user might ##
## want to keep. ##
## ##
## 1. Logical SQL server ##
## 2. Azure resource group ##
###########################################################
$yesno = Read-Host 'CAUTION !: Do you want to DELETE your server AND your resource group? [yes/no]'
if ('yes' -eq $yesno) {
Write-Host "Remove the server."
$removeParams = @{
ServerName = $SqlDbServerName
ResourceGroupName = $ResourceGroupName
ErrorAction = 'SilentlyContinue'
}
Remove-AzSqlServer @removeParams
Write-Host "Remove the Azure Resource Group."
Remove-AzResourceGroup -Name $ResourceGroupName -ErrorAction SilentlyContinue
} else {
Write-Host "Skipped over the DELETE of SQL Database and resource group."
}
Write-Host 'Completed script 4, the "Clean-Up".'
Verificar se sua sub-rede é um ponto de extremidade
Você pode ter uma sub-rede que já foi atribuída ao nome do tipo Microsoft.Sql, o que significa que já é um endpoint de Serviço Virtual. Você pode usar o portal do Azure para criar uma regra da rede virtual do ponto de extremidade.
Ou talvez você não tenha certeza se sua sub-rede tem o tipo de nome Microsoft.Sql. É possível executar o seguinte script do PowerShell para executar estas ações:
- Verifique se sua sub-rede tem o nome do tipo
Microsoft.Sql. - Opcionalmente, atribua o nome do tipo se ele estiver ausente.
- O script solicitará que você confirme, antes de aplicar o nome do tipo ausente.
Fases do script
Estas são as fases do script do PowerShell:
- Entre em sua conta do Azure, necessária apenas uma vez por sessão do PowerShell. Atribua variáveis.
- Pesquise pela sua rede virtual e, em seguida, pela sua sub-rede.
- Sua sub-rede está marcada como
Microsoft.Sqltipo de servidor de ponto de extremidade? - Adicione um endpoint do Serviço Virtual do tipo nome
Microsoft.Sqlna sua sub-rede.
Importante
Antes de executar esse script, você deve editar os valores atribuídos a variáveis $-, na parte superior do script.
Código-fonte do PowerShell Direct
Esse script do PowerShell não atualiza nada, a menos que você responda sim se o PowerShell solicitar sua confirmação. O script pode adicionar o nome do tipo Microsoft.Sql à sua sub-rede. Mas o script tenta adicionar somente se sua sub-rede não tiver o nome do tipo.
### 1. LOG into to your Azure account, needed only once per PS session. Assign variables.
$yesno = Read-Host 'Do you need to log into Azure (only one time per powershell.exe session)? [yes/no]'
if ('yes' -eq $yesno) { Connect-AzAccount }
# Assignments to variables used by the later scripts.
# You can EDIT these values, if necessary.
$SubscriptionName = 'yourSubscriptionName'
Select-AzSubscription -SubscriptionName "$SubscriptionName"
$ResourceGroupName = 'yourRGName'
$VNetName = 'yourVNetName'
$SubnetName = 'yourSubnetName'
$SubnetAddressPrefix = 'Obtain this value from the Azure portal.' # Looks roughly like: '10.0.0.0/24'
$ServiceEndpointTypeName_SqlDb = 'Microsoft.Sql' # Do NOT edit. Is official value.
### 2. Search for your virtual network, and then for your subnet.
# Search for the virtual network.
$vnet = $null
$vnet = Get-AzVirtualNetwork -ResourceGroupName $ResourceGroupName -Name $VNetName
if ($vnet -eq $null) {
Write-Host "Caution: No virtual network found by the name '$VNetName'."
return
}
$subnet = $null
for ($nn = 0; $nn -lt $vnet.Subnets.Count; $nn++) {
$subnet = $vnet.Subnets[$nn]
if ($subnet.Name -eq $SubnetName) { break }
$subnet = $null
}
if ($null -eq $subnet) {
Write-Host "Caution: No subnet found by the name '$SubnetName'"
Return
}
### 3. Is your subnet tagged as 'Microsoft.Sql' endpoint server type?
$endpointMsSql = $null
for ($nn = 0; $nn -lt $subnet.ServiceEndpoints.Count; $nn++) {
$endpointMsSql = $subnet.ServiceEndpoints[$nn]
if ($endpointMsSql.Service -eq $ServiceEndpointTypeName_SqlDb) {
$endpointMsSql
break
}
$endpointMsSql = $null
}
if ($null -eq $endpointMsSql) {
Write-Host "Good: Subnet found, and is already tagged as an endpoint of type '$ServiceEndpointTypeName_SqlDb'."
return
} else {
Write-Host "Caution: Subnet found, but not yet tagged as an endpoint of type '$ServiceEndpointTypeName_SqlDb'."
# Ask the user for confirmation.
$yesno = Read-Host 'Do you want the PS script to apply the endpoint type name to your subnet? [yes/no]'
if ('no' -eq $yesno) { return }
}
### 4. Add a Virtual Service endpoint of type name 'Microsoft.Sql', on your subnet.
$setParams = @{
Name = $SubnetName
AddressPrefix = $SubnetAddressPrefix
VirtualNetwork = $vnet
ServiceEndpoint = $ServiceEndpointTypeName_SqlDb
}
$vnet = Set-AzVirtualNetworkSubnetConfig @setParams
# Persist the subnet update.
$vnet = Set-AzVirtualNetwork -VirtualNetwork $vnet
for ($nn = 0; $nn -lt $vnet.Subnets.Count; $nn++) {
$vnet.Subnets[0].ServiceEndpoints # Display.
}