最近、SQL ServerをWindows 2008 R2およびSQL Server 2008 R2からWindows 2012 R2およびSQL Server 2014 SP1にアップグレードしました。 SQLエージェントジョブの1つが実行に失敗します。ジョブはPowerShellスクリプトを実行して、SQLエージェントジョブをディスクにスクリプトします。ジョブはエラーで失敗します。
SSPIハンドシェイクがエラーコード0x8009030cで失敗しました
サーバーにRDPを実行し、SQL Serverエージェントサービスの資格情報を使用してISEでPSスクリプトを実行すると、スクリプトが機能します。
何か案は?
PSスクリプトは次のとおりです。
param([String]$ServerName)
$OutputFolder = "\\backupfolder\sqlbackups\sqlservername\SQLAgentJobs"
#Load the SQL Server SMO Assembly
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo") | Out-Null
#Create a new SqlConnection object
$objSQLConnection = New-Object System.Data.SqlClient.SqlConnection
Try
{
$objSQLConnection.ConnectionString = "Server=$ServerName;Integrated Security=SSPI;"
$objSQLConnection.Open() | Out-Null
$objSQLConnection.Close()
}
Catch
{
$errText = $Error[0].ToString()
Write-Host $errText
}
$DoesFolderExist = Test-Path $OutputFolder
$null = if (!$DoesFolderExist){MKDIR "$OutputFolder"}
$srv = New-Object "Microsoft.SqlServer.Management.Smo.Server" $ServerName
foreach($job in $srv.JobServer.Jobs)
{
$job_name = $job.Name
$job.Script() | out-file "$OutputFolder\$job_name.sql"
}
SQLサーバージョブからPowerShellスクリプトを実行するときにも、同様の問題が発生しました。
両方のサーバーでリモートPowerShellが有効になっておらず、サーバー間のファイアウォールアクセスが適切に構成されていない場合、問題が発生します。
別のサーバーでPowerShellスクリプトを実行-SQL Serverジョブ内から
私がこの問題を解決した方法は、プロキシアカウントを使用することです。
私は、SQLサーバーにプロキシアカウントを作成しました。これには、必要なリモートサーバー、フォルダー、およびファイルに対するすべての関連権限があり、そのアカウントとしてSQLジョブを実行します。
私の場合のプロキシアカウントはドメインアカウントであり、このアカウントにリモートサーバーに対する権限を付与しました。
これはプロキシに役立つ場合があります: プロキシに関連付けられたADアカウントを取得する方法?
以下のこのリンクから、あなたは見ることができます:
リモートサーバーで実行中のPowerShellの問題-アクセスが拒否されました
回避策に関する限り、 SUに関するこの回答 があります。あなたは答えを完全に理解するために 記事の詳細 を読むことができますが、これは権限を調整するための主要なコマンドです:
他のユーザーを許可する場合は、次のコマンドを実行します。
Set-PSSessionConfiguration -Name Microsoft.PowerShell -showSecurityDescriptorUI
このアクションはシステムに深刻な影響を与える可能性があることに注意してください。そのため、本当にこれを実行することを確認してください。