使用 Azure 自動化管理 Azure SQL 資料庫中的資料庫

本文說明使用 Azure 自動化中系統指派的受控識別,連線和管理 Azure SQL 資料庫中資料庫的相關程序。 使用 Azure 自動化,您可以使用 Azure Az PowerShell 所提供的最新 Az PowerShell Cmdlet 來管理 Azure SQL Database 中的資料庫。

Azure 自動化提供這些現成可用的 Azure Az PowerShell Cmdlet,以便您在該服務中執行所有 SQL 資料庫管理工作。 您也可以在 Azure 自動化中將這些 Cmdlet 與其他 Azure 服務的 Cmdlet 配對,將跨 Azure 服務和協力廠商系統的複雜工作自動化。

Azure 自動化也可以使用 PowerShell 對 SQL 伺服器發出 T-SQL (Transact SQL) 命令。

若要對資料庫執行命令,您需要執行下列動作:

  • 確定自動化帳戶具有系統指派的受控識別。
  • 將適當權限提供給自動化受控識別。
  • 設定 SQL 伺服器以利用 Microsoft Entra 驗證。
  • 在對應至自動化帳戶受控識別的 SQL 伺服器上建立使用者。
  • 建立 Runbook 以連線和執行命令。
  • (選用) 如果 SQL 伺服器受到防火牆的保護,請建立混合式 Runbook 背景工作角色 (HRW),在該伺服器上安裝 SQL 模組,並將 HRW IP 位址新增至防火牆上的允許清單。

使用系統指派的受控識別連線到 Azure SQL 資料庫

若要允許從自動化系統受控識別存取 Azure SQL 資料庫,請遵循下列步驟:

  1. 如果自動化系統受控識別設為 [關閉],請執行下列動作:

    1. 登入 Azure 入口網站

    2. 移至自動化帳戶。

    3. 在自動化帳戶頁面的 [帳戶設定] 下方,選取 [身分識別]

    4. 在 [系統指派] 索引標籤上,將 [狀態] 切換成 [開啟]

      Screenshot of setting the status to ON for System assigned managed identity.

  2. 開啟系統受控識別之後,您必須使用下列步驟提供帳戶所需的存取權:

    1. 在 [自動化帳戶 | 身分識別] 頁面中,在 [系統指派] 索引標籤的權限下方,選取 [Azure 角色指派]
    2. 在 Azure 角色指派頁面中,選取 [+新增角色指派 (預覽)]
    3. 在 [新增角色指派 (預覽)] 中,將 [範圍] 設為 [SQL],從 [資源] 下拉式清單中選取 [訂用帳戶],並依照最低必要權限選取 [角色],然後選取 [儲存]

    Screenshot of adding role assignment when the system assigned managed identity's status is set to ON.

  3. 使用下列步驟設定用於 Active Directory 驗證的 SQL 伺服器:

    1. 移至 Azure 入口網站首頁,然後選取 [SQL 伺服器]
    2. 在 [SQL 伺服器] 頁面的 [設定] 下方,選取 [Microsoft Entra ID]
    3. 選取 [設定管理員] 來設定用於 AD 驗證的 SQL 伺服器。
  4. 使用下列步驟在 SQL 端新增驗證:

    1. 移至 Azure 入口網站首頁,然後選取 [SQL 伺服器]
    2. 在 [SQL 伺服器] 頁面的 [設定] 下方,選取 [SQL Database]
    3. 選取您的資料庫以移至 SQL 資料庫頁面,並選取 [查詢編輯器 (預覽)],然後執行下列兩個查詢:
      • CREATE USER "AutomationAccount" FROM EXTERNAL PROVIDER WITH OBJECT_ID= ObjectID
      • EXEC sp_addrolemember db_owner, "AutomationAccount"
        • 自動化帳戶 - 取代為您自動化帳戶的名稱
        • 物件識別碼 - 取代為步驟 1 中系統受控識別主體的物件 (主體) 識別碼。

範例指令碼

連接到 Azure SQL Server

if ($($env:computerName) -eq "Client") {"Runbook running on Azure Client sandbox"} else {"Runbook running on " + $env:computerName}
Disable-AzContextAutosave -Scope Process
Connect-AzAccount -Identity
$Token = (Get-AZAccessToken -ResourceUrl https://database.windows.net).Token
Invoke-Sqlcmd -ServerInstance azuresqlserverxyz.database.windows.net -Database MyDBxyz -AccessToken $token -query 'select * from TableXYZ' 

檢查 SQL 端的帳戶權限

SELECT roles.[name] as role_name, members.name as [user_name] 
from sys.database_role_members 
Join sys.database_principals roles on database_role_members.role_principal_id= roles.principal_id 
join sys.database_principals members on database_role_members.member_principal_id=members.principal_id 
Order By 
roles.[name], members.[name] 

注意

當 SQL 伺服器是在防火牆後方執行時,您必須在自己專用網路的電腦上執行 Azure 自動化 Runbook。 確認您將這部電腦設定為混合式 Runbook 背景工作角色,這樣一來,防火牆就不會封鎖 IP 位址或網路。 如需如何將電腦設定為混合式背景工作角色的詳細資訊,請參閱建立混合式背景工作角色

使用混合式背景工作角色

當您使用混合式背景工作角色時,Runbook 使用的模組必須從提升權限的 PowerShell 提示安裝在本機環境中。 例如: - Install-module Az.Accounts and Install-module SqlServer 。 若要尋找必要的模組名稱,請在每個 Cmdlet 上執行命令,然後檢查來源。 例如,若要在 cmdlet Connect-AzAccounts 中檢查屬於 Az.Account 模組的模組名稱,請執行命令:get-command Connect-AzAccount

注意

建議您在任何想要在混合式背景工作角色上執行的 Runbook 頂端新增下列程式碼:if ($($env:computerName) -eq "CLIENT") {"Runbook running on Azure CLIENT"} else {"Runbook running on " + $env:computerName}。 此程式碼可讓您查看執行 Runbook 的節點,且萬一您不小心在 Azure 雲端而不是混合式背景工作角色上執行,則有助於判斷 Runbook 無法運作的原因。

下一步