Skip to content

Commit df60d98

Browse files
Export-DbaUser - Add schema ownership to exported scripts (#10275)
1 parent 57fa89a commit df60d98

2 files changed

Lines changed: 24 additions & 0 deletions

File tree

public/Export-DbaUser.ps1

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -562,6 +562,16 @@ function Export-DbaUser {
562562
$outsql += "$grantObjectPermission $($objectPermission.PermissionType) ON $object TO [$grantee]$withGrant AS [$($objectPermission.Grantor)];"
563563
}
564564

565+
#Schema Ownership
566+
foreach ($schema in $db.Schemas | Where-Object { $_.Owner -eq $dbuser.Name -and @("sa", "dbo", "information_schema", "sys", "guest") -notcontains $_.Name }) {
567+
if ($Template) {
568+
$ownerName = "{templateUser}"
569+
} else {
570+
$ownerName = $schema.Owner
571+
}
572+
$outsql += "ALTER AUTHORIZATION ON SCHEMA::[{0}] TO [{1}];" -f $schema.Name, $ownerName
573+
}
574+
565575
} catch {
566576
Stop-Function -Message "This user may be using functionality from $($versionName[$db.CompatibilityLevel.ToString()]) that does not exist on the destination version ($versionNameDesc)." -Continue -InnerErrorRecord $_ -Target $db
567577
}

tests/Export-DbaUser.Tests.ps1

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ Describe $CommandName -Tag IntegrationTests {
5656
$user2 = "dbatoolsci_exportdbauser_user2"
5757
$table = "dbatoolsci_exportdbauser_table"
5858
$role = "dbatoolsci_exportdbauser_role"
59+
$schema = "dbatoolsci_exportdbauser_schema"
5960

6061
$outputPath = "$($TestConfig.Temp)\Dbatoolsci_user_CustomFolder"
6162
$outputFile = "$($TestConfig.Temp)\Dbatoolsci_user_CustomFile.sql"
@@ -93,6 +94,7 @@ Describe $CommandName -Tag IntegrationTests {
9394
$null = $db.Query("CREATE TABLE $table (C1 INT);")
9495
$null = $db.Query("GRANT SELECT ON OBJECT::$table TO [$user];")
9596
$null = $db.Query("EXEC sp_addrolemember '$role', '$user';")
97+
$null = $db.Query("CREATE SCHEMA [$schema] AUTHORIZATION [$user];")
9698
$null = $db.Query("EXEC sp_addrolemember '$role01', '$user01';")
9799
$null = $db.Query("EXEC sp_addrolemember '$role02', '$user01';")
98100
$null = $db.Query("EXEC sp_addrolemember '$role02', '$user02';")
@@ -216,4 +218,16 @@ Describe $CommandName -Tag IntegrationTests {
216218
}
217219
}
218220
}
221+
222+
Context "Schema ownership" {
223+
It "Exports schema ownership for users that own schemas" {
224+
$results = Export-DbaUser -SqlInstance $TestConfig.InstanceSingle -Database $dbname -User $user -Passthru
225+
$results | Should -BeLike "*ALTER AUTHORIZATION ON SCHEMA::[[]$schema] TO [[]$user]*"
226+
}
227+
228+
It "Exports schema ownership with template placeholders" {
229+
$results = Export-DbaUser -SqlInstance $TestConfig.InstanceSingle -Database $dbname -User $user -Template -Passthru
230+
$results | Should -BeLike "*ALTER AUTHORIZATION ON SCHEMA::[[]$schema] TO [[]``{templateUser``}]*"
231+
}
232+
}
219233
}

0 commit comments

Comments
 (0)