Backup With SAS Credential

Conforme informei no post sobre Backup With Access Key Credential, temos dois tipos de credenciais para realizar o backup do SQL Server diretamente no Blob Storage. No post citado falei sobre uma das formas que é o Aceess Key Credential e no post de hoje falarei sobre o Shared Access Signature (SAS).

O SAS é uma maneira de obter acesso à recursos da conta de armazenamento sem precisar expor a chave da conta e desta forma acaba sendo uma maneira mais segura. Para saber mais sobre o SAS acesse o link .

Assim como no modo anterior (Access Key Credential), para acessar o Blob Storage, temos que criar uma credencial no SQL Server, mas desta vez passando o identity como “Shared Access Signature” e não mais o nome da conta de armazenamento como fizemos no modo anterior.

Antes de criarmos a credencial no SQL Server, temos que criar uma policy para do tipo Shared Access Signature na nossa conta do Azure.

Uma das formas para criar a policy é com um comando em powershell que você pode pegar nos documentos da Microsoft . Inclusive neste site teremos exemplos para criar a SAS Credential no SQL Server, porém aqui adaptarei os exemplos aos contextos que já estava utilizando nesta sequência de posts.


login-azurermaccount

Set-AzureRmContext -SubscriptionName "Visual Studio Enterprise"

$subscriptionName='Visual Studio Enterprise'
$storageAccountName= 'stgcomunidadesqlserver0'
$containerName= 'banco2017'
$policyName = 'SASbanco2017'

# Set a variable for the name of the resource group you will create or use
$resourceGroupName= 'ComunidadeSQLServer'

# Get the access keys for the ARM storage account
$accountKeys = Get-AzureRmStorageAccountKey -ResourceGroupName $resourceGroupName -Name $storageAccountName

# Create a new storage account context using an ARM storage account
$storageContext = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $accountKeys[0].Value

# Sets up a Stored Access Policy and a Shared Access Signature for the new container
$policy = New-AzureStorageContainerStoredAccessPolicy -Container $containerName -Policy $policyName -Context $storageContext -StartTime $(Get-Date).ToUniversalTime().AddMinutes(-5) -ExpiryTime $(Get-Date).ToUniversalTime().AddYears(10) -Permission rwld

# Gets the Shared Access Signature for the policy
$sas = New-AzureStorageContainerSASToken -name $containerName -Policy $policyName -Context $storageContext
Write-Host 'Shared Access Signature= '$($sas.Substring(1))''

# Outputs the Transact SQL to the clipboard and to the screen to create the credential using the Shared Access Signature
Write-Host 'Credential T-SQL'
$tSql = "CREATE CREDENTIAL [{0}] WITH IDENTITY='Shared Access Signature', SECRET='{1}'" -f $cbc.Uri,$sas.Substring(1)
$tSql | clip
Write-Host $tSql

 

Além de criar a policy, o comando acima traz o seguinte retorno:

ResultadoCreateCredentialSASAzure

Podemos observar que no retorno do comando, temos uma sintaxe em T-SQL de “CREATE CREDENTIAL”,  com uma Identity e Secret, copie este retorno que iremos utilizar mais para frente.

Cuidado! Se no retorno deste comando tiver uma quebra de linha na Secret retornada, quando for executar este comando no SQL Server, retirar a quebra de linha.

Caso você queria verificar as Policys criadas no seu Storage, basta executar o seguinte comando:


#Verificar todas as Policyes criadas

get-AzureStorageContainerStoredAccessPolicy -Context $storageContext -container $containerName | SELECT Policy, Cont

ResultadoPolicysCriadas


#Caso Queira remover alguma Policy

<span style="color:var(--color-text);">Remove-AzureStorageContainerStoredAccessPolicy -Context $storageContext -container $containerName -Policy 'NomePolicy'</span>

Agora vamos criar nossa credencial no SQL Server.

Antes de criar nossa credencial, precisamos capturar a URL do contêiner para qual foi criado a Policy e que consequentemente será realizado os backups. Já vimos como capturar esta URL em posts anteriores, porém é só ir nas propriedades do contêiner que você consegue esta informação:

URI-Conteiner

Agora, com a URL retornada como resultado do código que acabamos de executar, vamos criar nossa credencial no SQL Server passando a URL como o nome da credencial:


CREATE CREDENTIAL [https://stgcomunidadesqlserver0.blob.core.windows.net/banco2017]
WITH IDENTITY='Shared Access Signature',
SECRET='sv=2017-07-29&sr=c&si=SASbanco2017&sig=XcTHPiyoHprzAY99B%2BmSFfWANANs%2BGHV5MzYf1P4Y%2FI%3D'

Observem que é nesta parte que utilizamos o código em T-SQL retornado pelo comando em Powershell quando criamos a Policy.

Verificando a credencial criada…CredencialCriada

E pronto, agora é só criar o seu backup, com a diferença de que agora você não passará mais a opção “WITH CREDENTIAL”. Observando também que o backup deverá ser direcionado para o contêiner em que você criou a policy/credencial, pois o nome da credencial leva o caminho completo do Blob!

BACKUP DATABASE Nane TO URL = 'https://stgcomunidadesqlserver0.blob.core.windows.net/banco2017/BKP_Nane04072019.BAK'

 

Backup criado no Blob:

BackupRealizado

Lembrando que a Storage Account “stgcomunidadesqlserver0” para qual estamos realizando o Backup é do tipo Blob Storage. 

Podemos observar que enquanto o Access Key realiza o backup gerando um Blob do tipo “Page”, o SAS realiza o backup gerando um blob do tipo “Block”. Então, desta forma, todas aquelas limitações que citei no post sobre Access Key Credential, não existem mais, ou seja, eu posso criar o meu Backup diretamente para o Storage Account do tipo “Blob” e colocar o Access Tier como “Cool” (print do exemplo), fazendo com que minha rotina de Backup fique mais simples e que eu tenha uma economia em meu armazenamento, não necessitando realizar o Backup para um GPV1 ou GPV2 e Access Tier HOT e depois de um tempo passar para o “Blob” Access Tier cool (para saber mais sobre os tipos de Storage Account e camadas de acesso, verifiquem os posts anteriores que irei colocar ao final).

Então a minha recomendação é: Se você já está no SQL Server 2016 + , realizar o seu backup utilizando o SAS.

Além do backup, podemos nos beneficiar com outros recursos utilizando a credencial SAS, como colocar os arquivos de dados e de log diretamente no Blob. Falarei disso como um bônus nos próximos Posts, assim como também falarei das limitações/erros do SAS!

Voltar para o Post de controle.

Anúncios

Um comentário sobre “Backup With SAS Credential

  1. Pingback: BACKUP DATABASE DB TO URL = ‘BLOB STORAGE’ – Comunidade SQL Server

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s