SQL 資源提供者維護作業

重要

從 Azure Stack Hub 組建 2108 開始,提供 SQL 和 MySQL 資源提供者授與存取權的訂用帳戶。 若要開始使用這項功能,或需要從舊版升級,請開啟支援案例,我們的支援工程師會引導您完成部署或升級程序。

SQL 資源提供者會在鎖定的虛擬機器 (VM) 上執行。 若要啟用維護作業,您必須更新 VM 的安全性。 若要使用最低權限主體執行此作業,請使用 PowerShell Just Enough Administration (JEA) 端點 DBAdapterMaintenance。 資源提供者安裝套件包含此動作的指令碼。

修補和更新

SQL 資源提供者不會隨著 Azure Stack Hub 提供,因為它是附加元件。 Microsoft 會視需要將更新提供給 SQL 資源提供者。

若為 SQL RP V1,發行更新的 SQL Server 資源提供者時,會提供指令碼來套用更新。 此指令碼會建立新的資源提供者 VM,將舊提供者 VM 的狀態移轉至新的 VM。

若為 SQL RP V2,資源提供者會使用用來套用 Azure Stack Hub 更新的相同更新功能來更新。

如需詳細資訊,請參閱更新 SQL 資源提供者

更新提供者 VM

SQL RP V1 會在使用者 VM 上執行,所以您需要在必要的修補程式和更新釋出時加以套用。 您可以在安裝或更新資源提供者期間安裝 Windows Update 套件。

SQL RP V2 會在隱藏的受控 Windows Server 上執行。 您不需要修補或更新資源提供者 VM。 其會在您更新 RP 時自動更新。

更新 Windows Defender 定義

這些指示只適用於 Azure Stack Hub 整合式系統上執行的 SQL RP V1。

若要更新 Windows Defender 定義:

  1. Windows Defender 的安全性智能更新 \(英文\) 下載 Windows Defender 定義更新。

    在定義更新頁面上,向下捲動至「手動下載更新」。 下載「適用於 Windows 10 和 Windows 8.1 的 Windows Defender Antivirus」64 位元檔案。

    您也可以使用此直接連結來下載/執行 fpam-fe.exe 檔案。

  2. 建立連線至 SQL 資源提供者配接器 VM 維護端點的 PowerShell 工作階段。

  3. 使用維護端點工作階段,將定義更新檔案複製到 VM。

  4. 在維護 PowerShell 工作階段上,執行 Update-DBAdapterWindowsDefenderDefinitions 命令。

  5. 在您安裝定義之後,建議您使用 Remove-ItemOnUserDrive 命令來刪除定義更新檔案。

用於更新定義的 PowerShell 指令碼範例

您可以編輯並執行下列指令碼來更新 Defender 定義。 以您環境中的值取代指令碼中的值。

# Set credentials for local admin on the resource provider VM.
$vmLocalAdminPass = ConvertTo-SecureString '<local admin user password>' -AsPlainText -Force
$vmLocalAdminUser = "<local admin user name>"
$vmLocalAdminCreds = New-Object System.Management.Automation.PSCredential `
    ($vmLocalAdminUser, $vmLocalAdminPass)

# Provide the public IP address for the adapter VM.
$databaseRPMachine  = "<RP VM IP address>"
$localPathToDefenderUpdate = "C:\DefenderUpdates\mpam-fe.exe"

# Download the Windows Defender update definitions file from https://www.microsoft.com/wdsi/definitions.
Invoke-WebRequest -Uri 'https://go.microsoft.com/fwlink/?LinkID=121721&arch=x64' `
    -Outfile $localPathToDefenderUpdate

# Create a session to the maintenance endpoint.
$session = New-PSSession -ComputerName $databaseRPMachine `
    -Credential $vmLocalAdminCreds -ConfigurationName DBAdapterMaintenance `
    -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)
# Copy the defender update file to the adapter VM.
Copy-Item -ToSession $session -Path $localPathToDefenderUpdate `
     -Destination "User:\"
# Install the update definitions.
Invoke-Command -Session $session -ScriptBlock `
    {Update-AzSDBAdapterWindowsDefenderDefinition -DefinitionsUpdatePackageFile "User:\mpam-fe.exe"}
# Cleanup the definitions package file and session.
Invoke-Command -Session $session -ScriptBlock `
    {Remove-AzSItemOnUserDrive -ItemPath "User:\mpam-fe.exe"}
$session | Remove-PSSession

設定 SQL 資源提供者的 Azure 診斷擴充功能

這些指示只適用於 Azure Stack Hub 整合式系統上執行的 SQL RP V1。

根據預設,Azure 診斷擴充功能會安裝在 SQL 資源提供者配接器 VM 上。 下列步驟示範如何自訂擴充功能來收集 SQL 資源提供者的作業事件記錄和 IIS 記錄,以便進行疑難排解和稽核。

  1. 登入 Azure Stack Hub 系統管理員入口網站。

  2. 從左側窗格中選取 [虛擬機器],搜尋 SQL 資源提供者配接器 VM,然後選取 VM。

  3. 在 VM 的 [診斷設定] 中,移至 [記錄] 索引標籤,然後選擇 [自訂] 來自訂所收集的事件記錄。 移至診斷設定

  4. 新增 Microsoft-AzureStack-DatabaseAdapter/Operational!* 以收集 SQL 資源提供者的作業事件記錄。 新增事件記錄

  5. 若要啟用 IIS 記錄的收集,請檢查 [IIS 記錄] 和 [失敗的要求記錄]新增 IIS 記錄

  6. 最後,選取 [儲存] 以儲存所有診斷設定。

為 SQL 資源提供者設定事件記錄和 IIS 記錄收集後,就可以在名為 sqladapterdiagaccount 的系統儲存體帳戶中找到記錄。

若要深入了解 Azure 診斷擴充功能,請參閱什麼是 Azure 診斷擴充功能

更新 SQL 認證

您需負責建立及維護 SQL 伺服器上的系統管理員帳戶。 資源提供者需要具有這些權限的帳戶,才能為使用者管理資料庫,但不需要存取使用者的資料。 如果需要更新 SQL Server 的系統管理員密碼,您可以使用資源提供者的系統管理員介面,變更已儲存的密碼。 這些密碼會儲存在 Azure Stack Hub 執行個體上的金鑰保存庫中。

若要修改設定,請選取 [瀏覽]> [管理資源]> [SQL 主控伺服器]> [SQL 登入] 並選取使用者名稱。 必須先在 SQL 執行個體上 (必要時還需在任何複本上) 進行變更。在 [設定] 下方,選取 [密碼]。

更新 SQL 管理員密碼

祕密輪替

這些指示只適用於 Azure Stack Hub 整合式系統上執行的 SQL RP V1。

在 Azure Stack Hub 整合式系統中搭配使用 SQL 和 MySQL 資源提供者時,Azure Stack Hub 操作員負責旋轉下列資源提供者基礎結構密碼,以確保密碼不會過期:

  • 部署期間所提供的外部 SSL 憑證。
  • 部署期間所提供的資源提供者 VM 本機系統管理員帳戶密碼。
  • 資源提供者診斷使用者 (dbadapterdiag) 密碼。
  • (版本 >= 1.1.47.0) 部署期間產生的 Key Vault 憑證。

輪替祕密的 PowerShell 範例

重要

成功的祕密輪替需要先移除任何現有版本的 Azure Stack Hub PowerShell 模組,再執行下列指令碼。

同時變更所有祕密。

.\SecretRotationSQLProvider.ps1 `
    -Privilegedendpoint $Privilegedendpoint `
    -CloudAdminCredential $cloudCreds `
    -AzCredential $adminCreds `
    -DiagnosticsUserPassword $passwd `
    -DependencyFilesLocalPath $certPath `
    -DefaultSSLCertificatePassword $certPasswd  `
    -VMLocalCredential $localCreds `
    -KeyVaultPfxPassword $keyvaultCertPasswd

變更診斷使用者密碼。

.\SecretRotationSQLProvider.ps1 `
    -Privilegedendpoint $Privilegedendpoint `
    -CloudAdminCredential $cloudCreds `
    -AzCredential $adminCreds `
    -DiagnosticsUserPassword  $passwd

變更 VM 本機系統管理員帳戶密碼。

.\SecretRotationSQLProvider.ps1 `
    -Privilegedendpoint $Privilegedendpoint `
    -CloudAdminCredential $cloudCreds `
    -AzCredential $adminCreds `
    -VMLocalCredential $localCreds

輪替 SSL 憑證

.\SecretRotationSQLProvider.ps1 `
    -Privilegedendpoint $Privilegedendpoint `
    -CloudAdminCredential $cloudCreds `
    -AzCredential $adminCreds `
    -DependencyFilesLocalPath $certPath `
    -DefaultSSLCertificatePassword $certPasswd

輪替 Key Vault 憑證

.\SecretRotationSQLProvider.ps1 `
    -Privilegedendpoint $Privilegedendpoint `
    -CloudAdminCredential $cloudCreds `
    -AzCredential $adminCreds `
    -KeyVaultPfxPassword $keyvaultCertPasswd

SecretRotationSQLProvider.ps1 參數

參數 描述 註解
AzureEnvironment 用來部署 Azure Stack Hub 的服務管理員帳戶所屬的 Azure 環境。 僅適用于Microsoft Entra部署。 支援的環境名稱為AzureCloudAzureUSGovernment,或使用中國Microsoft Entra識別碼AzureChinaCloud 選擇性
AzCredential Azure Stack Hub 服務管理員帳戶認證。 如果您用於 AzCredential 的帳戶需要多重要素驗證 (MFA),此指令碼將會失敗。 強制性
CloudAdminCredential Azure Stack Hub 雲端管理網域帳戶認證。 強制性
PrivilegedEndpoint 用來存取 Get-AzureStackStampInformation 的特殊權限端點。 強制性
DiagnosticsUserPassword 診斷使用者帳戶密碼。 選擇性
VMLocalCredential MySQLAdapter VM 上的本機系統管理員帳戶。 選擇性
DefaultSSLCertificatePassword 預設 SSL 憑證 (*pfx) 密碼。 選擇性
DependencyFilesLocalPath 相依性檔案本機路徑。 選擇性
KeyVaultPfxPassword 用來產生資料庫介面卡之 Key Vault 憑證的密碼。 選擇性

這些指示只適用於 Azure Stack Hub 整合式系統上執行的 SQL RP V2。

注意

目前僅能透過 PowerShell 支援加值資源提供者 (RP) 的祕密輪替。

如同 Azure Stack Hub 基礎結構,加值資源提供者也會使用內部和外部祕密。 身為操作員,您必須負責:

  • 提供更新的外部祕密,例如用來保護資源提供者端點的新 TLS 憑證。
  • 定期管理資源提供者祕密輪替。

當祕密即將到期時,系統管理員入口網站中會產生下列警示。 完成祕密輪替將會解決這些警示:

  • 擱置的內部憑證到期
  • 擱置的外部憑證到期

必要條件

針對輪替程序進行準備:

  1. 如果您還沒有這麼做,請先安裝適用於 Azure Stack Hub 的 PowerShell Az 模組,再繼續進行。 Azure Stack Hub 祕密輪替需要版本 2.0.2 預覽或更新版本。 如需詳細資訊,請參閱在 Azure Stack Hub 中從 AzureRM 移轉至 Azure PowerShell Az

  2. 安裝 Azs.Deployment.Admin 1.0.0 模組:PowerShell Gallery | Azs.Deployment.Admin 1.0.0

Install-Module -Name Azs.Deployment.Admin
  1. 如果外部憑證接近到期,請在取得/更新 X509 憑證之前,先檢閱 Azure Stack Hub 公開金鑰基礎結構 (PKI) 憑證需求,以了解重要的先決條件資訊 (包括所需 PFX 格式的詳細資料)。 此外,針對您特定的加值資源提供者,檢閱選用 PaaS 憑證區段中指定的需求。

準備新的 TLS 憑證以用於外部憑證輪替

注意

如果只有內部憑證即將到期,您可以略過本節。

接下來,建立或更新 TLS 憑證,以用於保護加值資源提供者端點:

  1. 針對您的資源提供者,完成產生憑證簽署要求 (CSR) 以更新憑證中的步驟。 您可以在這裡使用 Azure Stack Hub 整備檢查工具來建立 CSR。 請務必在「產生其他 Azure Stack Hub 服務的憑證要求」步驟中,為資源提供者執行正確的 Cmdlet。 例如,New-AzsDbAdapterCertificateSigningRequest 用於 SQL 和 MySQL RP。 完成時,您會將產生的 .REQ 檔案提交給憑證授權單位 (CA),以取得新的憑證。

  2. 從 CA 收到憑證檔案之後,請完成準備憑證以進行部署或輪替中的步驟。 您可以再次使用整備檢查工具來處理從 CA 傳回的檔案。

  3. 最後,完成驗證 Azure Stack Hub PKI 憑證中的步驟。 您可以再次使用整備檢查工具,在新的憑證上執行驗證測試。

輪替內部憑證

開啟已提升權限的 PowerShell 主控台並完成下列步驟,以輪替資源提供者的外部祕密:

  1. 使用操作員認證登入 Azure Stack Hub 環境。 如需 PowerShell 登入指令碼,請參閱使用 PowerShell 連線到 Azure Stack Hub。 請務必使用 PowerShell Az Cmdlet (而不是 AzureRM),並取代所有的預留位置值,例如端點 URL 和目錄租用戶名稱。

  2. 判斷資源提供者的產品識別碼。 執行 Get-AzsProductDeployment Cmdlet 以擷取最新的資源提供者部署清單。 傳回的 "value" 集合包含每個已部署資源提供者的元素。 尋找感興趣的資源提供者,並記下這些屬性的值:

    • "name" - 在值的第二個區段中包含資源提供者產品識別碼。

    例如,SQL RP 部署可能具有產品識別碼 "microsoft.sqlrp"

  3. 執行 Invoke-AzsProductRotateSecretsAction Cmdlet 以輪替內部憑證:

    Invoke-AzsProductRotateSecretsAction -ProductId $productId
    

輪替外部憑證

您必須先記下下列參數的值。

預留位置 Description 範例值
<product-id> 最新資源提供者部署的產品識別碼。 microsoft.sqlrp
<installed-version> 最新資源提供者部署的版本。 2.0.0.2
<package-id> 套件識別碼是由串連產品識別碼和已安裝版本所建置。 microsoft.sqlrp.2.0.0.2
<cert-secret-name> 用來儲存憑證祕密的名稱。 SSLCert
<cert-pfx-file-path> 憑證 PFX 檔案的路徑。 C:\dir\dbadapter-cert-file.pfx
<pfx-password> 指派給憑證 .PFX 檔案的密碼。 strong@CertSecret6

開啟已提升權限的 PowerShell 主控台,然後完成下列步驟:

  1. 使用操作員認證登入 Azure Stack Hub 環境。 如需 PowerShell 登入指令碼,請參閱使用 PowerShell 連線到 Azure Stack Hub。 請務必使用 PowerShell Az Cmdlet (而不是 AzureRM),並取代所有的預留位置值,例如端點 URL 和目錄租用戶名稱。

  2. 取得產品識別碼參數值。 執行 Get-AzsProductDeployment Cmdlet 以擷取最新的資源提供者部署清單。 傳回的 "value" 集合包含每個已部署資源提供者的元素。 尋找感興趣的資源提供者,並記下這些屬性的值:

    • "name" - 在值的第二個區段中包含資源提供者產品識別碼。
    • "properties"."deployment"."version" - 包含目前部署的版本號碼。

例如,SQL RP 部署可能具有產品識別碼 "microsoft.sqlrp" 和版本 "2.0.0.2"

  1. 藉由串連資源提供者的產品識別碼和版本,來建置資源提供者的套件識別碼。 例如,使用在上一個步驟中衍生的值,SQL RP 套件識別碼為 microsoft.sqlrp.2.0.0.2

  2. 使用上一個步驟中所衍生的套件識別碼,執行 Get-AzsProductSecret -PackageId 以擷取資源提供者所使用的祕密類型清單。 在傳回 value 的集合中,尋找包含 "properties"."secretKind" 屬性 "Certificate" 值的元素。 此元素包含 RP 憑證祕密的屬性。 請記下指派給這個憑證祕密的名稱,此名稱是依 "name" 屬性的最後一個區段識別,就在 "properties" 上方。

例如,傳回的 SQL RP 祕密集合包含名為 SSLCert"Certificate" 祕密。

  1. 使用 Set-AzsProductSecret Cmdlet 將新憑證匯入至輪替程序將使用的 Key Vault。 執行指令碼之前,請先更換變數預留位置的各項值。

    $productId = '<product-id>'
    $packageId = $productId + '.' + '<installed-version>'
    $certSecretName = '<cert-secret-name>' 
    $pfxFilePath = '<cert-pfx-file-path>'
    $pfxPassword = ConvertTo-SecureString '<pfx-password>' -AsPlainText -Force   
    Set-AzsProductSecret -PackageId $packageId -SecretName $certSecretName -PfxFileName $pfxFilePath -PfxPassword $pfxPassword -Force
    
  2. 最後,使用 Invoke-AzsProductRotateSecretsAction Cmdlet 輪替祕密:

    Invoke-AzsProductRotateSecretsAction -ProductId $productId
    

監視祕密輪替進度

您可以在 Marketplace 服務中選取資源提供者,以在 PowerShell 主控台或管理員入口網站中監視祕密輪替進度:

正在進行秘密輪替的螢幕。

注意

祕密輪替時間可能會超過 10 分鐘。 完成之後,資源提供者的狀態將會變更為「已安裝」。

收集診斷記錄

Azure Stack Hub 有多種方法可以收集、儲存診斷記錄,並將這些記錄傳送到 Microsoft 支援服務。 從版本 1.1.93 開始,SQL 資源提供者支援從您 Azure Stack Hub 環境收集記錄的標準方式。 如需詳細資訊,請參閱診斷記錄收集

從版本 1.1.93 開始,SQL 資源提供者支援從您 Azure Stack Hub 環境收集記錄的標準方式。 如果您使用較舊的版本,建議您將 SQL 資源提供者更新為最新版本。

若要從鎖定的 VM 收集記錄,您可以使用 PowerShell Just Enough Administration (JEA) 端點 DBAdapterDiagnostics。 此端點會提供下列命令:

  • Get-AzsDBAdapterLog。 此命令會建立資源提供者診斷記錄的 zip 套件,並將檔案儲存在工作階段的使用者磁碟機上。 您可以執行此命令 (不使用任何參數),並收集過去四個小時的記錄。
  • Remove-AzsDBAdapterLog。 此命令會移除資源提供者 VM 上現有的記錄套件。

端點需求和程序

安裝或更新資源提供者時,會建立 dbadapterdiag 使用者帳戶。 您將使用此帳戶來收集診斷記錄。

注意

dbadapterdiag 帳戶密碼與提供者部署或更新期間所建立的 VM 上本機系統管理員使用的密碼相同。

若要使用 DBAdapterDiagnostics 命令,請建立可連至資源提供者 VM 的遠端 PowerShell 工作階段,然後執行 Get-AzsDBAdapterLog 命令。

使用 FromDateToDate 參數,設定記錄收集的時間範圍。 如果您未指定上述一或兩個參數,則會使用下列預設值:

  • FromDate 為目前時間的前四小時。
  • ToDate 為目前時間。

用於收集記錄的 PowerShell 指令碼範例

下列指令碼示範如何從資源提供者 VM 收集診斷記錄。

# Create a new diagnostics endpoint session.
$databaseRPMachineIP = '<RP VM IP address>'
$diagnosticsUserName = 'dbadapterdiag'
$diagnosticsUserPassword = '<Enter Diagnostic password>'

$diagCreds = New-Object System.Management.Automation.PSCredential `
        ($diagnosticsUserName, (ConvertTo-SecureString -String $diagnosticsUserPassword -AsPlainText -Force))
$session = New-PSSession -ComputerName $databaseRPMachineIP -Credential $diagCreds `
        -ConfigurationName DBAdapterDiagnostics `
        -SessionOption (New-PSSessionOption -Culture en-US -UICulture en-US)

# Sample that captures logs from the previous hour.
$fromDate = (Get-Date).AddHours(-1)
$dateNow = Get-Date
$sb = {param($d1,$d2) Get-AzSDBAdapterLog -FromDate $d1 -ToDate $d2}
$logs = Invoke-Command -Session $session -ScriptBlock $sb -ArgumentList $fromDate,$dateNow

# Copy the logs to the user drive.
$sourcePath = "User:\{0}" -f $logs
$destinationPackage = Join-Path -Path (Convert-Path '.') -ChildPath $logs
Copy-Item -FromSession $session -Path $sourcePath -Destination $destinationPackage

# Clean up the logs.
$cleanup = Invoke-Command -Session $session -ScriptBlock {Remove-AzsDBAdapterLog}
# Close the session.
$session | Remove-PSSession

SQL Server 資源提供者版本 1 的已知限制

限制
當部署、升級或祕密輪替指令碼失敗時,標準的記錄收集機制會無法收集某些記錄。

因應措施
除了使用標準的記錄收集機制之外,請移至指令碼所在解壓縮資料夾的 Logs 資料夾,以尋找更多記錄檔。

下一步

新增 SQL Server 主控伺服器