Skip to content

Commit 4db71f2

Browse files
Get-DbaPermission - Fix Azure SQL DB compatibility
- Skip server-level permissions query on Azure (unsupported sys.server_* views) - Replace SUSER_SNAME(owner_sid) with database-scoped subquery on Azure - Both changes are gated on $server.IsAzure to avoid changing non-Azure behavior Fixes #9612 (do Get-DbaPermission) Co-authored-by: Andreas Jordan <andreasjordan@users.noreply.github.com>
1 parent 8987045 commit 4db71f2

1 file changed

Lines changed: 14 additions & 4 deletions

File tree

public/Get-DbaPermission.ps1

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -332,8 +332,18 @@ function Get-DbaPermission {
332332
}
333333

334334
if ($IncludeServerLevel) {
335-
Write-Message -Level Debug -Message "T-SQL: $ServPermsql"
336-
$server.Query($ServPermsql)
335+
if ($server.IsAzure) {
336+
Write-Message -Level Warning -Message "Server-level permissions are not supported on Azure SQL Database. Skipping -IncludeServerLevel."
337+
} else {
338+
Write-Message -Level Debug -Message "T-SQL: $ServPermsql"
339+
$server.Query($ServPermsql)
340+
}
341+
}
342+
343+
$currentDBPermsql = if ($server.IsAzure) {
344+
$DBPermsql.Replace("SUSER_SNAME(owner_sid)", "(SELECT TOP 1 name FROM sys.database_principals WHERE sid = owner_sid)")
345+
} else {
346+
$DBPermsql
337347
}
338348

339349
$dbs = $server.Databases
@@ -354,9 +364,9 @@ function Get-DbaPermission {
354364
Continue
355365
}
356366

357-
Write-Message -Level Debug -Message "T-SQL: $DBPermsql"
367+
Write-Message -Level Debug -Message "T-SQL: $currentDBPermsql"
358368
try {
359-
$db.ExecuteWithResults($DBPermsql).Tables.Rows
369+
$db.ExecuteWithResults($currentDBPermsql).Tables.Rows
360370
} catch {
361371
Stop-Function -Message "Failure executing against $($db.Name) on $instance" -ErrorRecord $_ -Continue
362372
}

0 commit comments

Comments
 (0)