Доступ запрещен при попытке доступа к сети PSDrive от агента MS SQL, который также создал этот диск - PullRequest
0 голосов
/ 10 февраля 2020

У меня следующий код, непосредственно загруженный в задание агента MS SQL. Результат - Cannot open backup device '\\mydrive\export$\mydb\MYDB_FULL_COPY_ONLY_20200210_040156_1.bak'. Operating system error 5(Access is denied.). в строке Restore-SqlDatabase. Как видите, диск настроен прямо в этом скрипте. Я могу успешно использовать Get-ChildItem из общего диска в том же сценарии, чтобы оценить, какие резервные копии необходимо создать. Не должно ли это также привести к отказу в доступе, если возникла проблема с доступом? Как правильно сопоставить сетевой ресурс? Я бы предпочел не загружать резервную копию перед восстановлением, так как в ней достаточно много данных.

$ErrorActionPreference = "Stop"
Set-Location c:
Import-Module SQLPS

$importObject = Import-Clixml -Path E:\Restore\restore-creds.xml
$key = [io.file]::ReadAllBytes('E:\Restore\key-file') 
$secureString = ConvertTo-SecureString -String $importObject.Password -Key $key
$savedCreds = New-Object System.Management.Automation.PSCredential($importObject.UserName, $secureString)

Remove-PSDrive -Name "SQLBackups" -erroraction 'silentlycontinue'
$drive = New-PSDrive -Name "SQLBackups" -PSProvider "FileSystem" -Root "\\mydrive\export$" -Credential $savedCreds -Scope "Script"
Join-Path -path $drive.Root -childpath "/mydb" |  ls

$today = Get-Date -format 'yyyyMMdd'
$basePath = $drive.Root
$backups = Get-ChildItem -Path "$basePath\mydb\MYDB_FULL_COPY_ONLY_$today*"
$relocate = @()
$relocate += New-Object Microsoft.SqlServer.Management.Smo.RelocateFile ("MYDB", "E:\MSSQL\MSSQL14.MSSQLSERVER\MSSQL\DATA\mydb.mdf")
$relocate += New-Object Microsoft.SqlServer.Management.Smo.RelocateFile ("MYDB_Log", "F:\MSSQL\mydb_Log.ldf")

Restore-SqlDatabase -ServerInstance localhost -Database MYDB -RelocateFile $relocate -BackupFile $backups

Обновление: При выполнении простого копирования этих файлов на локальный диск в рамках той же работы все работает нормально. Работает ли Restore-SqlDatabase под другим пользовательским контекстом, чем сценарий Powershell, даже если он выполняется как SQL задание агента?

...