Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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..."

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
param(
[string]$BackupUri,
[string]$adminUsername,
[string]$adminPassword
[string]$adminPassword,
[string]$sqlMiAdminUsername,
[string]$sqlMiAdminPassword
)

$ErrorActionPreference = 'Stop'
Expand All @@ -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."

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
Loading