Skip to content

Commit 80ca312

Browse files
Remove-DbaDbUser - Fix Azure SQL Database compatibility (#9933)
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
1 parent 36f16c6 commit 80ca312

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

public/Remove-DbaDbUser.ps1

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,26 @@ function Remove-DbaDbUser {
121121

122122
if ($Pscmdlet.ShouldProcess($user, "Removing user from Database $db on target $server")) {
123123
# Drop Schemas owned by the user before dropping the user
124-
$schemaUrns = $user.EnumOwnedObjects() | Where-Object Type -EQ Schema
124+
# Azure SQL Database doesn't support EnumOwnedObjects(), so we need to use T-SQL query instead
125+
if ($server.DatabaseEngineType -eq "SqlAzureDatabase") {
126+
$splatQuery = @{
127+
SqlInstance = $server
128+
Database = $db.Name
129+
Query = "SELECT s.name FROM sys.schemas s WHERE s.principal_id = USER_ID('$($user.Name)')"
130+
EnableException = $true
131+
}
132+
$ownedSchemaNames = Invoke-DbaQuery @splatQuery | Select-Object -ExpandProperty name
133+
$schemaUrns = @()
134+
foreach ($schemaName in $ownedSchemaNames) {
135+
$schema = $db.Schemas[$schemaName]
136+
if ($schema) {
137+
$schemaUrns += $schema.Urn
138+
}
139+
}
140+
} else {
141+
$schemaUrns = $user.EnumOwnedObjects() | Where-Object Type -EQ Schema
142+
}
143+
125144
if ($schemaUrns) {
126145
Write-Message -Level Verbose -Message "User $user owns $($schemaUrns.Count) schema(s)."
127146

0 commit comments

Comments
 (0)