diff --git a/03-Azure/01-02 Data/02-SQL_Modernization/labautomation/infra/modules/sql2022-vm-cse.bicep b/03-Azure/01-02 Data/02-SQL_Modernization/labautomation/infra/modules/sql2022-vm-cse.bicep index 2ac5b9e24..e0db1e204 100644 --- a/03-Azure/01-02 Data/02-SQL_Modernization/labautomation/infra/modules/sql2022-vm-cse.bicep +++ b/03-Azure/01-02 Data/02-SQL_Modernization/labautomation/infra/modules/sql2022-vm-cse.bicep @@ -10,7 +10,7 @@ param sqlMiAdminUsername string @secure() param sqlMiAdminPassword string -var ConfigureSQLMachineCommand = 'powershell.exe -NoLogo -NoProfile -ExecutionPolicy Bypass -File "bootstrap-newsql.ps1" -BackupUri "https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak" -adminUsername ${adminUsername} -adminPassword ${adminPassword}' +var ConfigureSQLMachineCommand = 'powershell.exe -NoLogo -NoProfile -ExecutionPolicy Bypass -File "bootstrap-newsql.ps1" -BackupUri "https://github.com/Microsoft/sql-server-samples/releases/download/wide-world-importers-v1.0/WideWorldImporters-Full.bak" -adminUsername ${adminUsername} -adminPassword ${adminPassword} -sqlMiAdminUsername ${sqlMiAdminUsername} -sqlMiAdminPassword ${sqlMiAdminPassword}' resource virtualMachine 'Microsoft.Compute/virtualMachines@2024-11-01' existing = { name: vmName diff --git a/03-Azure/01-02 Data/02-SQL_Modernization/labautomation/scripts/bootstrap-legacy.ps1 b/03-Azure/01-02 Data/02-SQL_Modernization/labautomation/scripts/bootstrap-legacy.ps1 index 90ecfd65a..eb82a5f75 100644 --- a/03-Azure/01-02 Data/02-SQL_Modernization/labautomation/scripts/bootstrap-legacy.ps1 +++ b/03-Azure/01-02 Data/02-SQL_Modernization/labautomation/scripts/bootstrap-legacy.ps1 @@ -26,7 +26,7 @@ Write-Host "Downloading Team Databases..." Write-Host "Configuring legacy SQL Server..." -& .\Configure-legacySQL.ps1 -sqlusername $adminUsername -sqlpassword $adminPassword +& .\Configure-legacySQL.ps1 -sqlusername $sqlMiAdminUsername -sqlpassword $sqlMiAdminPassword Write-Host "Installing AzureCLI..." diff --git a/03-Azure/01-02 Data/02-SQL_Modernization/labautomation/scripts/bootstrap-newsql.ps1 b/03-Azure/01-02 Data/02-SQL_Modernization/labautomation/scripts/bootstrap-newsql.ps1 index 8f6d53199..37b77c072 100644 --- a/03-Azure/01-02 Data/02-SQL_Modernization/labautomation/scripts/bootstrap-newsql.ps1 +++ b/03-Azure/01-02 Data/02-SQL_Modernization/labautomation/scripts/bootstrap-newsql.ps1 @@ -1,7 +1,9 @@ param( [string]$BackupUri, [string]$adminUsername, - [string]$adminPassword + [string]$adminPassword, + [string]$sqlMiAdminUsername, + [string]$sqlMiAdminPassword ) $ErrorActionPreference = 'Stop' @@ -14,7 +16,7 @@ Write-Host "Configuring SQL Firewall..." Write-Host "Restoring Sample Database..." -& .\Restore-SampleDatabases.ps1 -BackupUri $BackupUri -sqlusername $adminUsername -sqlpassword $adminPassword +& .\Restore-SampleDatabases.ps1 -BackupUri $BackupUri -sqlusername $sqlMiAdminUsername -sqlpassword $sqlMiAdminPassword Write-Host "Bootstrap completed." diff --git a/03-Azure/01-02 Data/02-SQL_Modernization/labautomation/shared-deploy-lab.ps1 b/03-Azure/01-02 Data/02-SQL_Modernization/labautomation/shared-deploy-lab.ps1 index ef2ee228e..e5324b91c 100644 --- a/03-Azure/01-02 Data/02-SQL_Modernization/labautomation/shared-deploy-lab.ps1 +++ b/03-Azure/01-02 Data/02-SQL_Modernization/labautomation/shared-deploy-lab.ps1 @@ -240,148 +240,6 @@ if (-not $found) throw "Expected Entra ID Admin was not configured within 2 minutes." } -#Adding Sysadmin role to the Entra ID Admin on the SQLMI -# SQL MI connection details -$server = $managedInstanceFQDN -$database = "master" -$username = $sqlMiAdminUsername -$password = $sqlMiAdminPassword - -# Entra ID users/groups to add -$principals = Get-MhhLabUser -UserId @($AllowedEntraUserIds) | Where-Object { $_.ShortName.ToLower() -match "labuser-[0-9]{4}"} | Select-Object -ExpandProperty UserPrincipalName - -# Connection string -$connectionString = @" -Server=tcp:$server; -Initial Catalog=$database; -User ID=$username; -Password=$password; -Encrypt=True; -TrustServerCertificate=False; -Connection Timeout=30; -"@ - -# Load SqlClient -Add-Type -AssemblyName System.Data - -$conn = New-Object System.Data.SqlClient.SqlConnection($connectionString) - -try { - $conn.Open() - - foreach ($principal in $principals) { - - Write-Host "Processing $principal ..." - - # - # Check whether login exists - # - $cmd = $conn.CreateCommand() - $cmd.CommandText = @" - SELECT COUNT(*) - FROM sys.server_principals - WHERE name = @name; -"@ - - $null = $cmd.Parameters.Add( - "@name", - [System.Data.SqlDbType]::NVarChar, - 256 - ) - - $cmd.Parameters["@name"].Value = $principal - - $exists = [int]$cmd.ExecuteScalar() - - if ($exists -eq 0) { - - Write-Host " Creating Entra login" - - # Object names cannot be parameterised, therefore QUOTENAME() - $createCmd = $conn.CreateCommand() - $createCmd.CommandText = @" - DECLARE @sql nvarchar(max); - - SET @sql = - N'CREATE LOGIN ' + - QUOTENAME(@name) + - N' FROM EXTERNAL PROVIDER'; - - EXEC (@sql); -"@ - - $null = $createCmd.Parameters.Add( - "@name", - [System.Data.SqlDbType]::NVarChar, - 256 - ) - - $createCmd.Parameters["@name"].Value = $principal - - $createCmd.ExecuteNonQuery() | Out-Null - } - - # - # Add to sysadmin if not already a member - # - $roleCheck = $conn.CreateCommand() - $roleCheck.CommandText = @" - SELECT COUNT(*) - FROM sys.server_role_members rm - JOIN sys.server_principals r - ON rm.role_principal_id = r.principal_id - JOIN sys.server_principals p - ON rm.member_principal_id = p.principal_id - WHERE r.name = N'sysadmin' - AND p.name = @name; -"@ - - $null = $roleCheck.Parameters.Add( - "@name", - [System.Data.SqlDbType]::NVarChar, - 256 - ) - - $roleCheck.Parameters["@name"].Value = $principal - - $isSysAdmin = [int]$roleCheck.ExecuteScalar() - - if ($isSysAdmin -eq 0) { - - Write-Host " Adding to sysadmin" - - $roleCmd = $conn.CreateCommand() - $roleCmd.CommandText = @" - DECLARE @sql nvarchar(max); - - SET @sql = - N'ALTER SERVER ROLE [sysadmin] ADD MEMBER ' + - QUOTENAME(@name); - - EXEC (@sql); -"@ - - $null = $roleCmd.Parameters.Add( - "@name", - [System.Data.SqlDbType]::NVarChar, - 256 - ) - - $roleCmd.Parameters["@name"].Value = $principal - - $roleCmd.ExecuteNonQuery() | Out-Null - } - else { - Write-Host " Already sysadmin" - } - } -} -finally { - if ($conn.State -eq 'Open') { - $conn.Close() - } -} - $rg = Get-AzResourceGroup -Name $sharedResourceGroup -ErrorAction SilentlyContinue $tags = $rg.Tags $tags["microhack-shared-deployment"] = "Succeeded"