Eu escrevi este script para restaurar um backup de banco de dados (de outra instância do servidor) e atribuir a um usuário específico um acesso a ele. Este script foi executado no console do powershell
Já tenho um login válido na instância de destino
# restores a full database backup to another database from source's latest full backup file in specified directory
# begin script configuration here
$TargetSqlServerInstance = "MyInstance"
# target server instance
$TargetDb = "targetdb"
# target database
$BackupDir = "C:\backupDB\targetdb"
# directory / share where backups are stored
# compatibility level to set target database to (2019=150, 2017=140, 2016=130, 2014=120, 2012=110, 2008/2008R2=100, 2005=90, 2000=80, 7=70)
# end script configuration here
# latest full backup file name is dynamically determined and appended to backup directory
$LatestFullBackupFile = Get-ChildItem -Path $BackupDir -Filter *.bak | Sort-Object
LastAccessTime -Descending | Select-Object -First 1
$FileToRestore = $BackupDir + '\' + $LatestFullBackupFile
# kill any connections in target database
$KillConnectionsSql=
"
USE master
GO
ALTER DATABASE $TargetDb SET SINGLE_USER WITH ROLLBACK IMMEDIATE
GO
USE master
GO
ALTER DATABASE $TargetDb SET MULTI_USER
GO
USE master
GO
"
Invoke-Sqlcmd -ServerInstance $TargetSqlServerInstance -Query $KillConnectionsSql
r
# restore
Restore-SqlDatabase -ServerInstance $TargetSqlServerInstance -Database $TargetDb -BackupFile
$FileToRestore -ReplaceDatabase
# end restore
GO
USE [targetdb]
GO
CREATE USER [myuser] FOR LOGIN [myuser]
GO
minhas provações
Quando executo este script sob operação planejada no sistema operacional Windows, a restauração está OK, mas não consigo acessar o banco de dados com o usuário.
Eu tentei executar pelo Sql Server Management Studio o script sobre criar usuário e associação com banco de dados e funciona bem
Já tentei criar um Plano de Manutenção com SSIS e o resultado sobre associação de usuário não funciona
Tentei separar em duas etapas em Manutenção planejada, a primeira para restauração, a segunda para criação do usuário, mas a segunda etapa falhou
Já tentei criar outro Plano de Manutenção com um subplano com duas atividades serializadas mas nada.
O trabalho sempre tem um status de sucesso, mas simplesmente não consigo vincular meu usuário ao meu banco de dados de destino
EDITAR
Encontrei o usuário na pasta Segurança do targetDb, mas, se eu verificar na pasta Segurança global, o login não verificou o acesso a esse banco de dados. Então posso colocar manualmente ou com o script separado