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