Azure, powershell i SQL

18-gru-2023

Technologie się mieszają… tutaj zobaczysz, jak w Azure SQL Database utworzyć konto użytkownika korzystając z PowerShella.

Zaczynamy od doinstalowania modułu SQLPS pozwalającego na połączenie z poziomu PowerShell do bazy danych (https://learn.microsoft.com/en-us/sql/powershell/download-sql-server-ps-module?view=sql-server-ver16):

Install-Module -Name SqlServer

No to pora na połączenie się do subskrypcji:

Connect-AzAccount
Select-AzSubscription -Subscription XXX

Mój przypadek wymagał zdefiniowania zmiennych przez zmienne środowiskowe, ale śmiało można by skorzystać ze zwykłych zmiennych:

# set environment

$env:RG = "RG-Test-Mobilo"
$env:SQLServerName= "sql-test-mobilo"
$env:sqlcmdserver = "$($env:SQLServerName).database.windows.net"
$env:sqlcmddbname="ssqldb-mobilo"
$env:USERNAME="boss"
$env:PWD="***"
$env:SQLQUERY="select @@version"$env:newUser = "my_new_user"
$env:newUserPass = "C0mpl1c4t3d-Pass!"

Do połączenia do bazy Azure SQL Database wymagane jest otwarcie firewalla. Jest to jedno z ustawień bazy danych i można je ewentualnie wykonać np. w Portalu, ale czemu by nie wykorzystać PowerShella:

$myPublicIp=(Invoke-WebRequest -uri "http://ifconfig.me/ip").Content
New-AzSqlServerFirewallRule -ResourceGroupName $env:RG -ServerName $env:SQLServerName -FirewallRuleName "Rule-$myPublicIp" -StartIpAddress $myPublicIp -EndIpAddress $myPublicIp

No to pora na testowe połączenie:

Invoke-SqlCmd -Query $env:SQLQUERY -ServerInstance $env:SQLCMDSERVER -Database $env:SQLCMDDBNAME -Username $env:USERNAME -Password $env:PWD

Jeśli w odpowiedzi zobaczysz wersję serwera – bingo! Można uruchomić polecenie tworzące użytkownika:

Invoke-SqlCmd -Query "CREATE USER $($env:newUser) WITH PASSWORD='$($env:newUserPass)' ; ALTER ROLE db_owner add member $($env:newUser);" -ServerInstance $env:SQLCMDSERVER -Database $env:SQLCMDDBNAME -Username $env:USERNAME -Password $env:PWD

No i na koniec można ponowić uruchomienie testowego zapytania, ale tym razem korzystając z konta nowego użytkownika:

Invoke-SqlCmd -Query $env:SQLQUERY -ServerInstance $env:SQLCMDSERVER -Database $env:SQLCMDDBNAME -Username $env:newUser -Password $env:newUserPass

Komentarze są wyłączone

Autor: Rafał Kraik