[bing_translator]
Recentemente eu assisti uma palestra do Roberto Cavalcanti (twitter) no Pass – Global Portuguese (http://globalportuguese.pass.org) sobre Azure SQL Database e me fez pensar que eu deveria me aprofundar mais no assunto e comecei meus estudos.
A minha intenção nesse post não é demostrar como criar um database, mas sim como fazer com que as conexões dos clientes sejam permitidas a acessar esse database. Assim como no mundo on-premise o firewall deve permitir conexões em seu servidor no mundo cloud existe a mesma funcionalidade com algumas adaptações.
Para você criar um database siga esse documento (https://docs.microsoft.com/en-us/azure/sql-database/sql-database-get-started-portal)
No Azure SQL Database existem dois níveis de firewall: server-level e database-level
Server-Level Firewall Rules: podemos dizer que é igual ao mundo on-premise onde você libera a porta de acesso para o servidor como um todo, ou seja, o cliente é permitido a se conectar a instancia SQL Server e se tiver permissões suficientes pode acessar todos os databases.
Database-Level Firewall Rules: Esse novo modelo de segurança é interessante pois você define as regras de acesso diretamente a um único database. Esse tipo de regra era possível ser criado no mundo on-premise através de ferramentas de terceiros como por exemplos: Imperva SecureSphere for Data ou Oracle Audit Vault and Database Firewall.
Primeiramente é verificado se sua conexão é a nível de database, ou seja, Database-level Firewall Rules. Uma vez que sua conexão seja permitida você terá acesso ao database, caso sua conexão seja negada uma nova verificação é realizada a nível de servidor, ou seja, Server-level Firewall Rules e se agora sua conexão for permitida você terá acesso ao database especifico ou a qualquer outro database no servidor. Por último se seu acesso for negado uma exceção será mostrada e sua conexão irá falhar.
A recomendação é sempre utilizar Database-level Firewall Rules pela simples questão de que quanto mais granular for a sua regra de acesso menos exposto você estará.
Existem várias formas de criar uma regra a nível de servidor, eu vou mostrar algumas, porem existe apenas uma forma (até o momento) de criar uma regra a nível de database que é através de T-SQL.
Server-level Firewall Rules
Vou mostrar 3 formas (existem mais) diferentes: Portal Azure, Powershell e T-SQL para configurar server-level firewall.
- Portal Azure:
Encontre o servidor que você irá aplicar a regra e procure pela opção Firewall
Acesse a opção e adicione a nova regra! O portal mostra para você qual seu IP e isso facilita a criação da regra para que a sua máquina possa se conectar.
Você deve especificar um IP inicial e um final, ou seja, é possível trabalhar com um range de IP. Caso não queira trabalhar com um range especifique o mesmo IP nos dois campos.
- Powershell
Para iniciar você deve ter o modulo do AzureRM instalado e importado em sua máquina para que depois você possa fazer login com sua conta e começar a usar os comandos.
Uma vez que você já tenha o modulo pronto para utilizar podemos executar os seguintes comandos:
Get-AzureRmSqlServerFirewallRule | Lista todas as regras existem |
New-AzureRmSqlServerFirewallRule | Cria uma nova regra |
Set-AzureRmSqlServerFirewallRule | Atualiza uma regra |
Remove-AzureRmSqlServerFirewallRule | Remove uma regra |
Um exemplo de como utilizar cada um desses comando
Para validar se sua regra foi criada com sucesso basta ir no portal na opção de firewall citada acima ou utilizar o comando Get-AzureRmSqlServerFirewallRule
A regra com IP 0.0.0.0 é criada pelo próprio Azure para permitir conexoes de IPs do Windows Azure.
- T-SQL
Uma vez que você tenha acesso permitido para o seu IP é possível se conectar via SSMS e executar comando T-SQL para criar regras de firewall.
sp_set_firewall_rule | Cria ou atualiza a regra |
sp_delete_firewall_rule | Exclui a regra |
Database-level Firewall Rules
Esse nível de permissão é apenas criado através de T-SQL até esse momento. Novamente você pode especificar um unico IP ou um range de IP.
sp_set_database_firewall_rule | Cria ou atualiza a regra a nível de database |
sp_delete_database_firewall_rule | Exclui a regra a nível de database |
Para mais informações acessem: https://docs.microsoft.com/en-us/azure/sql-database/sql-database-firewall-configure